repo-harness 0.24.1 → 0.24.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +3 -1
- package/CLAUDE.md +3 -1
- package/README.md +32 -11
- package/assets/reference-configs/agentic-development-flow.md +21 -2
- package/assets/reference-configs/external-tooling.md +15 -11
- package/assets/reference-configs/global-working-rules.md +2 -0
- package/assets/reference-configs/harness-overview.md +9 -9
- package/assets/reference-configs/hook-operations.md +7 -4
- package/assets/reference-configs/minimal-change-hooks.md +8 -7
- package/assets/reference-configs/strategy.md +6 -22
- package/assets/reference-configs/workflow-orchestration.md +3 -0
- package/assets/skill-version.json +2 -2
- package/assets/skills/repo-harness-chatgpt/references/orchestrate.md +11 -10
- package/assets/skills/repo-harness-cross-review/references/generic-review.md +22 -5
- package/assets/templates/contract.template.md +7 -5
- package/assets/templates/helpers/capability-resolver.ts +305 -109
- package/assets/templates/plan.template.md +7 -6
- package/assets/workflow-contract.v1.json +3 -6
- package/dist/hook-entry.js +1389 -1694
- package/dist/oar-review-host.js +1222 -178
- package/dist/operator-ui/assets/ArchitectureWorkspace-9kTFQyoX.js +1 -0
- package/dist/operator-ui/assets/index-BPO_QTWf.js +18 -0
- package/dist/operator-ui/index.html +1 -1
- package/package.json +5 -8
- package/references/pm-boundary.md +1 -1
- package/scripts/acceptance-receipt.ts +79 -1701
- package/scripts/archive-workflow.sh +22 -93
- package/scripts/axr5-archctx-clean-room.ts +31 -24
- package/scripts/capability-resolver.ts +25 -525
- package/scripts/change-assessment.ts +21 -24
- package/scripts/check-agent-tooling.sh +18 -5
- package/scripts/check-ci.sh +3 -3
- package/scripts/check-context-map.ts +2 -1
- package/scripts/check-state-boundaries.ts +217 -48
- package/scripts/check-tarball-install-smoke.sh +44 -39
- package/scripts/classify-historical-plans.ts +1 -1
- package/scripts/install-agent-fleet.sh +1 -1
- package/scripts/lib/axr5-clean-room-runtime.ts +73 -0
- package/scripts/lib/ci-run-tests.sh +1 -1
- package/scripts/lib/project-init-lib.sh +1 -1
- package/scripts/merge-gate.ts +16 -32
- package/scripts/new-plan.sh +7 -6
- package/scripts/recovery-view-cli.ts +0 -1
- package/scripts/refresh-current-status.sh +10 -6
- package/scripts/run-harness-profile-benchmark.ts +10 -25
- package/scripts/run-skill-evals.ts +25 -47
- package/scripts/select-ci-coverage.ts +48 -8
- package/scripts/select-test-suite.ts +0 -2
- package/scripts/skill-surface-select.ts +8 -2
- package/scripts/sync-codex-installed-copies.sh +18 -32
- package/scripts/sync-helper-sources.ts +33 -5
- package/scripts/sync-reference-configs.ts +1 -1
- package/scripts/test-file-durations.json +0 -3
- package/scripts/verification-plan.ts +32 -13
- package/scripts/verify-contract.sh +6 -6
- package/src/cli/chatgpt-browser/oracle-provider.ts +11 -18
- package/src/cli/chatgpt-skill/installer.ts +2 -2
- package/src/cli/commands/adoption-plan.ts +15 -2
- package/src/cli/commands/architecture-configuration.ts +3 -3
- package/src/cli/commands/architecture-debt.ts +5 -5
- package/src/cli/commands/architecture-projection.ts +32 -5
- package/src/cli/commands/brain.ts +2 -2
- package/src/cli/{runtime → commands}/candidate-reconciliation.ts +14 -7
- package/src/cli/commands/capability-context.ts +5 -7
- package/src/cli/commands/doctor.ts +5 -4
- package/src/cli/commands/external-source.ts +22 -14
- package/src/cli/commands/fleet.ts +105 -160
- package/src/cli/commands/global-runtime.ts +35 -27
- package/src/cli/commands/herdr-skill.ts +8 -8
- package/src/cli/commands/init-hook.ts +3 -3
- package/src/cli/commands/init.ts +38 -627
- package/src/cli/commands/integration.ts +27 -24
- package/src/cli/commands/module.ts +1 -1
- package/src/cli/commands/operator.ts +14 -0
- package/src/cli/commands/publication.ts +12 -14
- package/src/cli/commands/refactor.ts +14 -7
- package/src/cli/commands/retention.ts +59 -10
- package/src/cli/commands/review.ts +62 -7
- package/src/cli/commands/run.ts +1 -1
- package/src/cli/commands/security.ts +2 -2
- package/src/cli/commands/state.ts +15 -76
- package/src/cli/commands/status.ts +6 -6
- package/src/cli/commands/tools.ts +2 -2
- package/src/cli/commands/upgrade.ts +14 -8
- package/src/cli/hook/agent-notice.ts +3 -3
- package/src/cli/hook/board-slice-context.ts +28 -155
- package/src/cli/hook/event-telemetry.ts +2 -2
- package/src/cli/hook/mutation-guard.ts +2 -2
- package/src/cli/hook/protected-path-notice.ts +3 -3
- package/src/cli/hook/route-registry.ts +9 -3
- package/src/cli/hook/runtime.ts +22 -18
- package/src/cli/hook/stop-handler.ts +2 -3
- package/src/cli/index.ts +11 -17
- package/src/cli/installer/configuration-ownership.ts +49 -44
- package/src/cli/installer/global-context.ts +1 -1
- package/src/cli/installer/install-profile.ts +20 -90
- package/src/cli/installer/managed-entries.ts +3 -13
- package/src/cli/installer/runtime-host-lock.ts +48 -8
- package/src/cli/installer/skill-projection.ts +7 -5
- package/src/cli/installer/targets/claude.ts +3 -3
- package/src/cli/installer/targets/codex.ts +5 -5
- package/src/cli/installer/uninstall.ts +24 -24
- package/src/cli/mcp/audit.ts +6 -6
- package/src/cli/mcp/auth.ts +2 -6
- package/src/cli/mcp/coding-tools.ts +3 -6
- package/src/cli/mcp/coding-workspaces.ts +9 -9
- package/src/cli/mcp/fleet-tools.ts +19 -12
- package/src/cli/mcp/general-repo-access.ts +37 -132
- package/src/cli/mcp/guarded-write.ts +1 -1
- package/src/cli/mcp/process-sessions.ts +30 -45
- package/src/cli/mcp/repo.ts +3 -3
- package/src/cli/mcp/setup-ownership.ts +3 -3
- package/src/cli/mcp/setup.ts +3 -3
- package/src/cli/mcp/state-tools.ts +4 -4
- package/src/cli/mcp/uninstall.ts +9 -9
- package/src/cli/repo-adoption/target.ts +2 -2
- package/src/cli/tools/codegraph.ts +4 -4
- package/src/cli/tty-prompt.ts +2 -5
- package/src/core/adoption/minimum-harness-version.ts +9 -30
- package/src/core/adoption/workflow-contract-asset.ts +3 -9
- package/src/core/architecture/module-view.ts +4 -1
- package/src/core/capabilities/resolver.ts +146 -0
- package/src/core/engineers/agent-runtime-effect.ts +60 -61
- package/src/core/engineers/engineering-overlay.ts +58 -0
- package/src/core/engineers/principal-claim.ts +0 -4
- package/src/core/engineers/profile-binding.ts +1 -445
- package/src/core/engineers/scheduling.ts +364 -2
- package/src/core/evidence/fold.ts +11 -1
- package/src/core/evidence/idempotency.ts +7 -1
- package/src/core/evidence/types.ts +23 -2
- package/src/core/external-sources/admitted-binding.ts +76 -0
- package/src/core/fleet/admitted-task-message.ts +408 -0
- package/src/core/fleet/board.ts +112 -86
- package/src/core/fleet/task-inbox-layout.ts +7 -0
- package/src/core/integration/product-acceptance.ts +88 -88
- package/src/core/messages/task-message-claim.ts +18 -0
- package/src/core/messages/task-message-error.ts +13 -0
- package/src/core/operator/admitted-task-activity.ts +88 -0
- package/src/core/operator/admitted-task-context.ts +40 -0
- package/src/core/operator/fleet-snapshot.ts +37 -22
- package/src/core/operator/organization-snapshot.ts +130 -118
- package/src/core/operator/planning-snapshot.ts +75 -100
- package/src/core/operator/runtime-status.ts +5 -0
- package/src/core/operator/task-activity.ts +5 -17
- package/src/core/operator/task-diff.ts +18 -31
- package/src/core/publication/feedback.ts +15 -17
- package/src/core/publication/merge-readiness.ts +17 -45
- package/src/core/publication/publication-receipt.ts +1 -347
- package/src/core/review/acceptance-receipt.ts +618 -0
- package/src/core/review/authority-context.ts +207 -0
- package/src/core/review/change-assessment.ts +4 -4
- package/src/core/review/control-delegation.ts +134 -0
- package/src/core/review/module-review-prompt.ts +1 -4
- package/src/core/review/review-packet.ts +3 -3
- package/src/core/sessions/session-selector.ts +38 -0
- package/src/core/sessions/task-sessions.ts +47 -0
- package/src/core/setup/types.ts +1 -1
- package/src/core/skill-surface/catalog.ts +1 -41
- package/src/core/state/artifact-parsers.ts +1 -1
- package/src/core/state/coordination-identity.ts +27 -477
- package/src/core/state/provider-board.ts +55 -0
- package/src/core/state/types.ts +0 -216
- package/src/effects/admission/admission-source.ts +32 -0
- package/src/effects/admission/admission-store.ts +196 -0
- package/src/effects/admission/control-admission.ts +25 -0
- package/src/effects/admission/issue-goal.ts +71 -0
- package/src/{core → effects}/adoption/gitignore-plan.ts +2 -2
- package/src/{core → effects}/adoption/manifest-templates.ts +1 -1
- package/src/{core → effects}/adoption/plan.ts +5 -5
- package/src/{core → effects}/adoption/standard-plan.ts +7 -7
- package/src/effects/adoption/workflow-marker.ts +31 -0
- package/src/effects/{capabilities → architecture}/archcontext-owners.ts +20 -9
- package/src/effects/architecture/archcontext-resolve-cache.ts +77 -0
- package/src/effects/architecture/archctx-provider.ts +18 -37
- package/src/effects/architecture/capability-resolver.ts +428 -0
- package/src/effects/architecture/model-reader.ts +5 -5
- package/src/effects/artifact-retention.ts +97 -19
- package/src/effects/{evidence/atomic-append.ts → atomic-append.ts} +1 -1
- package/src/effects/dev-activity/collector.ts +26 -16
- package/src/effects/engineers/agent-runtime-adapters/herdr-cli-agent.ts +11 -4
- package/src/effects/engineers/agent-runtime-effect-store.ts +120 -118
- package/src/effects/engineers/dependency-authority.ts +256 -255
- package/src/effects/engineers/engineering-overlay.ts +65 -256
- package/src/effects/engineers/scheduling.ts +117 -153
- package/src/effects/evidence/attested-import.ts +27 -114
- package/src/effects/evidence/blob-store.ts +1 -1
- package/src/effects/evidence/eval-catalog.ts +101 -0
- package/src/effects/evidence/event-log.ts +19 -6
- package/src/effects/evidence/recovery-materializer.ts +18 -94
- package/src/effects/evidence/verification-execution.ts +246 -145
- package/src/effects/expensive-run-lock.ts +2 -2
- package/src/effects/external-sources/binding.ts +77 -172
- package/src/effects/external-sources/refresh.ts +2 -2
- package/src/effects/external-sources/store.ts +159 -21
- package/src/effects/fleet/board.ts +223 -228
- package/src/effects/{publication/feedback.ts → fleet/provider-feedback.ts} +132 -140
- package/src/effects/fleet/task-inbox-layout-migration.ts +6 -5
- package/src/effects/fleet/task-inbox.ts +273 -209
- package/src/effects/fs-transaction.ts +200 -138
- package/src/effects/git/common-directory.ts +4 -6
- package/src/effects/git/readonly-virtual-tree.ts +3 -2
- package/src/effects/git/repository-identity.ts +75 -0
- package/src/effects/git/run-git.ts +15 -0
- package/src/effects/git/runner.ts +114 -0
- package/src/effects/{terminal/task-worktree.ts → git/task-repository.ts} +7 -6
- package/src/effects/git/worktree-topology.ts +3 -2
- package/src/effects/{external-sources/github.ts → github/issues.ts} +7 -2
- package/src/effects/host-skill-roots.ts +39 -0
- package/src/effects/integration/product-acceptance.ts +118 -100
- package/src/effects/locking/exclusive-directory-lock.ts +69 -10
- package/src/effects/locking/process-start-time.ts +107 -0
- package/src/effects/locking/task-lock.ts +17 -0
- package/src/effects/managed-tree.ts +78 -0
- package/src/effects/operator/admitted-task-activity.ts +36 -0
- package/src/effects/operator/architecture.ts +1 -1
- package/src/effects/operator/fleet-collector-process.ts +2 -2
- package/src/effects/operator/repository-snapshot.ts +17 -91
- package/src/effects/operator/runtime-source.ts +2 -2
- package/src/effects/operator/runtime-status.ts +1 -6
- package/src/effects/operator/server.ts +106 -103
- package/src/effects/operator/task-activity.ts +2 -3
- package/src/effects/operator/task-context.ts +30 -40
- package/src/effects/operator/task-diff.ts +11 -73
- package/src/effects/operator/task-history.ts +3 -3
- package/src/effects/operator/task-read-process.ts +15 -7
- package/src/effects/process-group-registry.ts +169 -0
- package/src/effects/process-group-termination.ts +132 -0
- package/src/effects/process-runner.ts +28 -43
- package/src/effects/process-supervisor.ts +42 -77
- package/src/effects/{engineers → profiles}/profile-store.ts +3 -42
- package/src/effects/publication/merge-readiness.ts +174 -351
- package/src/effects/refactor/archctx-provider.ts +19 -9
- package/src/effects/refactor/recommendations.ts +6 -4
- package/src/effects/repo-registry.ts +50 -99
- package/src/effects/review/acceptance-receipt.ts +1223 -0
- package/src/effects/review/change-assessment.ts +10 -61
- package/src/effects/review/diff-fingerprint.ts +6 -5
- package/src/effects/review/generic-review.ts +67 -42
- package/src/effects/review/oar-review-host.ts +11 -3
- package/src/effects/review/pre-prompt-inbox-consumer.ts +94 -0
- package/src/effects/review/pre-prompt-inbox.ts +112 -0
- package/src/effects/runtime/helper-runner.ts +16 -16
- package/src/effects/runtime/node-candidates.ts +2 -2
- package/src/effects/runtime/node-runtime.ts +66 -0
- package/src/effects/runtime/os-account-home.ts +44 -0
- package/src/effects/{hook-event-log.ts → segmented-log.ts} +21 -16
- package/src/effects/sessions/admitted-source.ts +110 -0
- package/src/effects/sessions/task-sessions.ts +73 -0
- package/src/effects/setup/collector.ts +33 -16
- package/src/{core/adoption → effects}/source-checkout.ts +1 -1
- package/src/effects/state/attempt-ledger-store.ts +2 -2
- package/src/effects/state/canonical-target.ts +36 -0
- package/src/effects/state/collect-provider-board-inputs.ts +43 -0
- package/src/effects/state/collect-slice-inputs.ts +20 -122
- package/src/effects/state/collect-state-inputs.ts +1 -1
- package/src/effects/state/coordination-canonical-source.ts +3 -7
- package/src/effects/state/coordination-provider-merge.ts +43 -0
- package/src/effects/state/coordination-worktree-topology.ts +16 -20
- package/src/effects/state/git-state-version-store.ts +17 -41
- package/src/effects/state/pruned-worktree-intents.ts +1 -1
- package/src/effects/state/resolve-continuation-envelope.ts +2 -2
- package/src/effects/state/resolve-effective-state.ts +32 -29
- package/src/effects/state/worktree-trash.ts +5 -7
- package/src/effects/strategy/context.ts +23 -11
- package/src/effects/strategy/skill.ts +5 -3
- package/src/effects/terminal/herdr-decision.ts +10 -4
- package/src/effects/terminal/herdr-observation.ts +1 -2
- package/src/effects/terminal/native-task-session.ts +53 -0
- package/src/effects/terminal/task-session-io.ts +29 -0
- package/src/effects/terminal/task-session-reader.ts +63 -0
- package/src/effects/terminal/task-session.ts +193 -160
- package/src/{core → effects}/upgrade/legacy-inventory.ts +6 -6
- package/src/operator-web/AdmittedTaskActivity.tsx +61 -0
- package/src/operator-web/AdmittedTaskContext.tsx +31 -0
- package/src/operator-web/App.tsx +3 -3
- package/src/operator-web/OrganizationSummary.tsx +48 -17
- package/src/operator-web/PlanningView.tsx +29 -34
- package/src/operator-web/RepositoryWorkspace.tsx +29 -24
- package/src/operator-web/TaskDiff.tsx +59 -12
- package/src/operator-web/TaskEvidence.tsx +8 -45
- package/src/operator-web/TaskHistory.tsx +3 -1
- package/src/operator-web/fixture.ts +60 -50
- package/src/operator-web/fixtures/index.ts +2 -2
- package/src/operator-web/i18n.ts +58 -56
- package/src/operator-web/task-activity.ts +1 -1
- package/src/operator-web/task-context.ts +8 -10
- package/src/operator-web/task-location.ts +21 -12
- package/src/operator-web/types.ts +54 -42
- package/src/operator-web/worklist.ts +5 -4
- package/dist/oar-coding-host.js +0 -708
- package/dist/operator-ui/assets/ArchitectureWorkspace-Cjh_Bxx3.js +0 -1
- package/dist/operator-ui/assets/index-CV9Tl9pN.js +0 -18
- package/scripts/run-bounded-verifier-command.ts +0 -245
- package/src/core/docs/docs-graph.ts +0 -287
- package/src/core/fleet/task-offer.ts +0 -223
- package/src/core/messages/document-handoff.ts +0 -281
- package/src/core/operator/task-context.ts +0 -117
- package/src/core/publication/publication-lifecycle.ts +0 -184
- package/src/core/state/lease-liveness.ts +0 -186
- package/src/core/state/project-board-slice.ts +0 -122
- package/src/core/state/project-board.ts +0 -365
- package/src/core/strategy/wake.ts +0 -62
- package/src/effects/engineers/binding-store.ts +0 -187
- package/src/effects/engineers/claim-actor-store.ts +0 -116
- package/src/effects/fleet/acquire.ts +0 -189
- package/src/effects/operator/docs-graph.ts +0 -158
- package/src/effects/publication/publication-lifecycle.ts +0 -72
- package/src/effects/publication/publication-receipt.ts +0 -96
- package/src/effects/state/collect-board-inputs.ts +0 -276
- package/src/effects/state/coordination-claim-token.ts +0 -129
- package/src/effects/state/coordination-cutover.ts +0 -308
- package/src/effects/state/coordination-lease-liveness-store.ts +0 -47
- package/src/effects/state/coordination-lease-store.ts +0 -162
- package/src/effects/state/resolve-board.ts +0 -64
- package/src/effects/state/state-cache.ts +0 -80
- package/src/effects/state/write-journal.ts +0 -101
- package/src/effects/strategy/wake.ts +0 -20
- package/src/effects/terminal/coding-isolation.ts +0 -102
- package/src/effects/terminal/coding-session.ts +0 -95
- package/src/effects/terminal/oar-coding-host.ts +0 -145
- /package/src/effects/{external-sources → github}/policy.ts +0 -0
- /package/src/effects/{state/readonly-observation.ts → readonly-observation.ts} +0 -0
- /package/src/{core → effects}/source-projection.ts +0 -0
package/AGENTS.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
- Keep four hard boundaries: main publication, deletion, credentials/permissions, and release/production operations.
|
|
11
11
|
- Only when the current task explicitly authorizes main publication may a model squash-merge after automated checks pass and GitHub has no outstanding change requests or unresolved review threads; an explicit no-merge instruction always wins. Push/tag still require task authorization; credentials/permissions, other deletion and release/production retain their separate approval boundaries. Record authorized publication, the provider-confirmed merge SHA and parent SHA, `git revert <squash-commit>`, and the daily report. Do not create rollback tags.
|
|
12
12
|
- Default worktrees are at `/tmp/<repo>-wt-<slug>` (Windows: `os.tmpdir()`). Commit or push before a reboot or a tmp cleanup.
|
|
13
|
-
- Closeout and sweep remove only merged, clean and unowned worktrees. To keep one, give it an unmerged commit, keep it dirty, or mark or
|
|
13
|
+
- Closeout and sweep remove only merged, clean and unowned worktrees. To keep one, give it an unmerged commit, keep it dirty, or mark or lock it. Details: [agentic-development-flow](docs/reference-configs/agentic-development-flow.md).
|
|
14
14
|
- Automatically delete only merged, clean worktrees/branches; ask the user for every other deletion. Credentials/permissions (including confirmation bypass) and release/production operations require user approval.
|
|
15
15
|
- Select independent review by the diff's [Review by risk](docs/reference-configs/agentic-development-flow.md#review-by-risk) tier: none for low, one fresh-context review for medium, gatekeeper plus cross-model review for high; ordinary steps record diagnostics without approval loops.
|
|
16
16
|
- When you delegate, investigate first, then split work by write ownership. Give each parallel writer its own worktree from a clean source. Implementation sub-agents edit only their scope. They do not run build, typecheck or tests. They commit early in their own worktree and return early. In a shared checkout they do not commit; the parent commits. Evidence roles run the named check that is their task and do not commit. The parent agent owns task management, conflict resolution, build, typecheck, tests and integration. After integration, the parent removes each sub-agent worktree and branch whose commits are in the task branch and whose checkout is clean. It also removes the intermediate build output and temporary files that the work created. Other deletion still needs the user.
|
|
@@ -53,6 +53,8 @@
|
|
|
53
53
|
- Isolate mutable HOME, repositories and process state; use real synchronization signals and preserve complete failure output.
|
|
54
54
|
- Report failed, timed-out, incomplete or omitted coverage explicitly; do not manufacture receipts, waiver files or pre-fix logs.
|
|
55
55
|
- Never modify or delete test assertions just to make tests pass; justify every necessary test change item by item in the PR description.
|
|
56
|
+
- Before you write or change tests, load the `repo-harness-test` skill (`assets/skills/repo-harness-test/SKILL.md`).
|
|
57
|
+
- When a local check and CI disagree, CI is the authority. Reproduce the failure with `bash scripts/check-ci.sh <lane>` before you change code; a global `repo-harness` or `repo-harness-hook` on `PATH` can hide a missing test setup.
|
|
56
58
|
|
|
57
59
|
## Handoff
|
|
58
60
|
- Create a checkpoint only when context/session rollover or unresolved work needs it; ordinary completion stays in the PR description.
|
package/CLAUDE.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
- Keep four hard boundaries: main publication, deletion, credentials/permissions, and release/production operations.
|
|
11
11
|
- Only when the current task explicitly authorizes main publication may a model squash-merge after automated checks pass and GitHub has no outstanding change requests or unresolved review threads; an explicit no-merge instruction always wins. Push/tag still require task authorization; credentials/permissions, other deletion and release/production retain their separate approval boundaries. Record authorized publication, the provider-confirmed merge SHA and parent SHA, `git revert <squash-commit>`, and the daily report. Do not create rollback tags.
|
|
12
12
|
- Default worktrees are at `/tmp/<repo>-wt-<slug>` (Windows: `os.tmpdir()`). Commit or push before a reboot or a tmp cleanup.
|
|
13
|
-
- Closeout and sweep remove only merged, clean and unowned worktrees. To keep one, give it an unmerged commit, keep it dirty, or mark or
|
|
13
|
+
- Closeout and sweep remove only merged, clean and unowned worktrees. To keep one, give it an unmerged commit, keep it dirty, or mark or lock it. Details: [agentic-development-flow](docs/reference-configs/agentic-development-flow.md).
|
|
14
14
|
- Automatically delete only merged, clean worktrees/branches; ask the user for every other deletion. Credentials/permissions (including confirmation bypass) and release/production operations require user approval.
|
|
15
15
|
- Select independent review by the diff's [Review by risk](docs/reference-configs/agentic-development-flow.md#review-by-risk) tier: none for low, one fresh-context review for medium, gatekeeper plus cross-model review for high; ordinary steps record diagnostics without approval loops.
|
|
16
16
|
- When you delegate, investigate first, then split work by write ownership. Give each parallel writer its own worktree from a clean source. Implementation sub-agents edit only their scope. They do not run build, typecheck or tests. They commit early in their own worktree and return early. In a shared checkout they do not commit; the parent commits. Evidence roles run the named check that is their task and do not commit. The parent agent owns task management, conflict resolution, build, typecheck, tests and integration. After integration, the parent removes each sub-agent worktree and branch whose commits are in the task branch and whose checkout is clean. It also removes the intermediate build output and temporary files that the work created. Other deletion still needs the user.
|
|
@@ -53,6 +53,8 @@
|
|
|
53
53
|
- Isolate mutable HOME, repositories and process state; use real synchronization signals and preserve complete failure output.
|
|
54
54
|
- Report failed, timed-out, incomplete or omitted coverage explicitly; do not manufacture receipts, waiver files or pre-fix logs.
|
|
55
55
|
- Never modify or delete test assertions just to make tests pass; justify every necessary test change item by item in the PR description.
|
|
56
|
+
- Before you write or change tests, load the `repo-harness-test` skill (`assets/skills/repo-harness-test/SKILL.md`).
|
|
57
|
+
- When a local check and CI disagree, CI is the authority. Reproduce the failure with `bash scripts/check-ci.sh <lane>` before you change code; a global `repo-harness` or `repo-harness-hook` on `PATH` can hide a missing test setup.
|
|
56
58
|
|
|
57
59
|
## Handoff
|
|
58
60
|
- Create a checkpoint only when context/session rollover or unresolved work needs it; ordinary completion stays in the PR description.
|
package/README.md
CHANGED
|
@@ -115,10 +115,12 @@ bun test
|
|
|
115
115
|
|
|
116
116
|
### Success looks like this
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
Init writes repo-local files and two files under `HOME`: the repo registry
|
|
119
|
+
entry and, when verification runs, the global Codex handoff packet under
|
|
120
|
+
`~/.codex/handoffs/`. It writes no install-managed host files. When the
|
|
121
|
+
required Herdr skill or the architecture projection preference is missing, init
|
|
122
|
+
reports a skipped step that names `repo-harness update`. repo-harness supplies tools and evidence; the Bot
|
|
123
|
+
decides what to schedule.
|
|
122
124
|
|
|
123
125
|
Apply ends with `=== Migration Report ===`, naming where generated hook behavior
|
|
124
126
|
comes from, the user-level `~/.claude/settings.json` and `~/.codex/hooks.json`
|
|
@@ -327,20 +329,39 @@ accepted suggestion goes through the normal plan and pull request workflow.
|
|
|
327
329
|
|
|
328
330
|
```bash
|
|
329
331
|
repo-harness external-source refresh # one bounded, explicitly enabled GitHub observation
|
|
330
|
-
repo-harness external-source bind
|
|
332
|
+
repo-harness external-source bind --repo <id> --source-revision <digest> --session <selector.json>
|
|
333
|
+
repo-harness external-source historical-bindings --repo <id> # retired V1 records only
|
|
331
334
|
repo-harness external-source bindings # binding edges and current drift attention
|
|
332
335
|
```
|
|
333
336
|
|
|
334
337
|
Intake is inert by design. An observed Issue mints no execution authority and
|
|
335
338
|
does not become a runnable task on its own; binding attaches an immutable source
|
|
336
|
-
revision to
|
|
339
|
+
revision to an existing admitted session selected by its provider issue, immutable
|
|
340
|
+
claim, approved grant and session binding digest. The selector comes from task
|
|
341
|
+
session discovery. Binding never creates a claim or approval.
|
|
337
342
|
|
|
338
343
|
### Persistent acceptance review
|
|
339
344
|
|
|
345
|
+
Before review, configure the repository's manual `external_sources` policy and
|
|
346
|
+
provide working provider access. The default policy is off; initialization does
|
|
347
|
+
not enable it. The trusted upstream Bot must authenticate the human, authorize
|
|
348
|
+
the scope, and supply the bound request. Its integration calls
|
|
349
|
+
`repo-harness review admit --repo <execution-checkout> --request <authorized-request.json>`.
|
|
350
|
+
The request contains `{admission, approval, expectedRevision}`. Admission requires
|
|
351
|
+
an explicit `execution_mode`: `contract` or `inline`. The mode is part of the
|
|
352
|
+
approved admission digest; changing it requires new approval. Do not create an
|
|
353
|
+
approval from these examples: actor IDs and authorization references are binding
|
|
354
|
+
data, not authentication. Select the resulting active grant and policy digests
|
|
355
|
+
below, and supply the current immutable issue claim. A contract or plan file
|
|
356
|
+
cannot grant permission. A user waiver requires a separate upstream-authorized
|
|
357
|
+
decision; waiver eligibility in an admission does not grant one.
|
|
358
|
+
|
|
359
|
+
See [the control Bot boundary](docs/control-bot-boundary.md) for the integration contract.
|
|
360
|
+
|
|
340
361
|
```bash
|
|
341
|
-
repo-harness review round --
|
|
342
|
-
repo-harness review status --
|
|
343
|
-
repo-harness review close --
|
|
362
|
+
repo-harness review round --repository-id <repository-id> --issue-id <issue-id> --campaign-id <campaign-id> --grant-sha256 <approved-grant-sha256> --policy-sha256 <policy-sha256> --actor <actor-id> --reviewer-repo <linked-checkout> --herdr-endpoint <address.json> --verification <native-report> --claim-ref <claim-reference> --claim-revision <claim-sha256>
|
|
363
|
+
repo-harness review status --repository-id <repository-id> --issue-id <issue-id> --campaign-id <campaign-id> --grant-sha256 <approved-grant-sha256> --policy-sha256 <policy-sha256> --actor <actor-id>
|
|
364
|
+
repo-harness review close --repository-id <repository-id> --issue-id <issue-id> --campaign-id <campaign-id> --grant-sha256 <approved-grant-sha256> --policy-sha256 <policy-sha256> --actor <actor-id>
|
|
344
365
|
```
|
|
345
366
|
|
|
346
367
|
In the Claude desktop app without Herdr, add `--launch app-terminal` and omit `--herdr-endpoint`. The first call prints the fixed host command. Claude runs it once in an app Terminal tab, then repeats the round. OAR, Seatbelt and the Receipt stay the same.
|
|
@@ -564,8 +585,8 @@ repo-harness commit scripts or hooks unless that repo adopts the same policy.
|
|
|
564
585
|
|
|
565
586
|
## Current Release
|
|
566
587
|
|
|
567
|
-
- npm package: `repo-harness@0.24.
|
|
568
|
-
- Generated workflow stamp: `repo-harness@0.24.
|
|
588
|
+
- npm package: `repo-harness@0.24.3`
|
|
589
|
+
- Generated workflow stamp: `repo-harness@0.24.3+template@0.24.3`
|
|
569
590
|
- GitHub repository: `Ancienttwo/repo-harness`
|
|
570
591
|
- Release notes and history: [`docs/CHANGELOG.md`](docs/CHANGELOG.md)
|
|
571
592
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Agentic development flow
|
|
2
2
|
|
|
3
3
|
- Default task worktrees use `/tmp/<repo>-wt-<slug>` on POSIX. Native Windows uses `os.tmpdir()` as the root. The stored default is `{{system_tmp}}/{{repo}}-wt-{{slug}}`. Runtime code resolves the temp token. Explicit stored templates stay unchanged. Commit or push work before a reboot or age-based tmp cleanup, such as `systemd-tmpfiles`. These cleaners can remove checkouts. Missing entries are pruned. The sweep saves missing registration identities before global prune. Later batches finish deferred branch cleanup. Unmerged branches remain.
|
|
4
|
-
- Closeout removes a merged, clean checkout and its branch. It releases only that checkout's own canonical marker after merge proof under the topology lock. The sweep keeps dirty, locked
|
|
4
|
+
- Closeout removes a merged, clean checkout and its branch. It releases only that checkout's own canonical marker after merge proof under the topology lock. The sweep keeps dirty, locked and marked worktrees. It keeps branch reflogs without a commit-creation message and missing or unreadable reflogs. Fast-forward, target-only automatic merges, reset and rebase-finish messages do not count. Dispatch must establish an unmerged commit or keep the worktree dirty, locked or marked. A merged, clean, unowned branch with its own commits can be swept.
|
|
5
5
|
- `start` recovers only a real target directory registered by this clone on the expected branch, under the topology lock, with no lock or other owner. Recovery requires a current-user-owned checkout directory without group or other write access, a regular owned Git pointer, its matching admin backpointer, and the original directory identity saved by start. Git metadata can be group-writable but must not be other-writable. Start still creates a checkout when uid is unavailable; recovery then refuses. Exact removal retires the identity after Git readback. Missing identity or a replacement directory blocks recovery. Files, symlinks, unregistered paths and other branches are refused. Cleanup refuses a registered worktree whose branch is missing. MCP cleanup also refuses active markers. Sweep reports name processed paths. Deferred entries are reported as counts. `kept` excludes deferred entries. A command timeout sends SIGTERM to the direct child only. A grandchild can briefly extend the deadline. No detached cleanup process starts. Herdr notifications accept registered default task worktrees and paths inside them. Other temporary paths and `rh-herdr-` labels stay filtered.
|
|
6
6
|
|
|
7
7
|
## Daily Flow
|
|
@@ -9,10 +9,24 @@
|
|
|
9
9
|
2. Open a branch; isolate a worktree when concurrent edits overlap. Preserve unrelated work.
|
|
10
10
|
3. Make small, bounded commits. Ordinary tasks live in the PR description: goal, changes, verification, risk and rollback.
|
|
11
11
|
4. Freeze the candidate and verify once: typecheck plus affected tests. Reviewers and closeout consume the same evidence.
|
|
12
|
-
5. A model may squash-merge into main only when the current task explicitly authorizes main publication,
|
|
12
|
+
5. A model may squash-merge into main only when the current task explicitly authorizes main publication, the branch contains the current main tip, the required checks pass on that exact head, and GitHub has no outstanding change requests or unresolved review threads. An explicit no-merge instruction always wins. The next merge does not wait for the main push CI of the previous merge. Main push CI is an alarm: when it fails, the next merge is the revert or the fix. Record the GitHub merge SHA and parent SHA. Record `git revert --no-edit <squash-commit>`. Do not create rollback tags.
|
|
13
13
|
6. Run the full suite daily, automatically open a repair task on failure, and produce the daily merge/check/rollback report. Run the [Lessons Retro](#lessons-retro) in the same nightly window.
|
|
14
14
|
7. Use the [Report SOP](#report-sop) for formal progress, phase and final reports to the user, including the daily user summary. Raw automated CI reports are evidence inputs; they do not replace that summary and do not require this format.
|
|
15
15
|
|
|
16
|
+
## CI cost
|
|
17
|
+
Size PR CI by the diff, the same as step 4. A full suite on each small PR spends runner time and adds no evidence that the affected tests and the daily run do not already give. The repo-harness source repository uses this shape in `.github/workflows/ci.yml`.
|
|
18
|
+
|
|
19
|
+
- Triggers: run PR checks on `pull_request`. Do not also trigger `push` on feature branches; that runs each commit twice. A `push` to the default branch runs the affected selection for the merged diff, not the full suite.
|
|
20
|
+
- Superseded runs: set `concurrency` to one group per PR number with `cancel-in-progress: true` for `pull_request` events only. Do not cancel scheduled runs.
|
|
21
|
+
- Selection: a first job reads the diff against the PR base and outputs a mode. Later jobs read the mode in a job-level `if:`.
|
|
22
|
+
- A docs-only diff (`docs/**/*.md`, README, CHANGELOG, `tasks/`, `plans/`) skips build and test jobs when no test or script reads the changed files. Keep link and format checks. A document that is program input, such as a projected copy, a parsed contract or a generated region, runs its consumer tests.
|
|
23
|
+
- A code diff runs typecheck plus the tests that the diff affects. Use the runner's change detection (`vitest --changed`, `jest --changedSince`, `nx affected`, `turbo run --filter=...[<base>]`, `pytest --testmon`) or an import-graph selector.
|
|
24
|
+
- A change to a shared input (lockfile, root build or test config, CI workflow, a test helper with no mapped consumer) runs the full suite on that PR. A selector that cannot map a changed file widens the run; it never shrinks it.
|
|
25
|
+
- Required checks: skip a job with a job-level `if:`, not with workflow-level `paths` or `paths-ignore`. GitHub counts a skipped job as passing for a required check. A workflow that never starts leaves its required check pending and blocks the merge.
|
|
26
|
+
- Full suite: run it on `schedule` (daily) and `workflow_dispatch` against one default-branch SHA, and on the release SHA before a release. A daily failure opens a repair task (step 6).
|
|
27
|
+
- Matrix: each axis must change the runtime that the tests run on. When the test runner is pinned, for example one Bun version, a Node-version axis reaches only the scripts and tests that spawn Node. Run only that subset on the axis; a full suite on 3 OS × 3 Node versions repeats each OS run three times. On a PR, run a matrix cell only when the diff touches code that depends on its axis. The daily run covers each cell with its dependent subset. Set `fail-fast: false` so one cell failure does not hide the others.
|
|
28
|
+
- Limits: set `timeout-minutes` on each job; the GitHub default of 360 minutes lets a hung job spend all of it. Cache dependencies keyed on the lockfile.
|
|
29
|
+
|
|
16
30
|
## Report SOP
|
|
17
31
|
- Give a Feynman report: explain the work to a reader who does not know this project. Use plain language. Explain the goal, user value, how it works, completed work and remaining gaps. Explain each technical term at first use.
|
|
18
32
|
- State the conclusion, changes, reasons, verification and remaining risks. Link each claim to its source or label it as an inference. Use observed results. Name failed, incomplete and omitted checks.
|
|
@@ -109,6 +123,9 @@ Rules for every tier:
|
|
|
109
123
|
- From the second round, the reviewer reads only the hunks that changed after the previous round. The three-round limit stays.
|
|
110
124
|
- When an independent review ran, the PR description lists each finding with its disposition: fixed, or closed with the reason.
|
|
111
125
|
- A low tier adds no review. A new test file or a rebase does not raise the tier.
|
|
126
|
+
- A parent or coordinator reuses a worker's recorded independent review of the same diff when that review meets the diff's tier. Only a changed diff, or a missing tier review, needs a new review.
|
|
127
|
+
- A downstream repository maps its own release surfaces, for example public API, wire format, DDL/SQL and permissions, to the High tier.
|
|
128
|
+
|
|
112
129
|
A worker gets Goal, Scope, Context, Acceptance, Verify, Rollback, Timebox, Forbidden, Report and Standing as defined in [the delegation brief](sprint-contracts.md#delegation-brief), then loads concrete techniques on demand. Do not put routing catalogs or every technology guide in its brief.
|
|
113
130
|
|
|
114
131
|
A coding session that spawns sub-agents is their parent. Investigate first, then split work by write ownership. Give each parallel writer its own worktree from a clean source. Implementation sub-agents edit only their scope. They do not run build, typecheck or tests. They commit early in their own worktree and return early. In a shared checkout they do not commit; the parent commits. An evidence role whose task is a named check, such as a root-cause reproduction or an evaluation profile, still runs that check and does not commit. The brief's Verify section names the checks that the parent runs after integration. The parent owns task management, conflict resolution, build, typecheck, tests and integration. After integration, the parent removes each sub-agent worktree and branch whose commits are in the task branch and whose checkout is clean. It also removes the intermediate build output and temporary files that the work created. Other deletion still needs the user.
|
|
@@ -121,3 +138,5 @@ Stop and ask the user when a command or result names `unknown`, `ambiguous`, `pe
|
|
|
121
138
|
Architecture docs remain references. Update them only when responsibilities or boundaries change; no per-edit drift queue, workstream sync or automatic agent-context block. Ordinary work has no plan/contract/review/notes or promote/archive prerequisite. Notes are optional for non-obvious decisions; PRDs are for real new products.
|
|
122
139
|
|
|
123
140
|
Park a gate; do not block on it. A gate is a decision that only the human can make. It is one of four kinds: an irreversible action, a product or preference call that no experiment settles, a standing rule that contradicts observed reality, or a dead end that survived a replan. Frontier nudges, retries, CI flake triage, review-thread triage, format fixes and "should I keep going" never reach the human. The GitHub issue and PR are the task authority. When the task has an issue, post a parked gate in the issue status comment (the `repo-harness issue status` format) under a `Gates:` list. When the task has a PR but no issue, park it under a `Gates:` list in the PR description. When the task has neither, park it in the catch-up reply of the current conversation. Give each gate an id, the question, the options, the recommended option, and what happens if no answer arrives by a stated time. Route the remaining work around the gate. The [catch-up reply](#report-sop) lists open gates first. A reply to a gate is a human comment on the same issue. The Bot reads that comment back before it acts on it.
|
|
141
|
+
|
|
142
|
+
For a multi-PR coordination run, the issue and its PRs are the coordination state. An active plan's `## Task Breakdown` still lists the execution steps. A run log, when kept, is an append-only list of events. Derive an owner summary from the run log, or write the summary once at closeout. Approval text goes in the PR description, not in a separate file.
|
|
@@ -59,13 +59,13 @@ For an explicitly reviewed one-shot batch, select exact Issue numbers instead of
|
|
|
59
59
|
|
|
60
60
|
Exact-batch refresh resolves only those Issue endpoints and fails the whole attempt if any selected Issue is missing, malformed, a pull request, or exceeds a limit. GitHub assignees, labels, and open/closed state are evidence only: they do not prove whether local work has already been dispatched. Dispatch deduplication belongs to an authenticated binding against canonical repo-harness task identity. The triage, reproduce and fix stage contract for observed issues is in [issue pipeline](issue-pipeline.md).
|
|
61
61
|
|
|
62
|
-
`repo-harness external-source refresh --repo <registered-repo-id>` invokes the locally authenticated `gh` client once and records immutable observations plus an attempt receipt under the repository Git common directory. `list` performs no provider call. These records are inert evidence: they do not create or change
|
|
62
|
+
`repo-harness external-source refresh --repo <registered-repo-id>` invokes the locally authenticated `gh` client once and records immutable observations plus an attempt receipt under the repository Git common directory. `list` performs no provider call. These records are inert evidence: they do not create or change review admission, priority, provider claims, collaboration, or Agent Runtime state.
|
|
63
63
|
|
|
64
64
|
## External Source Binding WP2
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
Binding needs an existing admitted session for the same provider issue. Save one session `selector` object from `repo-harness state board --repository-id <id> --json` as a JSON file. Then run `repo-harness external-source bind --repo <id> --source-revision <digest> --session <file>`. The command requires a strict `read_write` registry grant. The observation's provider repository and issue must match the session admission. The command persists one immutable provenance edge with the exact observation, authorization revision, session selector and admission digest.
|
|
67
67
|
|
|
68
|
-
`external-source bindings` reports source
|
|
68
|
+
`external-source bindings` reports source, session and authorization drift without mutating work. `external-source historical-bindings` reads retired V1 binding receipts as history only. `external-source context` is the sole provider-content renderer and wraps canonical JSON in `[ExternalSourceUntrusted]`. A binding does not create work or admission. Human acceptance stays at PR merge; only a true `installation_blocker` may pause earlier.
|
|
69
69
|
|
|
70
70
|
Generated repos route external tooling by host/runtime shape. Task-level
|
|
71
71
|
skill routing lives in `docs/reference-configs/agentic-development-flow.md`.
|
|
@@ -369,6 +369,7 @@ installed copy with `herdr --skill` and fails when a copy is absent or differs.
|
|
|
369
369
|
The skill only controls Herdr from a real Herdr pane with `HERDR_ENV=1`.
|
|
370
370
|
The persistent reviewer still requires POSIX process groups: use macOS/Linux or
|
|
371
371
|
WSL. Native Windows review lifecycle support is not implied by Herdr support.
|
|
372
|
+
Admitted task sessions start only in a Herdr pane, so they and their Task Inbox and operator diff consumers are POSIX-only; on Windows, session start fails closed with `herdr_endpoint_platform_unsupported`.
|
|
372
373
|
Drain old tmux reviewers with the previous repo-harness version before upgrading.
|
|
373
374
|
Rebind endpoints explicitly as `herdr-cli-agent`; old adapter policy, capabilities
|
|
374
375
|
and live session metadata are not translated. The self-host runtime remains off.
|
|
@@ -856,11 +857,14 @@ to native-role-routing `invalid` and receives no implementation boundary.
|
|
|
856
857
|
`install_mode`:
|
|
857
858
|
|
|
858
859
|
- This repo's own `.ai/harness/policy.json` sets
|
|
859
|
-
`"install_mode": "auto-install-on-init"` —
|
|
860
|
-
|
|
861
|
-
- Generated downstream repos default to `"install_mode": "advisory"` —
|
|
862
|
-
|
|
860
|
+
`"install_mode": "auto-install-on-init"` — the scaffold helper
|
|
861
|
+
`scripts/init-project.sh` installs the fleet automatically on apply.
|
|
862
|
+
- Generated downstream repos default to `"install_mode": "advisory"` — the
|
|
863
|
+
scaffold helper only prints a one-line reminder naming
|
|
863
864
|
`repo-harness run install-agent-fleet`; nothing is written automatically.
|
|
865
|
+
- `repo-harness init` never installs the fleet. The full-profile
|
|
866
|
+
`repo-harness install` and `repo-harness update` install it inside the host
|
|
867
|
+
transaction.
|
|
864
868
|
|
|
865
869
|
`migrate --dry-run` never installs the fleet regardless of `install_mode`;
|
|
866
870
|
dry-run makes no writes to the global agent-fleet directories at all.
|
|
@@ -884,8 +888,8 @@ The CLI entry rejects older or unparseable Bun runtimes before command dispatch.
|
|
|
884
888
|
The top-level Unix and Windows bootstrap installers upgrade an older detected
|
|
885
889
|
Bun before installing repo-harness, rather than relying on package-engine
|
|
886
890
|
metadata that older Bun releases do not enforce.
|
|
887
|
-
The shared global runtime setup used by mutating `repo-harness install
|
|
888
|
-
|
|
891
|
+
The shared global runtime setup used by mutating `repo-harness install` and
|
|
892
|
+
`update` binds every Bun subprocess to the exact executable it probes. It
|
|
889
893
|
runs and verifies `bun upgrade` only for Bun self-installer-owned binaries;
|
|
890
894
|
older Homebrew, Scoop, npm, or other package-manager-owned binaries fail closed
|
|
891
895
|
with an actionable manager upgrade command. This covers direct
|
|
@@ -1343,8 +1347,8 @@ instead. The command never creates an index, a model, a plan or a code edit.
|
|
|
1343
1347
|
Read evidence and record a decision with:
|
|
1344
1348
|
|
|
1345
1349
|
```bash
|
|
1346
|
-
repo-harness refactor recommendations [--json] [--import-node-limit <n>]
|
|
1347
|
-
repo-harness refactor decide <recommendation-id> accept|defer|reject --reason "<text>" [--import-node-limit <n>]
|
|
1350
|
+
repo-harness refactor recommendations [--json] [--import-node-limit <n>] [--timeout-ms <ms>]
|
|
1351
|
+
repo-harness refactor decide <recommendation-id> accept|defer|reject --reason "<text>" [--import-node-limit <n>] [--timeout-ms <ms>]
|
|
1348
1352
|
```
|
|
1349
1353
|
|
|
1350
1354
|
`recommendations` shows each open suggestion with its explanation, the metrics
|
|
@@ -36,6 +36,8 @@ Before non-trivial design or edits, complete P1/P2/P3:
|
|
|
36
36
|
- Keep one source of truth for each datum. Other representations must be deterministic projections with drift checks; an authority cutover removes the old authoring path in the same approved work-package.
|
|
37
37
|
- Add an abstraction only when it removes observed duplicate authority or complexity, serves at least two real consumers, or protects a cross-module invariant.
|
|
38
38
|
- Create shared components only for observed reuse or invariants. When independently meaningful consumers need a shared package, prefer an existing monorepo workspace; do not convert a single-package repository into a monorepo without a second independently released or deployed consumer.
|
|
39
|
+
- Validate an unknown value once, at the boundary that owns it, and pass the typed value inward. Do not check again a value that a schema, constructor or internal type already guarantees.
|
|
40
|
+
- Before you add complexity for a speculative or very unlikely race, security or failure case, tell the user the concrete failure mode, its likelihood and the complexity cost, and get their approval. Do not expand scope silently for theoretical robustness.
|
|
39
41
|
|
|
40
42
|
## No Compatibility Fallbacks in Product Code
|
|
41
43
|
|
|
@@ -4,7 +4,7 @@ This repo uses a shared long-running harness. The durable workflow lives in repo
|
|
|
4
4
|
|
|
5
5
|
## Adoption Model
|
|
6
6
|
|
|
7
|
-
Use this file as the first onboarding map after `repo-harness init`
|
|
7
|
+
Use this file as the first onboarding map after `repo-harness init` adopts
|
|
8
8
|
or refreshes a repo. The harness gives agents three durable surfaces:
|
|
9
9
|
|
|
10
10
|
- **Shared standards**: `docs/spec.md`, `docs/reference-configs/`, root
|
|
@@ -97,11 +97,11 @@ The roles and the state flow below apply to contract-level work only.
|
|
|
97
97
|
- Evidence: Native execution evaluation supplies current check facts, while `.ai/harness/runs/*.json` keeps ignored local verification snapshots for the current workflow audit. Task-specific `.ai/harness/checks/*.latest.{json,md}` reports are ignored runtime cache; promote durable conclusions into reviews, contracts, notes, or research.
|
|
98
98
|
- Human reading surface: `docs/spec.md`, `docs/architecture/`, and durable `docs/researches/` conclusions are the default entrypoint. Root workflow artifacts should describe active work only; completed plan/contract/review/notes/todo artifacts move to `plans/archive/` or `tasks/archive/`, and `.rgignore` keeps those archives plus runtime evidence out of default `rg` results.
|
|
99
99
|
- Closeout order: promote durable truth first, then archive the workflow artifacts. If a fact only lives in a review/contract/checks file, the workflow is not ready to disappear from the active reading surface.
|
|
100
|
-
- Local retention: `repo-harness retention` moves closed artifacts to a gitignored local archive root after 30 days. It scans
|
|
100
|
+
- Local retention: `repo-harness retention` moves closed artifacts to a gitignored local archive root after 30 days. It scans five classes: closed plans in `plans/archive/`, closed task records in `tasks/archive/`, check logs (`.ai/harness/checks/*.log`), run records that no code reads back (`.ai/harness/runs/verification-vx-*.log`, `*-heartbeat-triage.json`, and finished `contract-run-*` directories with a `manifest.json`), and fs-transaction backups (`.ai/harness/backups/fs-transaction/`). An archived backup no longer serves a rollback by manifest; restore it by hand. The command is a dry run by default. Add `--apply` to move the entries. It skips open work, entries in the `keep` list, entries newer than the window, and entries whose destination exists. An archived entry is deleted once its newest write is older than `archive_days` (default: `days` plus 60). Retention deletes nothing outside the archive root. `--json` also lists every harness storage root and its rule: archive, delete, writer rotation, or keep. The MCP logs under `.ai/harness/mcp/` rotate like hook telemetry. `install` keeps only the release tarball it installed in `~/.repo-harness/packages/`. `upgrade` keeps the newest 100 records in `~/.repo-harness/upgrade-cleanup.log.jsonl`. Other run records stay in place: verification records and reports are bound by hash or named by receipts, session directories keep a `closed.json` tombstone, ledgers and hook telemetry are live, and `evidence-gc` owns run summaries. Configure it in `.ai/harness/policy.json`:
|
|
101
101
|
|
|
102
102
|
```json
|
|
103
103
|
"information_lifecycle": {
|
|
104
|
-
"retention": { "days": 30, "archive_root": ".ai/harness/archive/retention", "keep": [] }
|
|
104
|
+
"retention": { "days": 30, "archive_days": 90, "archive_root": ".ai/harness/archive/retention", "keep": [] }
|
|
105
105
|
}
|
|
106
106
|
```
|
|
107
107
|
|
|
@@ -126,7 +126,7 @@ The roles and the state flow below apply to contract-level work only.
|
|
|
126
126
|
|
|
127
127
|
## Trace Evidence
|
|
128
128
|
|
|
129
|
-
`repo-harness run verify-sprint` runs local checks. It writes no verification report.
|
|
129
|
+
`repo-harness run verify-sprint` runs local checks. It writes no verification report. The trusted control Bot first supplies an approved admission through `repo-harness review admit --request <request.json> --repo .`. The Bot withdraws it through `repo-harness review revoke --request <revocation.json> --repo .`. The revocation request names the campaign (`repository_id`, `issue_id`, `campaign_id`), `expectedGrantSha256` and `expectedRevision`. The command revokes only that exact active grant. The admission must include the approved positive safe-integer `issue_number`, distinct from the provider global `issue_id`. Its digest binds this lookup locator; changing it requires new approval and does not change the campaign key. The admission must explicitly select `execution_mode: "contract"` or `execution_mode: "inline"`; no mode is inferred from a task or plan file. Changing mode requires new upstream approval. Verification and assessment consume that admission, not a contract path. Pass `--repository-id`, `--issue-id`, `--campaign-id`, `--grant-sha256`, `--policy-sha256` and `--actor` from the active admission to `repo-harness run verification-plan execute --repo . --report-file .ai/harness/runs/<run-id>.report.json` and `repo-harness run change-assessment prepare`. The latter writes the independent assessment. These selectors bind an existing approval; they do not grant permission. If a packet has a reviewer-disagreement overlay, pass its path with `--packet` when you prepare it again. Acceptance uses that explicit native report and its immutable backing events and runs. Missing or empty plans cannot pass.
|
|
130
130
|
|
|
131
131
|
Required v1 fields:
|
|
132
132
|
|
|
@@ -247,19 +247,19 @@ rather than inferring those values from turns, tool names, or timestamps.
|
|
|
247
247
|
Maintainer-facing detail on how the initializer and runtime defaults are wired.
|
|
248
248
|
|
|
249
249
|
- Plan menu is tiered: **Core Plans (A-F)** first, **Custom Presets (G-K)** only when needed.
|
|
250
|
-
- Skill routing is inspection-first: `scripts/inspect-project-state.ts`, `src/
|
|
250
|
+
- Skill routing is inspection-first: `scripts/inspect-project-state.ts`, `src/effects/adoption/standard-plan.ts`, `assets/workflow-contract.v1.json`.
|
|
251
251
|
- Generated repos support an optional contract-level flow: `docs/spec.md -> plans/ -> tasks/contracts/ -> tasks/reviews/ -> .ai/context/context-map.json -> .ai/harness/*`. Ordinary tasks use the PR description and need no plan, contract or review file.
|
|
252
252
|
- Generated and self-hosted repos use `.ai/harness/workflow-contract.json` as the opt-in marker.
|
|
253
|
-
- The marker can declare `minimum_harness_version`, a release version such as `0.22.1`. A hook that runs an older repo-harness then reports an upgrade instruction (`repo-harness update`) on SessionStart, UserPromptSubmit
|
|
253
|
+
- The marker can declare `minimum_harness_version`, a release version such as `0.22.1`. A hook that runs an older repo-harness then reports an upgrade instruction (`repo-harness update`) on SessionStart, UserPromptSubmit and Stop. It exits 1, which does not block, and does not resolve state for these events. PreToolUse skips this check, so every edit guard still runs. `repo-harness doctor` and `repo-harness update --check` report the same instruction. Declare it when a release changes the model shape that older readers cannot parse. Adoption keeps the declared value.
|
|
254
254
|
- The package asset `assets/workflow-contract.v1.json` defines the workflow contract.
|
|
255
|
-
- `repo-harness init` writes the marker, `.ai/harness/policy.json` and the root `CLAUDE.md` and `AGENTS.md`. `src/
|
|
255
|
+
- `repo-harness init` writes the marker, `.ai/harness/policy.json` and the root `CLAUDE.md` and `AGENTS.md`. `src/effects/adoption/standard-plan.ts` is the only writer of the root context files. Shell scaffold scripts do not write the marker or the root context files.
|
|
256
256
|
- Host events use the user-level managed adapter projection, the 11-tuple
|
|
257
257
|
`route-registry.ts`, and exactly one typed in-process handler per tuple.
|
|
258
258
|
Operator helpers run from the installed package through
|
|
259
259
|
`repo-harness run <helper>`. Init preserves legacy repo copies of the retired
|
|
260
260
|
shell library. Doctor reports them with migration steps.
|
|
261
261
|
- Generated and migrated repos keep discovery and complex/design planning in the parent agent: `geju` opens the pre-contract frame, then the parent completes P1/P2/P3 and freezes the accepted direction. Daily small/medium work uses Waza with Codex-first runtime copies in `~/.codex/skills`; durable knowledge stays in repo-authored research and lessons.
|
|
262
|
-
- `repo-harness install` bootstraps the package-owned Codex/Claude runtime pieces for the default workflow: refreshes `repo-harness` skill aliases, installs global Codex/Claude hook adapters, persists the brain root in `~/.repo-harness/config.json`, and configures CodeGraph MCP for selected host agents. Mutable Waza and Mermaid providers are installed only after explicit selection. `repo-harness init`
|
|
262
|
+
- `repo-harness install` bootstraps the package-owned Codex/Claude runtime pieces for the default workflow: refreshes `repo-harness` skill aliases, installs global Codex/Claude hook adapters, persists the brain root in `~/.repo-harness/config.json`, and configures CodeGraph MCP for selected host agents. Mutable Waza and Mermaid providers are installed only after explicit selection. `repo-harness init` adopts the repo-local workflow only and installs none of these host runtime pieces.
|
|
263
263
|
- The recommended `reverse-skill-router` remains explicit-only through `--with-reverse-skill` because its upstream authorization assumption cannot replace independently verified scope; the pinned selected tree is integrity-checked before host projection.
|
|
264
264
|
- Read-only external-tooling audit stays advisory: `repo-harness run check-agent-tooling --host both --check-updates`. The explicit mutating boundary is `repo-harness update`, which reconciles mandatory ArchContext packages and runtime and updates the global CodeGraph CLI/MCP; mutable Waza/Mermaid providers require `--with-external-skills`. It does not initialize or sync a repository CodeGraph index.
|
|
265
265
|
- Manual distillation stays repo-local: repeated corrections -> `tasks/lessons.md`; deep findings and hidden contracts -> topic-scoped `docs/researches/*.md`; sprint verification evidence -> `tasks/reviews/*.review.md`; durable capability progress -> `tasks/workstreams/`; release history -> `docs/CHANGELOG.md`.
|
|
@@ -282,7 +282,7 @@ Maintainer-facing map of which package file owns which contract:
|
|
|
282
282
|
| `assets/workflow-contract.v1.json` | Workflow contract manifest |
|
|
283
283
|
| `docs/reference-configs/*.md` | Source-repo projection of the runtime reference docs |
|
|
284
284
|
| `scripts/inspect-project-state.ts` | State inspector |
|
|
285
|
-
| `src/
|
|
285
|
+
| `src/effects/adoption/standard-plan.ts` | Canonical adoption planner |
|
|
286
286
|
| `scripts/check-agent-tooling.sh` | External tooling detector |
|
|
287
287
|
| `scripts/init-project.sh`, `scripts/create-project-dirs.sh` | Scaffolding steps |
|
|
288
288
|
|
|
@@ -102,7 +102,9 @@ manual removal. Review local changes first.
|
|
|
102
102
|
No hook answers `/delegate` or `/parallel`. `.ai/harness/delegation/` holds
|
|
103
103
|
only the native-role evidence.
|
|
104
104
|
|
|
105
|
-
`SessionStart` resolves Effective State once.
|
|
105
|
+
`SessionStart` resolves Effective State once, read-only. It writes no state,
|
|
106
|
+
and its `state_version` is the last version that `repo-harness state resolve`
|
|
107
|
+
published. The `[HarnessState]` section, or
|
|
106
108
|
`[HarnessStateUnavailable]` when the resolution fails, comes first and always.
|
|
107
109
|
The `architecture-debt` section follows at priority 2 and is mandatory when
|
|
108
110
|
present. Its 800-byte limit keeps it bounded. `pending-plan-capture` remains
|
|
@@ -128,8 +130,9 @@ spawn an LLM or a long-running worker.
|
|
|
128
130
|
|
|
129
131
|
## Host and Adoption Operations
|
|
130
132
|
|
|
131
|
-
`repo-harness init`
|
|
132
|
-
|
|
133
|
+
`repo-harness init` writes the workflow contract and package helper guidance
|
|
134
|
+
in `.ai/hooks/README.md`. It does not install user-level adapters;
|
|
135
|
+
`repo-harness install` and `repo-harness update` own them.
|
|
133
136
|
It does not copy the operator library into consumer repositories.
|
|
134
137
|
It removes retired generated hook entry scripts by exact manifest ownership and
|
|
135
138
|
does not create a repo-local dispatcher. Project-level `.claude/settings.json`
|
|
@@ -390,7 +393,7 @@ history:
|
|
|
390
393
|
| `${runId}.json` carrying the resolved projection paths | none now; Stop and the shell `prepare-handoff` writer wrote it | `evidence-gc` deletes this shape for one release |
|
|
391
394
|
| `${runId}-${contractSlug}.json` (`schema: repo-harness-run-trace.v1`) | `verify-sprint.sh` | none; a checks projection reads it back at acceptance finalization |
|
|
392
395
|
| `verification-${executionId}.json` / `.log` | `verification-execution.ts` | none; immutable, bound by sha256 in the evidence ledger |
|
|
393
|
-
| `hook-events.jsonl` | hook telemetry | `
|
|
396
|
+
| `hook-events.jsonl` | hook telemetry | `segmented-log.ts`, on rotation: 8 MB segments, 256 MB or 32 archived segments |
|
|
394
397
|
| ad-hoc `*.json` reports | operator scripts | none; each report owns its own file |
|
|
395
398
|
|
|
396
399
|
Evidence checkpoints under `.ai/harness/evidence/checkpoints/` are owned by
|
|
@@ -27,16 +27,17 @@ closed. Run `repo-harness run evidence-gc --repo <path>` once to remove it.
|
|
|
27
27
|
|
|
28
28
|
## What Remains
|
|
29
29
|
|
|
30
|
-
The smallest coherent change is a review rule, not a hook. The
|
|
31
|
-
|
|
32
|
-
large. Change Assessment is the deterministic boundary.
|
|
30
|
+
The smallest coherent change is a review rule, not a hook. The approved admission scope,
|
|
31
|
+
verification plan, tests and review decide whether a change grew too large. Change Assessment is the deterministic boundary.
|
|
33
32
|
|
|
34
33
|
## Change Assessment Boundary
|
|
35
34
|
|
|
36
35
|
Hook output and `.ai/harness/events.jsonl` remain advisory and fail-open: a
|
|
37
36
|
hook crash must not create or remove merge authority. Before semantic review or acceptance, run
|
|
38
|
-
`repo-harness run change-assessment prepare
|
|
39
|
-
|
|
37
|
+
`repo-harness run change-assessment prepare` from the execution
|
|
38
|
+
repository with the active admission selectors: `--repository-id`, `--issue-id`,
|
|
39
|
+
`--campaign-id`, `--grant-sha256`, `--policy-sha256` and `--actor`. The trusted
|
|
40
|
+
control Bot supplies the approval; selector values alone do not grant permission. Change Assessment v1 then recomputes the normalized final subject from the sole policy-owned base
|
|
40
41
|
`.ai/harness/policy.json#worktree_strategy.review_base`. Missing/malformed
|
|
41
42
|
policy, an unobservable final subject, an invalid packet, or an unmet declared
|
|
42
43
|
oracle fails the assessment boundary closed. `verification-plan execute`
|
|
@@ -47,8 +48,8 @@ reason vocabulary `authority_change`, `irreversible_effect`,
|
|
|
47
48
|
`pattern_novelty`, `reviewer_disagreement`, and `oracle_gap`. A later reviewer
|
|
48
49
|
may append `reviewer_disagreement` for paths already bound to the packet, but
|
|
49
50
|
cannot remove a reason, lower a selection, or change the packet subject/target.
|
|
50
|
-
Prepare it again with
|
|
51
|
-
--packet .ai/harness/checks/change-assessment.latest.json` to preserve the
|
|
51
|
+
Prepare it again with the same admission selectors and
|
|
52
|
+
`change-assessment prepare --packet .ai/harness/checks/change-assessment.latest.json` to preserve the
|
|
52
53
|
overlay. The acceptance owner recomputes the base assessment and validates the
|
|
53
54
|
packet against the current subject and target. A missing or stale packet fails
|
|
54
55
|
closed. Native execution facts remain separate.
|
|
@@ -161,7 +161,7 @@ unsupported and fails closed. Git file modes use normalized booleans and the
|
|
|
161
161
|
owner execute bit. Both command output streams count in the shared budget on
|
|
162
162
|
success and failure.
|
|
163
163
|
|
|
164
|
-
## Repository pilot
|
|
164
|
+
## Repository pilot
|
|
165
165
|
|
|
166
166
|
`repo-harness strategy pilot --repo <root>` explicitly reads
|
|
167
167
|
`docs/strategy/repository-pilot.json` with canonical state observation. The
|
|
@@ -169,31 +169,15 @@ repository pilot owner is Aimpact. README and the approved first-scope plan are
|
|
|
169
169
|
pinned evidence. The command does not create docs/strategy/context.json or
|
|
170
170
|
change ordinary activation. Its explicit repository-pilot profile permits
|
|
171
171
|
128 KiB per file, 4 MiB per request and a 5 second observation deadline.
|
|
172
|
-
Ordinary context
|
|
172
|
+
Ordinary context reads keep their 64 KiB/1 MiB defaults. Larger limits
|
|
173
173
|
are rejected, and this profile requires the fixed pilot document path.
|
|
174
174
|
`strategy pilot <proposal>` validates against a fresh canonical pilot context.
|
|
175
175
|
Use `--load strategy-boundaries` to select the pilot's memory body. A source-budget violation fails closed. Within each canonical read-only pass,
|
|
176
176
|
policy and capability text is shared with its hash projection. Each subsequent
|
|
177
177
|
pass reopens those sources. All four passes and final comparisons remain. There is no business-success verdict.
|
|
178
178
|
|
|
179
|
-
The one-shot export adapter in src/effects/strategy/wake.ts has no CLI scheduler
|
|
180
|
-
or live host integration. Its pure contract consumes at most 32 events in a
|
|
181
|
-
16 KiB JSON request. The host assigns an epoch and monotonic sequence. Exact
|
|
182
|
-
repeats deduplicate, old sequences are ignored, conflicts fail and the newest
|
|
183
|
-
sequence wins independent of batch order. It retains at most 64 event identities
|
|
184
|
-
in caller memory. Restart requires a new epoch. Old-epoch events fail. A replay
|
|
185
|
-
in a fresh epoch can produce another export; no durable exactly-once guarantee
|
|
186
|
-
is claimed. The host owns coalescing intervals, waking and any persistence.
|
|
187
|
-
|
|
188
|
-
The adapter compares the selected wake digest with fresh context and validates
|
|
189
|
-
proposals against that context. It can only return packets. Host capability
|
|
190
|
-
claims remain unverified, including readOnly=true or resume=true. They unlock
|
|
191
|
-
no provider, resume, controller call, task claim or intent mutation. Real
|
|
192
|
-
integration needs a chosen host, verified capability and separate approval.
|
|
193
|
-
|
|
194
179
|
Source IO defaults to a 1 MiB request limit, 64 KiB per payload and a 128 KiB
|
|
195
|
-
packet bound.
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
daemon, scheduler or automatic memory edit is added.
|
|
180
|
+
packet bound. Smaller byte/time limits are allowed. Synchronous filesystem IO
|
|
181
|
+
cannot be interrupted in-process; the host must enforce a hard whole-invocation
|
|
182
|
+
deadline. No new execution ledger, daemon, scheduler or automatic memory edit is
|
|
183
|
+
added.
|
|
@@ -21,6 +21,9 @@ separate rollback surface, needs independent verification, needs its own
|
|
|
21
21
|
review/acceptance boundary, touches a high-risk surface, or cannot remain a
|
|
22
22
|
checklist row in the active plan or sprint backlog.
|
|
23
23
|
|
|
24
|
+
Slices that write the same files in sequence go into one PR. Split a slice
|
|
25
|
+
into its own PR only when it runs in parallel with disjoint write ownership.
|
|
26
|
+
|
|
24
27
|
Inline sprint rows stay in the sprint backlog or the active plan's
|
|
25
28
|
`## Task Breakdown`. Contract rows may expand through the full plan -> contract
|
|
26
29
|
-> review -> notes flow.
|
|
@@ -8,16 +8,17 @@ add a provider, runtime adapter, schema, fleet role, or second Skill.
|
|
|
8
8
|
|
|
9
9
|
GPT Pro is an external chief planner/reviewer. Local Codex is the accountable
|
|
10
10
|
coordinator and executor, including the Codex built-in browser (IAB) transport.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
and
|
|
11
|
+
The upstream Bot owns human authentication and scope authorization. Local
|
|
12
|
+
execution uses the current approved admission, admitted task/session, immutable
|
|
13
|
+
claim reference, allowed paths, real checks, and acceptance gate. Plans and
|
|
14
|
+
contracts remain optional planning records.
|
|
14
15
|
|
|
15
16
|
## Authority Boundary
|
|
16
17
|
|
|
17
18
|
| Participant | May do | May not do |
|
|
18
19
|
| --- | --- | --- |
|
|
19
|
-
| GPT Pro Web | Read the exact context supplied to it, use the authorized GitHub Connector when visibly available, propose a plan, identify risks, and review the returned diff/evidence | Edit the local worktree, run local commands, create or change tasks,
|
|
20
|
-
| Local Codex | Resolve state, select the remote revision, build and secret-scan the local bundle, dispatch work through the
|
|
20
|
+
| GPT Pro Web | Read the exact context supplied to it, use the authorized GitHub Connector when visibly available, propose a plan, identify risks, and review the returned diff/evidence | Edit the local worktree, run local commands, create or change tasks, change task/session admission or claim provenance, widen `allowed_paths`, assert that local checks ran, or authorize commit/push/PR/merge/deploy |
|
|
21
|
+
| Local Codex | Resolve state, select the remote revision, build and secret-scan the local bundle, dispatch work through the admitted task/session path, run checks, and decide acceptance | Treat GPT Pro prose or a tool-use claim as permission or as proof of a local fact |
|
|
21
22
|
| GitHub Connector | Supply remote repository facts at an exact revision when its invocation is observable | Describe uncommitted local changes or replace the local repository source of truth |
|
|
22
23
|
|
|
23
24
|
This is an advisory planning/review loop, not a managed `agent-fleet` role.
|
|
@@ -124,7 +125,7 @@ does not upgrade itself into `verified`; `unverified` blocks the round.
|
|
|
124
125
|
|
|
125
126
|
### 1. Prepare and send the plan turn
|
|
126
127
|
|
|
127
|
-
1. Confirm the current
|
|
128
|
+
1. Confirm the current admission, task/session, immutable claim reference, and
|
|
128
129
|
allowed paths locally. Preserve unrelated dirty worktree state.
|
|
129
130
|
2. Resolve and record the exact remote repository/ref/SHA. Do not let GPT Pro
|
|
130
131
|
choose a moving branch or silently substitute another revision.
|
|
@@ -152,10 +153,10 @@ local-delta identity. GPT Pro cannot amend any of them through its response.
|
|
|
152
153
|
evidence.
|
|
153
154
|
2. Classify GitHub evidence as `verified`, `bundle_only`, or `unverified`.
|
|
154
155
|
Recheck the proposed paths and assumptions against the current local
|
|
155
|
-
|
|
156
|
+
admission and current task/session. If the remote SHA or local delta changed,
|
|
156
157
|
discard the proposal and rebuild the bundle.
|
|
157
158
|
3. Treat the proposal as advisory input. The local coordinator may dispatch
|
|
158
|
-
only work already authorized by the
|
|
159
|
+
only work already authorized by the current admission and task/session. It runs edits
|
|
159
160
|
and real checks locally; GPT Pro never claims those results for it.
|
|
160
161
|
4. Stop closed on stale state, missing evidence, path widening, a proposed
|
|
161
162
|
commit/push/PR/deploy, or any instruction that crosses the authority table.
|
|
@@ -178,7 +179,7 @@ local-delta identity. GPT Pro cannot amend any of them through its response.
|
|
|
178
179
|
termination/read-back evidence blocks the orchestration round.
|
|
179
180
|
5. The local gatekeeper reruns the task's real checks and decides acceptance.
|
|
180
181
|
Record GPT Pro's response as review evidence only; it cannot approve the
|
|
181
|
-
task,
|
|
182
|
+
task, revoke an admission, or override a failed gate.
|
|
182
183
|
|
|
183
184
|
## Required Canary Evidence
|
|
184
185
|
|
|
@@ -213,7 +214,7 @@ evidence and report the concrete stop reason.
|
|
|
213
214
|
Never ask for passwords, 2FA codes, cookies, browser storage, session tokens,
|
|
214
215
|
or GitHub credentials. Never retry through native/CDP or a different
|
|
215
216
|
conversation to manufacture a passing canary. Never turn GPT Pro's plan or
|
|
216
|
-
review into a task
|
|
217
|
+
review into a task/session admission, code edit, acceptance receipt, or publication
|
|
217
218
|
authority.
|
|
218
219
|
|
|
219
220
|
## Existing References
|
|
@@ -6,10 +6,27 @@ address file `{endpoint:{session,configPath?,home?},parent_pane}`. Trust the exa
|
|
|
6
6
|
checkout through the normal operator workflow before starting; never respond to
|
|
7
7
|
trust/update/approval prompts automatically.
|
|
8
8
|
|
|
9
|
+
Before review, configure the repository's manual `external_sources` policy and
|
|
10
|
+
provide working provider access. The default policy is off; initialization does
|
|
11
|
+
not enable it. The trusted upstream Bot must authenticate the human, authorize
|
|
12
|
+
the scope, and supply the bound request. Its integration calls
|
|
13
|
+
`repo-harness review admit --repo <execution-checkout> --request <authorized-request.json>`.
|
|
14
|
+
The request contains `{admission, approval, expectedRevision}`. To withdraw that
|
|
15
|
+
approval, the Bot integration calls
|
|
16
|
+
`repo-harness review revoke --repo <execution-checkout> --request <revocation-request.json>`.
|
|
17
|
+
That request contains
|
|
18
|
+
`{repository_id, issue_id, campaign_id, expectedGrantSha256, expectedRevision}`.
|
|
19
|
+
The store revokes only the exact active grant at the expected revision. Do not create an
|
|
20
|
+
approval from these examples: actor IDs and authorization references are binding
|
|
21
|
+
data, not authentication. Select the resulting active grant and policy digests
|
|
22
|
+
below, and supply the current immutable issue claim. A contract or plan file
|
|
23
|
+
cannot grant permission. A user waiver requires a separate upstream-authorized
|
|
24
|
+
decision; waiver eligibility in an admission does not grant one.
|
|
25
|
+
|
|
9
26
|
```bash
|
|
10
|
-
repo-harness review round --
|
|
11
|
-
repo-harness review status --
|
|
12
|
-
repo-harness review close --
|
|
27
|
+
repo-harness review round --repository-id <repository-id> --issue-id <issue-id> --campaign-id <campaign-id> --grant-sha256 <approved-grant-sha256> --policy-sha256 <policy-sha256> --actor <actor-id> --reviewer-repo <linked> --herdr-endpoint <address.json> --verification <native-report> --claim-ref <claim-reference> --claim-revision <claim-sha256>
|
|
28
|
+
repo-harness review status --repository-id <repository-id> --issue-id <issue-id> --campaign-id <campaign-id> --grant-sha256 <approved-grant-sha256> --policy-sha256 <policy-sha256> --actor <actor-id>
|
|
29
|
+
repo-harness review close --repository-id <repository-id> --issue-id <issue-id> --campaign-id <campaign-id> --grant-sha256 <approved-grant-sha256> --policy-sha256 <policy-sha256> --actor <actor-id>
|
|
13
30
|
```
|
|
14
31
|
|
|
15
32
|
Default selection uses an existing typed task binding for the parent pane and chooses
|
|
@@ -28,7 +45,7 @@ consumes OAR Session model observation and calls the existing generic-review
|
|
|
28
45
|
Receipt writer/verifier. Receipt validity is launcher-independent.
|
|
29
46
|
|
|
30
47
|
Close requires the current passing Receipt to equal the final accepted round.
|
|
31
|
-
On failure use `repo-harness review cancel
|
|
48
|
+
On failure use `repo-harness review cancel` with the same six admission selectors for identity-proven
|
|
32
49
|
cleanup without acceptance. Preserve unknown delivery and cleanup evidence.
|
|
33
50
|
The server and attached parent/workspace remain with their existing owner.
|
|
34
51
|
Drain pre-cutover sessions with the prior version; archive old evidence read-only.
|
|
@@ -60,7 +77,7 @@ Use this mode when an operator works in the Claude desktop app without Herdr.
|
|
|
60
77
|
The Claude app session is the owner, so the default reviewer is Codex.
|
|
61
78
|
|
|
62
79
|
```bash
|
|
63
|
-
repo-harness review round --launch app-terminal --
|
|
80
|
+
repo-harness review round --launch app-terminal --repository-id <repository-id> --issue-id <issue-id> --campaign-id <campaign-id> --grant-sha256 <approved-grant-sha256> --policy-sha256 <policy-sha256> --actor <actor-id> --reviewer-repo <linked> --verification <report> --claim-ref <claim-reference> --claim-revision <claim-sha256>
|
|
64
81
|
```
|
|
65
82
|
|
|
66
83
|
1. The first call prepares the packet, the Seatbelt profile and the host spec.
|