feat-014: watch mode + CI-triggered central indexing#154
Merged
Conversation
Graduates FA-005. feat-004 made re-indexing cheap; this adds the two automatic triggers that keep the graph fresh, one per topology, with a hard wall between them. Local (`ckg watch`, opt-in, embedded store only): - pure clock-injected TriggerPolicy (on-commit default / on-idle / on-save / interval / manual), debounced + single-flight; structural refresh only by default (no per-save embed/enrich spend). - branch gating (watch.branches), watchfiles-backed fs loop behind a lazy `[watch]` extra, `--status` / `--once`. - refuses a central (store.central_root) or read-only store — the local/central split is enforced in the engine, not documented. Central (`ckg ci init`): scaffolds a self-contained, single-writer GitHub workflow that indexes into the central store on merge/nightly (managed-marker, idempotent, --print/--force). Also fixes #148: postrelease.yml now runs off the Release workflow completing (workflow_run) instead of `release: published`, so it no longer polls PyPI before the on-demand OIDC publish and false-alarms. New `agentforge_graph.ingest.watch` + `agentforge_graph.ci` packages, `watch:` config block, guide 12, 53 new tests incl. a real fs-watch E2E. Gate: 952 passed / 94.65%, ruff + mypy clean. CHANGELOG under [Unreleased]; version/date/Status roll in the release PR. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
kjoshi07
added a commit
that referenced
this pull request
Jul 7, 2026
Roll [Unreleased] → [0.6.3] (2026-07-07), bump pyproject 0.6.2 → 0.6.3, README Status → 0.6.3, refresh uv.lock. Release notes in docs/release/0.6.3.md; feature landed in #154. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Graduates FA-005. feat-004 made re-indexing cheap and incremental — this adds the two automatic triggers that keep the graph fresh, one per topology, with a hard wall between them.
Local —
ckg watch(opt-in, embedded store only)TriggerPolicy:on-commit(default; commit / branch switch, ignores plain saves),on-idle,on-save,interval,manual. Debounced + single-flight so bursts coalesce.embed_on_watch/enrich_on_watchoff) — never burns embedding/LLM spend per save.watch.branches: watch feature branches, skipmain/release/*),--status,--once.store.central_root) or read-only store — the local/central split is enforced in the engine, not just documented. That's what keeps a dev's watch loop from racing writes into the shared graph.watchfilesfs-loop behind a lazy[watch]extra; base install stays lean.Central —
ckg ci init.github/workflows/ckg-index.yml(concurrency group) that indexes into the central store on merge-to-main+ nightly. Managed-marker, idempotent,--print/--force.Also fixes #148 (post-release false alarm)
postrelease.ymlnow runs off the Release workflow completing successfully (workflow_run) instead of the GitHubrelease: publishedevent — under on-demand OIDC publishing the release exists before the artifact reaches PyPI, so the old trigger polled too early, 404'd ~10 min, and auto-opened a spurious failure issue every release.Shape
New
agentforge_graph.ingest.watch(policy · git-watch · branch gate · guard · filter · watchfiles source · runner) +agentforge_graph.ci(workflow scaffolder), framework-free (ADR-0001).watch:config block. Specfeat-014, designdesign-014, guide12-watch-and-ci-indexing.md, release notesdocs/release/0.6.3.md.Validation
watchfiles: a saved file gets indexed live).git commiton a feature branch triggered a refresh that indexed the new symbol;ckg watch --statuscorrectly reports the branch gate;ckg ci initwrites a valid workflow.CHANGELOG under
[Unreleased]; version/date/READMEStatus:roll in the follow-up release/0.6.3 PR.🤖 Generated with Claude Code