Skip to content

Add EUPL-1.2 license, refresh submodules, and enhance service registration#5

Merged
Snider merged 13 commits into
mainfrom
dev
Jun 29, 2026
Merged

Add EUPL-1.2 license, refresh submodules, and enhance service registration#5
Snider merged 13 commits into
mainfrom
dev

Conversation

@Snider

@Snider Snider commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

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-io package, dependency updates to support new features and compatibility, and the inclusion of a formal open-source license.

Key changes include:

Cross-platform support

  • Added an RFC (RFC.md) detailing the plan to make go-io's local/medium.go compatible 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

  • Updated the go/go.mod file to bump the dappco.re/go module from v0.9.0 to v0.10.4 and 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]
  • Updated the external/go submodule to a newer commit, aligning with the dependency changes.

Licensing

  • Added a LICENCE file with the full text of the European Union Public Licence (EUPL) v1.2, formally specifying the project's open-source licensing terms.

Code improvements

  • Improved the Medium.Read method in go/datanode/medium.go to use core.AsString(data) for zero-copy string conversion, enhancing performance.

Documentation cleanup

  • Removed the CONSUMERS.md file, which previously listed modules importing dappco.re/go/core/io, to reduce maintenance overhead and potential for outdated information.

Snider and others added 13 commits May 1, 2026 08:34
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>
@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@Snider, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 37 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9489872f-5abc-4cff-832f-5ea56b8ecb5a

📥 Commits

Reviewing files that changed from the base of the PR and between bc40fef and 8768458.

⛔ Files ignored due to path filters (1)
  • go/go.sum is excluded by !**/*.sum
📒 Files selected for processing (18)
  • CONSUMERS.md
  • LICENCE
  • RFC.md
  • external/go
  • go/datanode/medium.go
  • go/go.mod
  • go/local/medium.go
  • go/local/medium_link.go
  • go/local/medium_link_test.go
  • go/pkg/medium/github/github.go
  • go/pkg/medium/pwa/pwa.go
  • go/pkg/medium/sftp/sftp.go
  • go/pkg/medium/webdav/webdav.go
  • go/service.go
  • go/service_example_test.go
  • go/service_test.go
  • go/sigil/sigils_example_test.go
  • go/store/store.go

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Snider Snider merged commit f28e981 into main Jun 29, 2026
5 of 7 checks passed
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant