feat(decision-brief): adopt the decision-brief caller stub (#3)

Merged
DO
6d ago
+268-0

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.

PieceChange
.github/workflows/decision-brief.ymlVerbatim 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:

  1. scripts/cut-release.sh decision-brief 1.0.0 --channel stable --push (autocut does not cover decision-brief; it is not in standards/canary-rings.json).
  2. Admin: add decision-brief/** to the release-channel-tags ruleset.

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-brief to prove the end-to-end path (Mary opens incubate/<slug> with ideas/<slug>/brief.md).
  • Optional: adopt idea-triage.yml here so the Monday Ripe sweep has an Idea Promotion Queue to read. Without it only the needs-brief label and manual dispatch fire the stage.
  • combsmith/.github: promote the stub to standards/workflows/, add it to ci-standards.md §10, register the agent in canary-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.