T01: repo-manager.freshness-receipt.v1 contract and an append-only JSONL
store in the Repo Manager evidence sink (~/.repo-manager/freshness-receipts.jsonl,
RM_FRESHNESS_RECEIPTS_PATH). It is flock-serialised and fsynced, and a receipt
cannot be built without a verified primary hub. The State Hub DB is not used.
T02: `rmgr freshness run --limit N --max-seconds S [--dry-run]`. Repositories
are ranked stalest first. A repository is skipped as noop when its Forgejo
HEAD equals the last successful receipt. Otherwise the runner reconciles from
the immutable Forge commit via POST /repos/{slug}/work-record-projection/reconcile,
never from a checkout or a sweep. The hub receipt is verified (primary, label,
expected == derived == projected), refusals are never forced
(acknowledge_retirements=false), and a hard time cap applies. The run
refuses to write receipts unless the hub is the verified primary.
Workplan status: active (founder approved the design 2026-10-04).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 692292@bnt-lap001
Assistant-Session: 89c7d8e8-e1b3-47eb-9411-a0ab227fca2f
|
||
|---|---|---|
| .githooks | ||
| config | ||
| decisions | ||
| docs | ||
| history | ||
| intakes | ||
| interfaces | ||
| schemas | ||
| specs | ||
| src/repo_manager | ||
| tests | ||
| workplans | ||
| .custodian-brief.md | ||
| .dockerignore | ||
| .gitignore | ||
| .repo-classification.yaml | ||
| AGENTS.md | ||
| Containerfile | ||
| INTENT.md | ||
| Makefile | ||
| pyproject.toml | ||
| README.md | ||
| SCOPE.md | ||
| uv.lock | ||
| WORK-RECORDS.md | ||
repo-manager
Repository integration boundary for the HelixForge agentic software development and operations environment.
Repositories remain independently valid and usable. Repo Manager gives each repository a stable representation inside HelixForge, observes its declared state, performs governed repository changes, and hosts its coach/lead/director agent representation.
| Flavor | tooling (not a domain hub) |
| Domain | infotech |
| Parent project | prj-state-hub-retirement |
| Foundation WP | RMGR-WP-0001 |
Start with INTENT.md, SCOPE.md, and the genesis record.
Architecture:
- Repository representation v0.1
- Observation and command contracts v0.1
- State Hub extraction inventory v0.1
- ADR-001 Implementation foundation
- Railiance app deployment guide (
RMGR-WP-0006) - Repository standards v0.1 (
RMGR-WP-0004) - Repository registers v0.1 (
RMGR-WP-0008) - InterfaceCanon consumer terminology
make install # or: uv pip install -e ".[dev]"
make test
rmgr --version
rmgr observe --path .
rmgr reconcile --path .
rmgr update-task-status --path . --task-id <ID> --status progress
rmgr workplan create --path . --workplan-id EX-WP-0001 --title "Example" --goal "Deliver X."
rmgr workplan update --path . --workplan-id EX-WP-0001 --status active
rmgr workplan delete --path . --workplan-id EX-WP-0001 --confirm # archives; never erases
rmgr task add --path . --workplan-id EX-WP-0001 --title "Implement" --description "Deliver it."
rmgr task update --path . --task-id EX-WP-0001-T01 --status progress
rmgr adhoc add --path . --title "Small fix" --description "Complete the bounded fix."
rmgr sync --path . --push # primary/railiance01 derives the exact pushed commit
rmgr register put --path . --kind technical-debt --entry-id TD-001 \
--title "Debt item" --data-json '{"severity":"high"}'
rmgr register list --path . --kind technical-debt
rmgr rapp wrap --path ../rapp-some-app --app some-app \
--ownership-repo some-app --from-app ../some-app
rmgr rapp validate --path ../rapp-user-engine --family-root ..
rmgr rapp place --path ../rapp-some-app --reef reef-railiance
rmgr conform --path .
rmgr prefix-uniqueness --root ..
rmgr scaffold --path ../prj-example --flavor project --wp-prefix EX-WP --no-commit
rmgr scaffold --path . --refresh-hub-access --no-commit # State Hub access table from config/state-hub-access.yaml
rmgr sync is the normal work-record closeout path. It uses the canonical kind
registry, fills only missing deterministic UUIDv5 identifiers, refuses dirty or
behind workplan sources, verifies that the API is primary/railiance01, and
requests one central forge-derived reconciliation. A local/cache State Hub is
never populated. registrar-reconcile remains only for sealed legacy UUID
migration and repair.
Vertical-slice proof: docs/evidence/t05-vertical-slice.md.
Direction: