Skip to content

Commit e3a6c97

Browse files
committed
feat: reconcile fleet release evidence
1 parent c53d39c commit e3a6c97

10 files changed

Lines changed: 300 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9292
- `brigade repos actions dispatch plan/apply`, `dispatch --all-reviewed`, `reconcile`, and `context plan/build` for routing reviewed fleet actions into target repo work imports, building action-scoped context packs, and reconciling target repo completion evidence back into the local fleet queue.
9393
- `brigade repos release plan/build/list/show/compare/closeout/archive` for local fleet release train bundles that collect per-repo release readiness, release candidates, fleet action reconciliation, verification, review, security, and operator evidence into manual-only publish plans without remote mutation.
9494
- `brigade repos release actions` and `brigade repos release evidence` for reviewed release train action queues and manual publish evidence records that stay local, explicit, and non-executing.
95+
- `brigade repos release reconcile` and `summary` for resolving fleet release actions against manual evidence and including reconciliation summaries in release train closeouts.
9596
- `brigade work sweep closeout <sweep-id|latest>` for reviewable sweep closeout records that block unresolved pending imports, support explicit deferrals, and surface unclosed sweeps through inbox hygiene.
9697
- `brigade work backup init/status/doctor/import-issues` for read-only local backup health summaries and `backup-health` inbox imports.
9798
- Backup health checks for stale snapshots, failed or stale checks, failed or stale prunes, missing summaries, overdue restore rehearsals, and unsafe private summary fields.

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,7 @@ Roadmap and repo-fleet commands:
521521
- `brigade repos actions dispatch plan/apply`, `dispatch --all-reviewed`, `reconcile`, and `context plan/build` route reviewed fleet actions into target repo work imports, build action-scoped context packs, and reconcile target repo progress back to the fleet action queue without promoting, running, fixing, cloning, or mutating remotes.
522522
- `brigade repos release plan/build/list/show/compare/closeout/archive` builds local fleet release train bundles under `.brigade/repos/releases/`, classifies each configured repo as ready, blocked, needing review or dispatch, in progress, stale, missing a release candidate, or deferred, and writes a manual-only publish checklist without pushing, tagging, publishing, or mutating remotes.
523523
- `brigade repos release actions plan/build/list/show/start/done/defer/archive` and `brigade repos release evidence plan/record/list/show` turn reviewed release trains into local train action queues and manual publish evidence records without executing verification, publishing, or remote-mutating commands.
524+
- `brigade repos release reconcile` and `brigade repos release summary` reconcile train actions against manual evidence records and summarize unresolved, missing, blocked, skipped, deferred, and completed release evidence.
524525

525526
Repo fleet and pattern registry output is local and privacy preserving. It records presence, counts, labels, fingerprints, command labels, log labels, and receipt references, but does not copy repo guidance files, private paths, raw logs, scanner output, private config, owner names, exact private repo names, or raw evidence into public artifacts. Fleet sweeps and fleet release trains run only explicit foreground local read/report commands, never clone, pull, push, tag, publish, fix, promote, dismiss, or mutate remotes.
526527

ROADMAP.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Goal: make Brigade a safe target for local automations that discover useful work
4646
- Check local release readiness before publish operations. Status: implemented with `brigade release plan`, `doctor`, `run`, `runs`, and `show`, collecting work closeout, verification, review, scanner, security, handoff, content-guard, docs, changelog, roadmap, and git-state evidence without pushing, tagging, or mutating remotes.
4747
- Build local release candidate packets before manual publish steps. Status: implemented with `brigade release candidate plan/build/list/show/archive`, local candidate bundles, evidence JSON, release notes drafts, manual-only publish plans, candidate health warnings, and no remote mutation.
4848
- Audit roadmap closure and neutral pattern coverage. Status: started with `brigade roadmap audit`, `brigade roadmap patterns`, stale phase warnings, documented command drift checks, roadmap-audit imports, and source-pattern decision records without public reference names.
49-
- Inspect local repo fleet readiness without copying private repo contents. Status: started with gitignored `.brigade/repos.toml`, `brigade repos init/list/show/scan/doctor/import-issues`, `brigade repos sweep plan/run/runs/show/closeout`, `brigade repos report plan/build/list/show/archive/closeout`, `brigade repos actions plan/build/list/show/start/done/defer/archive`, `brigade repos actions dispatch`, `brigade repos actions reconcile`, `brigade repos actions context`, `brigade repos release plan/build/list/show/compare/closeout/archive`, `brigade repos release actions`, and `brigade repos release evidence`, using safe metadata summaries, explicit fleet evidence sweeps, local fleet reports, reviewed fleet action queues, per-repo work import dispatch, action-scoped context packs, fleet release train bundles, manual publish evidence records, AGENTS and fallback guidance detection, repo-fleet imports, and daily-loop health surfacing.
49+
- Inspect local repo fleet readiness without copying private repo contents. Status: started with gitignored `.brigade/repos.toml`, `brigade repos init/list/show/scan/doctor/import-issues`, `brigade repos sweep plan/run/runs/show/closeout`, `brigade repos report plan/build/list/show/archive/closeout`, `brigade repos actions plan/build/list/show/start/done/defer/archive`, `brigade repos actions dispatch`, `brigade repos actions reconcile`, `brigade repos actions context`, `brigade repos release plan/build/list/show/compare/closeout/archive`, `brigade repos release actions`, `brigade repos release evidence`, `brigade repos release reconcile`, and `brigade repos release summary`, using safe metadata summaries, explicit fleet evidence sweeps, local fleet reports, reviewed fleet action queues, per-repo work import dispatch, action-scoped context packs, fleet release train bundles, manual publish evidence records, AGENTS and fallback guidance detection, repo-fleet imports, and daily-loop health surfacing.
5050
- Close out scanner sweeps after review. Status: started with `brigade work sweep closeout <sweep-id|latest>`, deferred import recording, missing-reference blocking, and inbox hygiene warnings for unclosed sweeps.
5151
- Inspect local operator state from one read-only center view. Status: started with `brigade center status/activity/reviews/templates`, `brigade center report plan/build/list/show/archive/review/compare/closeout`, and `brigade center actions plan/build/list/show/start/done/defer/archive`, aggregating local work, imports, sweeps, reviews, handoffs, tools, learning, context packs, projects, security, and release state into JSON, reviewed action queues, closeouts, and local report bundles without a daemon or server.
5252

docs/operator-center.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ Each action stores:
117117

118118
`brigade repos release plan/build/list/show/compare/closeout/archive` creates local fleet release train bundles under `.brigade/repos/releases/`. Release trains aggregate per-repo readiness, candidates, fleet action reconciliation, verification, review, security, operator reports, and dirty-state counts into a manual-only publish plan. They classify repos as ready, blocked, needing review or dispatch, in progress, stale, missing a release candidate, or deferred. Compare and closeout keep the train reviewable without pushing, tagging, publishing, or mutating remotes.
119119

120-
`brigade repos release actions` turns reviewed release trains into local per-repo action queues, and `brigade repos release evidence` records manual publish evidence such as verification, release doctor, candidate compare, tag, push, and release outcomes. These records are local metadata only.
120+
`brigade repos release actions` turns reviewed release trains into local per-repo action queues, and `brigade repos release evidence` records manual publish evidence such as verification, release doctor, candidate compare, tag, push, and release outcomes. `brigade repos release reconcile` resolves actions against those evidence records, and `brigade repos release summary` reports unresolved, missing, blocked, skipped, deferred, and completed evidence. These records are local metadata only.
121121

122122
Center status, center reviews, work brief, work doctor, release doctor, and release evidence include fleet sweep, fleet report, fleet action queue, dispatch, reconciliation, fleet release train action, and manual evidence health.
123123

docs/release-candidates.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ The train evidence uses safe repo ids, safe labels, local ids, statuses, counts,
5252

5353
The fleet publish plan is manual-only. It can include checklist labels for verification, release doctor, candidate compare, tagging, pushing, and release creation, but Brigade does not run those commands or mutate remotes.
5454

55-
Reviewed release trains can produce local release action queues with `brigade repos release actions build`. Operators can also record manual publish evidence with `brigade repos release evidence record`. Evidence records track the repo id, train id, step, status, safe summary, and fingerprints. They are receipts of manual work, not commands to run.
55+
Reviewed release trains can produce local release action queues with `brigade repos release actions build`. Operators can also record manual publish evidence with `brigade repos release evidence record`. Evidence records track the repo id, train id, step, status, safe summary, and fingerprints. `brigade repos release reconcile` marks train actions done only after required evidence is completed, skipped, or deferred, and `brigade repos release summary` shows missing or blocked evidence. These are receipts of manual work, not commands to run.
5656

5757
## Boundary
5858

docs/repo-fleet.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ brigade repos release build
4141
brigade repos release list
4242
brigade repos release show <train-id>
4343
brigade repos release compare <train-id|latest>
44+
brigade repos release reconcile <train-id|latest>
45+
brigade repos release summary <train-id|latest>
4446
brigade repos release closeout <train-id|latest>
4547
brigade repos release archive <train-id>
4648
brigade repos release actions plan <train-id|latest>
@@ -118,6 +120,8 @@ Each repo is classified as `ready`, `blocked`, `needs-review`, `needs-dispatch`,
118120

119121
`brigade repos release evidence plan/record/list/show` records manual publish evidence under `.brigade/repos/releases/evidence.jsonl`. Evidence steps are `verification`, `release-doctor`, `candidate-compare`, `tag`, `push`, `release`, and `other`. Statuses are `completed`, `skipped`, `blocked`, and `deferred`. These records describe what the operator did manually; Brigade does not run verification, tag, push, or release commands.
120122

123+
`brigade repos release reconcile <train-id|latest>` compares release-train actions with manual evidence records. An action is marked done only when the repo has required evidence for verification, release doctor, candidate compare, tag, push, and release, and none of those records are blocked. Completed, skipped, and deferred evidence all count as reviewed operator outcomes. Missing or blocked evidence keeps the action open. `brigade repos release summary <train-id|latest>` reports per-repo evidence status, unresolved action counts, and suggested next commands. Release train closeout includes summary counts when available.
124+
121125
Privacy boundaries:
122126

123127
- No cloning.

docs/roadmap-completion-plan.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ Implementation scope:
154154
- Route reviewed fleet actions into target repo work imports and reconcile target repo progress back into the fleet queue without automatic promotion, work execution, fixes, cloning, or remote mutation.
155155
- Coordinate local fleet release trains from safe per-repo release readiness, candidate, verification, review, security, operator, and fleet action evidence without pushing, tagging, publishing, or mutating remotes.
156156
- Turn reviewed fleet release trains into local release action queues and record manual publish evidence without executing verification, tag, push, release, or remote-mutating commands.
157+
- Reconcile fleet release train actions against manual evidence records and include summary counts in train closeout.
157158

158159
Acceptance:
159160

@@ -166,6 +167,7 @@ Acceptance:
166167
- Tests cover fleet action dispatch, idempotency, dismissed-until-changed behavior, changed-fingerprint superseding, action context packs, reconciliation states, and daily-loop integration.
167168
- Tests cover fleet release train plan/build/list/show/compare/closeout/archive text and JSON, per-repo classifications, bundle evidence, manual-only publish plans, compare warnings, closeout states, daily-loop integration, and release-doctor integration.
168169
- Tests cover fleet release train action plan/build/list/show/start/done/defer/archive and manual release evidence plan/record/list/show, including health integration and no command execution.
170+
- Tests cover release train reconcile and summary for complete, skipped, deferred, blocked, and missing evidence states.
169171
- Tests prove private repo names, owner names, org names, local paths, and raw evidence are not copied into public docs, fixtures, imports, handoffs, release evidence, or committed diffs.
170172

171173
Phase 35 status:
@@ -211,6 +213,14 @@ Phase 44 status:
211213
- Manual publish evidence is recorded under `.brigade/repos/releases/evidence.jsonl` for verification, release doctor, candidate compare, tag, push, release, and other manual steps.
212214
- Repo doctor, center status, center reviews, work brief, work doctor, and release doctor surface open train actions and blocked manual evidence records without executing any publish or verification command.
213215

216+
Phase 45 status:
217+
218+
- Implemented command surface: `brigade repos release reconcile <train-id|latest>`.
219+
- Implemented command surface: `brigade repos release summary <train-id|latest>`.
220+
- Reconciliation marks release-train actions done when required manual evidence is completed, skipped, or deferred, and keeps actions open when evidence is missing or blocked.
221+
- Release summaries report per-repo evidence status, missing evidence, blocked evidence, unresolved action counts, and suggested next commands.
222+
- Release train closeout now includes reconciliation summary counts when available.
223+
214224
### 3. Inspiration Pattern Registry
215225

216226
Deliverable: a bounded local record of external workflow patterns Brigade intends to support.

src/brigade/cli.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,11 @@ def _build_parser() -> argparse.ArgumentParser:
323323
p_repos_release_item.add_argument("train_id", help="Train id, unique prefix, or latest.")
324324
p_repos_release_item.add_argument("--target", "-t", type=Path, default=Path("."), help="Repo or workspace to inspect.")
325325
p_repos_release_item.add_argument("--json", action="store_true", help="Print machine-readable JSON.")
326+
for name in ("reconcile", "summary"):
327+
p_repos_release_review = repos_release_sub.add_parser(name, help=f"{name.title()} one repo fleet release train.")
328+
p_repos_release_review.add_argument("train_id", nargs="?", default="latest", help="Train id, unique prefix, or latest.")
329+
p_repos_release_review.add_argument("--target", "-t", type=Path, default=Path("."), help="Repo or workspace to inspect.")
330+
p_repos_release_review.add_argument("--json", action="store_true", help="Print machine-readable JSON.")
326331
p_repos_release_closeout = repos_release_sub.add_parser("closeout", help="Close out one repo fleet release train.")
327332
p_repos_release_closeout.add_argument("train_id", nargs="?", default="latest", help="Train id, unique prefix, or latest.")
328333
p_repos_release_closeout.add_argument("--target", "-t", type=Path, default=Path("."), help="Repo or workspace to update.")
@@ -1801,6 +1806,10 @@ def main(argv=None) -> int:
18011806
return repos_cmd.release_closeout(target=args.target, train_id=args.train_id, status=args.status, reason=args.reason, json_output=args.json)
18021807
if args.repos_release_command == "archive":
18031808
return repos_cmd.release_archive(target=args.target, train_id=args.train_id, json_output=args.json)
1809+
if args.repos_release_command == "reconcile":
1810+
return repos_cmd.release_reconcile(target=args.target, train_id=args.train_id, json_output=args.json)
1811+
if args.repos_release_command == "summary":
1812+
return repos_cmd.release_summary(target=args.target, train_id=args.train_id, json_output=args.json)
18041813
if args.repos_release_command == "actions":
18051814
if args.repos_release_actions_command == "plan":
18061815
return repos_cmd.release_actions_plan(target=args.target, train_id=args.train_id, json_output=args.json)

0 commit comments

Comments
 (0)