Skip to content
edgesync Timeline
Login

Timeline

Parents and children of check-in [afa1002be5]

2026-05-04
20:20
feat(notify): add NewServiceFromPath constructor (#129)

Adds a path-based Service constructor for callers that want notify without managing the *libfossil.Repo lifecycle separately:

type ServiceFromPathConfig struct { RepoPath string NATSConn *nats.Conn From string FromName string }
func NewServiceFromPath(cfg ServiceFromPathConfig) (*Service, error)

If the repo already exists at RepoPath it's opened; otherwise it's created via InitNotifyRepo. Service.Close() now closes the repo when the Service was constructed via NewServiceFromPath; the existing NewService path is unchanged (caller still owns the repo).

The new constructor uses the same open-or-create pattern hub.NewHub uses, so re-entry on an existing path Just Works.

Closes #115 check-in: 5ceb63c701 user: [email protected] tags: trunk

20:19
docs(architecture): add hub-package.md ADR (#128)

Documents the top-level hub/ package shipped in PR #109 + revised in PR #122 (deadlock fix).

Covers public API surface, lifecycle ordering (HTTP listener bound during NewHub for immediate HTTPAddr availability, then NATS server ReadyForConnections), the SQLite tuning decision (busy_timeout yes, MaxOpenConns(1) explicitly no — see #120), the in-root vs. separate- module choice (with #118 as the migration path), and integration with the leaf agent (sim/hub_leaf_test.go::TestHubLeafE2E locks the contract).

Cross-referenced from agent-deployment.md and listed at the top of CLAUDE.md alongside the other ADRs.

Closes #114 check-in: afa1002be5 user: [email protected] tags: trunk

19:44
test(sim): hub + leaf agent end-to-end integration test (#126)

Adds sim/hub_leaf_test.go: a real *hub.Hub bound to auto-allocated ports, a real *agent.Agent built against a leaf repo cloned from the hub, and a round-trip Commit + SyncTo + Hub.ReadAt that exercises the HTTP-xfer path end-to-end.

Without this test, the kind of cross-component regression bones surfaced in #120 (the SetMaxOpenConns deadlock under concurrent clones) only shows up downstream. With it, EdgeSync's own CI catches it.

Wired into the existing 'Sim serve tests' step (Makefile + test.yml) alongside TestServeHTTP/TestLeafToLeaf/TestAgentServe so the test runs on every PR.

Closes #113 check-in: 995066ac2a user: [email protected] tags: trunk