feat(decision-brief): adopt the decision-brief caller stub (#3)
Summary
Incubator side of combsmith/incubator#3 — Wire the decision-brief agent stage (Mary → brief.md at "Ripe"). Companion to combsmith/.github-private#2369 (merged, daf48328), which hosts the central workflow, the reusable and the stub.
References #3; does not close it. The issue's first acceptance criterion (a needs-brief / Ripe idea triggers a Mary run that opens a brief PR here) can only be met by a live run, and the stub cannot run until the release step below is done.
| Piece | Change |
|---|---|
.github/workflows/decision-brief.yml | Verbatim copy of standards/workflows/decision-brief.yml from .github-private@daf48328. Pins combsmith/.github-private/.github/workflows/decision-brief-reusable.yml@decision-brief/v1-stable. The header's caller-tunable fields (cron 43 14 * * 1, max_briefs: '3') are left at their defaults; nothing else may be edited. |
| Labels on this repo (created out-of-band, not in the diff) | needs-brief (8B5CF6, matches dev-lead) — request a brief for one Ideas Discussion. idea:approved (0e8a16, matches automerge) — the go decision; fires initiative-planner. decision-brief is created automatically on first use. |
tests/decision-brief-workflow.bats (16 tests) | Drift guard in the style of dev-lead-workflow.bats / feature-ideation-workflow.bats: trigger shape, @decision-brief/v1-stable pin (never @main/SHA), central_ref = pin, both NOSONAR markers, top-level permissions: {} and no job-level grant, secrets: inherit, no caller concurrency:, single reusable-call job, github.event.inputs.discussion form (the #571 class), cron off minute 0 and after the idea-triage slot, max_briefs a quoted positive integer. Each invariant was mutation-checked to fail its test. |
⚠️ Before the stub's first run
decision-brief/v1-stable does not exist yet in combsmith/.github-private. Until it is cut, any trigger (label, schedule, dispatch) fails at workflow setup with an unresolvable uses: ref. Owner steps, in .github-private after #2369:
scripts/cut-release.sh decision-brief 1.0.0 --channel stable --push(autocut does not coverdecision-brief; it is not instandards/canary-rings.json).- Admin: add
decision-brief/**to therelease-channel-tagsruleset.
This PR deliberately does not touch .github-private or cut any tag.
What remains for #3 after this merges
- Cut the channel tag (above), then label one Ideas Discussion
needs-briefto prove the end-to-end path (Mary opensincubate/<slug>withideas/<slug>/brief.md). - Optional: adopt
idea-triage.ymlhere so the Monday Ripe sweep has an Idea Promotion Queue to read. Without it only theneeds-brieflabel and manual dispatch fire the stage. combsmith/.github: promote the stub tostandards/workflows/, add it toci-standards.md§10, register the agent incanary-rings.json(tracked on the #2369 follow-ups).
Verified locally
bats tests/decision-brief-workflow.bats 16/16 · bats tests/ 147/150 (the 3 check_package failures are the known BSD-sed/macOS incubation-gate cases, unrelated) · tests/workflows-yaml-valid.bats passes with the new file · actionlint clean · shellcheck -s bash clean on the bats file.
🤖 Generated with Claude Code
Problem
See the linked issue.
Risk
Medium — changes GitHub Actions workflow behavior, which is exercised only post-merge; verify via the affected workflow runs.
Test plan
Tests added/updated: tests/decision-brief-workflow.bats. Verification: bash scripts/dev-lead-lint.sh (shellcheck --severity=warning) ran pre-commit; the bats suite runs in CI.
Rollback
Revert this PR. No non-revertible side effects (no tags, migrations, or external state).
Monitoring
Watch the affected workflow run(s) in the Actions tab and this PR's Lint check for regressions.