Conversation
Reference: core/api/LICENCE. Co-Authored-By: Cladius Maximus <cladius@lethean.io>
…block) - git submodule update on external/* to current dev tips - go.work paths fixed for Phase 1 /go/ subtree layout where stale - go.work go-version bumped 1.26.0 → 1.26.2 to match submodule floor Workspace-mode build (`go build ./...`) is the verification path. Some repos may surface transitive dep issues (api/go.sum checksum drift, etc.) which are separate cascade tickets — not blocking this metadata refresh. Co-Authored-By: Cladius Maximus <cladius@lethean.io>
Wraps a Medium-backed io service with NewService factory + lifecycle
hooks. IOConfig.Root selects between Local (unsandboxed package
default) and a sandboxed Medium rooted at the given path.
Action handlers exposed: io.{read,write,delete,delete_all,rename,
exists,is_file,is_dir,ensure_dir,list}. Stream-returning ops
(Open/Create/Append/ReadStream/WriteStream) stay as direct
Service.Medium method calls — non-IPC-friendly.
…is #1336) Direct package use → Register(c). Subsystem use via core.WithName → NewService(opts). Both shapes available per Snider 2026-05-01.
audit: 10 -> 0 / verdict COMPLIANT. Co-Authored-By: Cladius <noreply@anthropic.com>
Implements the RFC at ./RFC.md (the Lethean Desktop Windows
cross-compile blocker for io/local/medium.go).
Drops syscall.Stat_t / syscall.Lstat / syscall.S_IFMT direct refs
in favour of core.Lstat + core.FsFileInfo + core.ModeSymlink —
the same shape that already works cross-platform in dappco.re/go.
New files:
go/local/medium_link.go — linkInfo {IsSymlink, Mode, Size,
ModTime} + lstat() / readlink()
go/local/medium_link_test.go — red/green coverage (good /
missing path / symlink round-trip)
Modified:
go/local/medium.go — drop the Unix-only lstat/isSymlink/readlink
triplet; one call site at line 124 now uses
info.IsSymlink instead of isSymlink(uint32(...))
go/service.go — gofmt cleanup + Usage example: marker
go/service_test.go — trailing-blank cleanup
Verified by Codex:
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build ./... ✓
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go vet ./... ✓
GOWORK=off go vet ./... ✓
GOWORK=off go test -count=1 ./... ✓
gofmt -l . ✓
v0.9.0 audit verdict: COMPLIANT
Consumer-side: lthn/desktop submodule pointer bump to follow.
Co-Authored-By: Virgil <virgil@lethean.io>
…— bump core/go v0.10.0 All five medium implementations followed the same pattern in Read(): data, err := goio.ReadAll(file_or_body) ... return string(data), nil `data` is freshly allocated by ReadAll and unreachable after the conversion — perfect fit for core/go v0.10.0's AsString primitive. Skip the byte-by-byte copy; return a zero-copy string view of the buffer the caller already owns. Bumps core/go dep v0.9.0 → v0.10.0 to consume the new SPOR. Files: datanode/medium.go datanode read pkg/medium/sftp/sftp.go SFTP read pkg/medium/github/github.go GitHub read pkg/medium/pwa/pwa.go PWA read pkg/medium/webdav/webdav.go WebDAV read Per-call savings scale with file size — for a 1 MB file the read path drops one 1 MB allocation + 1 MB copy. Negligible against the network/disk floor on miss, real on warm-cache repeated reads.
…llision dappco.re/go v0.10.0 (bumped in the previous commit) added core.Buffer = bytes.Buffer. Sibling test files in this package dot-import core, pulling Buffer into local scope; the package-level `type Buffer = sigilBuffer` alias here then collided. Rename to SigilBuffer — specific to the package's intent, no namespace crowding.
Co-Authored-By: Virgil <virgil@lethean.io>
core/go v0.10.4 newly exports a 'Buffer' type. The sigil package's crypto_sigil_test.go and sigil_test.go dot-import core (". \"dappco.re/go\""), which injected the new core.Buffer into the test scope and collided with an unused 'type Buffer = sigilBuffer' alias in sigils_example_test.go (go test ./... failed to build with 'Buffer already declared through dot-import'). Removed the dead alias — it had no references in the package — which clears the collision without touching the dot-imports.
Advance external/go workspace submodule to v0.10.4 so dev (GOWORK on) and standalone (GOWORK=off) builds resolve the same core/go; go build, go test ./..., and both GOWORK=off lanes verified green.
Co-Authored-By: Virgil <virgil@lethean.io>
# Conflicts: # go/go.mod # go/go.sum # go/sigil/sigils_example_test.go
Co-Authored-By: Virgil <virgil@lethean.io>
|
Warning Review limit reached
Next review available in: 37 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (18)
Warning Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|



This pull request introduces several important updates to the repository, focusing on cross-platform compatibility, dependency upgrades, and licensing. The main highlights are the addition of Windows support for the
go-iopackage, dependency updates to support new features and compatibility, and the inclusion of a formal open-source license.Key changes include:
Cross-platform support
RFC.md) detailing the plan to makego-io'slocal/medium.gocompatible with Windows, replacing Unix-specific syscall usage with a new cross-platform abstraction (linkInfo) and per-platform implementations. This enables successful Windows cross-compilation and testing, and outlines file splits and helper signatures for maintainability.Dependency and submodule updates
go/go.modfile to bump thedappco.re/gomodule fromv0.9.0tov0.10.4and added several new dependencies (e.g.,github.com/marcboeker/go-duckdb,github.com/apache/arrow-go/v18,github.com/google/flatbuffers,github.com/klauspost/compress,github.com/pierrec/lz4/v4, and others) to support new features and improve compatibility. [1] [2] [3] [4]external/gosubmodule to a newer commit, aligning with the dependency changes.Licensing
LICENCEfile with the full text of the European Union Public Licence (EUPL) v1.2, formally specifying the project's open-source licensing terms.Code improvements
Medium.Readmethod ingo/datanode/medium.goto usecore.AsString(data)for zero-copy string conversion, enhancing performance.Documentation cleanup
CONSUMERS.mdfile, which previously listed modules importingdappco.re/go/core/io, to reduce maintenance overhead and potential for outdated information.