feat: add revision-bound signal decisions - #76
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cdd978a658
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| resource.kind === "signal" | ||
| ? "Record an approved signal decision only through loop decide with this locator and the exact expected queue revision; the receipt does not implement the decision." | ||
| : "Do not invoke a mutation from this plan; proposal and coverage lifecycle changes remain separate closed workflows.", |
There was a problem hiding this comment.
Mark signal decisions as approval-required
When the locator is for a signal item, activityActionClass() returns handoff, so this new signal-specific resolve plan still serializes mutation.approvalRequired: false even though decideActivityAction() rejects every decision without approve=true. Consumers that use the resolve JSON to decide whether to show or require approval will suppress the required approval prompt or misstate the safety boundary for signal decisions; set the approval flag true for signal resources.
AGENTS.md reference: AGENTS.md:L130-L130
Useful? React with 👍 / 👎.
Summary
Implements the approved HACK-1033 capability evolution.
fclt ai loop decideandactivity_decideJSON/MCP lifecycle foraccept,redirect,reject, anddeferLinear: https://linear.app/hackdance/issue/HACK-1033
Verification
Passed:
bun run checkbun run type-checkbun run buildbun run build:verifybun run pack:dry-runai loop decidegit diff --checkand changed-line privacy scanBounded full-suite evidence:
origin/mainarchive:Selected finding has no exact report-authorized remediation bindingBehavior and boundaries
The receipt is append-only lifecycle evidence. It does not implement the decision, grant authority, apply a proposal, mutate canonical capability, call Git/Linear/external systems, or spawn work. A later receipt requires a genuinely newer signal queue revision. A hold/defer remains visible and unimplemented.
Coverage completeness and cursor freshness remain independent in JSON, activity output, persisted reconciliation reports, fixtures, and aggregate behavior.
Rollback
Revert commit
cdd978a. Existing machine-local decision receipts are retained as history; no canonical or external data migration is introduced.Release note
Adds revision-bound signal-family decision receipts and explicit coverage-versus-freshness reconciliation behavior. Semantic release will derive the feature release from the Conventional Commit after merge; this PR does not release or deploy.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.