Add journey-integrity gate: edge: resolver + Surface tag (ADR-0077) - #2
Merged
Merged
Conversation
Implements the ac-trace side of Atrium's ADR-0077 / issue #547 — make the verify: gate prove journeys, not just layers. All of it is opt-in behind an optional .actrace.yml, so a repo that ships no config (Airlock) is unaffected. - config.go: the .actrace.yml loader (zero value = every feature off). - resolver.go: a generic verify-method prefix→command hook. A token like edge:agentloop->files.GetFile is resolved by invoking the configured command with the token as one argv element (no shell — CWE-78/88); a custom-prefix token with no configured resolver is a hard failure, never a silent no-op. - journey.go: the **Surface:** scenario tag and the journey-proof gate. A user-facing scenario must carry >=1 AC citing a journey proof, gated on location AND substance: a ui-e2e-realfd: spec that asserts on a real server response (waitForResponse), or a test/e2e/ Go test that is a real-cluster run (//go:build e2e, not synthetic, no idpfake). Weak methods (demonstration/scenario/manual) are invalid on a user-facing AC; a pre-existing scenario grandfathers with a journey-ok: opt-out that must cite a tracked issue. Enforcing tests (ADR-0077): TestADR_0077_EdgeVerifyRejectedWithoutResolver, ResolverTokenPassedAsArgv, UserFacingScenarioRequiresJourneyProof, JourneyProofIsLocationGated, JourneyProofRejectsFakedSeam, UserFacingRejectsWeakMethods, GrandfatherOptOutRequiresIssue. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
JAORMX
approved these changes
Jul 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements the ac-trace side of a journey-integrity design (ADR-0077) developed with the original consuming repo — make the
verify:gate prove journeys, not just layers.Opt-in — nothing changes for a repo without
.actrace.ymlEvery new check is gated behind an optional
.actrace.yml. Absent ⇒ zeroConfig⇒ every feature off, so repos that don't opt in are unaffected.journey_integrity: trueturns on the Surface/journey-proof gate;resolvers:maps a customverify:prefix to a command.What lands
config.go— the.actrace.ymlloader. Missing file ⇒ zero value (no error); malformed ⇒ hard error (a typo mustn't silently disable a gate).resolver.go— a generic verify-method prefix→command hook.edge:agentloop->files.GetFileis resolved by invoking the configured command with the raw token as one argv element, no shell (CWE-78/88); exit 0 = holds, non-zero = doesn't. A custom-prefix token with no configured resolver is a hard failure, never a silent no-op.journey.go— the**Surface:**scenario tag + journey-proof gate. Auser-facingscenario must carry ≥1 AC citing a journey proof, gated on location and substance:ui-e2e-realfd:spec that asserts on a real server response (waitForResponse), not DOM alone; ortest/e2e/Go test that is a real-cluster run (//go:build e2e, notsynthetic, noidpfake).test/e2e/test, or ademonstration/scenario/manualmethod can't satisfy it. Missing/unrecognised/ambiguous tags hard-fail. A pre-existing scenario grandfathers withjourney-ok:only if it cites a tracked issue.Tests
7 enforcing tests + config/token-filter/exit-code units.
go test -race,go vet,golangci-lint run(gosec + exhaustive + …), andgofmtall clean. The FEui-*vocabulary and existing gates are untouched.