用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/stoa-platform/stoa --skill council命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Force a full-file rewrite (Write) instead of patch (Edit) when Edit keeps failing or diff is large. Context rot mitigation — use when Edit has failed ≥2× on same file, or when estimated diff >30% of file size.
STOA PR Guardian — advisory three-axis review (ADR compliance, security, AI code smell) with binary GO/NO-GO verdict + confidence. Never approves, never blocks merge.
Analyze cycle capacity gap and propose backlog items to fill the sprint to ~80% of proven velocity.
基于 SOC 职业分类
正在显示 SKILL.md
| name | council |
| description | Run 8-persona Council validation on a feature/ADR, then auto-create a Linear ticket if score >= 8/10. |
| argument-hint | <description of what to build> |
This skill drives Stage 1 (ticket pertinence) and Stage 2 (plan validation) — both prose-based, 8-persona scoring per the canonical Team Coca jury (HEG-PAT-003).
Stage 3 (code review) runs after implementation on the actual diff, via scripts/council-review.sh (4-axis: conformance, debt, attack_surface, contract_impact). It is not invoked by this skill — it is wired to the pre-push hook (CAB-2048) and council-gate.yml CI workflow (CAB-2049). See .claude/docs/council-s3.md for full docs.
S1 (this skill, prose) → S2 (this skill, plan) → implementation → S3 (council-review.sh, diff) → merge
Read and understand the feature/ADR/change description. Gather context from:
memory.md — current sprint, related workplan.md — where this fits in prioritiesRun the Context Compiler to get the blast radius before scoring:
docs/scripts/build-context.sh --component <component> --intent "$ARGUMENTS"
--ticket "CAB-XXXX"docs/context-packs/If build-context.sh or stoa-impact.db is not available, skip this step with a warning and proceed without impact scoring.
Evaluate $ARGUMENTS through each of the 8 canonical personas. All 8 are mandatory — no subset selection, no quick mode. The canonical roster is defined in hegemon/patterns/validation/HEG-PAT-003-team-coca-adversarial-validation.md.
Domain N/A baseline (calibration rule from CAB-2054 Phase 4): when a ticket does not touch a persona's domain (e.g., a backend infra ticket has no webapp surface for N3m0), score the persona at 8/10 (neutral-positive: "no concern detected"), not 6-7. Lower scores must be backed by an actual identified concern. This rule keeps the 8-persona average stable vs the historical 4-persona baseline (calibration drift < ±0.3 on 4/5 historic tickets).
Present each persona's evaluation:
## Council Validation
### Chucky (Devil's Advocate) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences: key concerns or approval>
**Adjustments**: <specific changes required, or "None">
### N3m0 (Webapp Security) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">
### Gh0st (Supply Chain) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">
### Pr1nc3ss (Social Engineering) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">
### OSS Killer (VC Skeptique) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">
### Archi 50x50 (Architecte Veteran) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">
### Better Call Saul (Legal/IP) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">
### Gekk0 (Monétisation / GTM) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">
---
**Persona Average**: X.XX/10 (averaged over 8 personas)
**Impact Score**: N (LEVEL) | Modifier: -Y.Y
**Final Score**: X.XX/10
**Global Verdict**: Go | Fix | Redo
**Adjustments to apply**: <numbered list of all adjustments from all 8 personas>
The Impact Score from Step 1b applies a risk modifier to the persona average:
| Impact Level | Score Range | Modifier | Rationale |
|---|---|---|---|
| LOW | 0-5 | 0 | Isolated change, no risk adjustment |
| MEDIUM | 6-15 | 0 | Manageable blast radius |
| HIGH | 16-30 | -0.5 | Significant cross-component risk |
| CRITICAL | 31+ | -1.0 | Major blast radius, forces careful review |
Final Score = Persona Average + Impact Modifier
If Step 1b was skipped (no DB), Impact Modifier = 0.
| Final Score | Action |
|---|---|
| >= 8.0 | Go — Auto-create Linear ticket (Step 4) |
| 6.0 - 7.9 | Fix — List adjustments, ask user to confirm, then create ticket |
| < 6.0 | Redo — Fundamental issues, do NOT create ticket. Propose alternatives. |
After scoring, apply the appropriate Stage 1 label to the Linear ticket (if one exists or is being created):
| Score Range | Label | Color |
|---|---|---|
| >= 8.0 | council:ticket-go | green (#0e8a16) |
| 6.0 - 7.9 | council:ticket-fix | amber (#e4b400) |
| < 6.0 | council:ticket-redo | red (#d73a49) |
Apply via: linear.update_issue(id, labels: [existing_labels..., "council:ticket-go|fix|redo"])
If the ticket already has a council:ticket-* label, replace it (remove old, add new).
If Council passes (Go or Fix-then-confirmed), create the ticket using Linear MCP:
linear.create_issue(
title: "<type>(scope): <short description>",
description: <see template below>,
team: "<LINEAR_TEAM_ID>",
project: "<LINEAR_PROJECT_ID>",
assignee: "<LINEAR_ASSIGNEE_ID>",
estimate: <fibonacci points>,
priority: <1=Urgent, 2=High, 3=Normal, 4=Low>,
labels: [<type label>, <priority label>, "hlfh:validated", "council:ticket-go|fix", "instance:<detected-instance>"],
state: "Todo"
)
## Context
<1-2 paragraphs: what and why>
## Council Validation — X.XX/10 {Go|Fix} | Impact: N (LEVEL, modifier -Y.Y)
| Persona | Score | Verdict |
|---------|-------|---------|
| Chucky (Devil's Advocate) | X/10 | Go |
| N3m0 (Webapp Security) | X/10 | Go |
| Gh0st (Supply Chain) | X/10 | Go |
| Pr1nc3ss (Social Engineering) | X/10 | Go |
| OSS Killer (VC Skeptique) | X/10 | Go |
| Archi 50x50 (Architecte Veteran) | X/10 | Go |
| Better Call Saul (Legal/IP) | X/10 | Go |
| Gekk0 (Monétisation / GTM) | X/10 | Go |
### Adjustments Applied
1. <adjustment 1>
2. <adjustment 2>
## Scope
<Bullet list of what's in/out of scope>
## Implementation Phases
<Numbered list of phases with estimated LOC>
## DoD
- [ ] <acceptance criteria 1>
- [ ] <acceptance criteria 2>
- [ ] State files updated (memory.md, plan.md)
- [ ] CI green
| Complexity | Points | Examples |
|---|---|---|
| Trivial | 1-2 | Config change, docs update, single-file fix |
| Small | 3-5 | Single component, <150 LOC, clear scope |
| Medium | 8-13 | Multi-component, <300 LOC, needs design |
| Large | 21-34 | Cross-cutting, >300 LOC, multiple PRs |
| Epic | 55+ | Multi-sprint, architectural change |
| Signal | Priority | Linear Label |
|---|---|---|
| Demo blocker, production down | 1 (Urgent) | P0-Urgent |
| This week, user-facing | 2 (High) | P1-High |
| This sprint | 3 (Normal) | P2-Medium |
| Backlog, nice-to-have | 4 (Low) | P3-Low |
After ticket creation and before implementation begins, run Stage 2 to validate the implementation plan.
| Level | Stage 2? | Trigger |
|---|---|---|
| L1 Issue-to-PR | Yes | /go triggers Stage 2, /go-plan triggers implement |
| L3 Linear Dispatch | Yes | /go triggers Stage 2, /go-plan triggers implement |
| L3.5 Autopilot | No (batch, Stage 1 only) | Unchanged |
| L5 Multi-Agent | No (batch, Stage 1 only) | Unchanged |
/council local | Yes | /council plan "..." triggers Stage 2 |
| Score Range | Label | Color |
|---|---|---|
| >= 8.0 | council:plan-go | teal (#006b75) |
| 6.0 - 7.9 | council:plan-fix | dark amber (#b45309) |
| < 6.0 | council:plan-redo | dark red (#8b0000) |
Apply via: linear.update_issue(id, labels: [existing_labels..., "council:plan-go|fix|redo"])
Stage 1 passes (council:ticket-go)
↓ /go
Claude writes implementation plan (posted as issue comment)
↓ plan posted
Stage 2 validates the plan (4 personas, plan-focused rubric)
↓ council:plan-go applied to Linear
Comment `/go-plan` to approve and start implementation
After ticket creation, append to the appropriate section in plan.md:
- [ ] CAB-XXXX: <title> (<points> pts) — Council X.XX/10
Council: X.XX/10 — Go
Ticket: CAB-XXXX (<points> pts)
Linear: <URL>
plan.md: updated
Next: say "go" to start implementation, or "adjust <feedback>" to revise
Stage 3 is not run by this skill. It runs automatically against the diff once implementation is complete, via scripts/council-review.sh. Shape:
| Axis | Role |
|---|---|
conformance | Repo conventions, style, naming, structure |
debt | Shortcuts, TODOs, test gaps, premature abstractions |
attack_surface | Input validation, authn/z, secrets, SSRF, PII, CORS, deps |
contract_impact | Cross-component contracts (skipped when docs/stoa-impact.db is stale) |
Exit codes: 0 APPROVED (avg >= 8.0), 1 REWORK, 2 technical failure.
Trigger points (when wired):
| Level | Trigger | How |
|---|---|---|
| Local pre-push | git push | Pre-push hook extension (CAB-2048) |
| CI | PR opened | .github/workflows/council-gate.yml feature-flagged via vars.COUNCIL_S3_ENABLED (CAB-2049) |
| Manual | Any diff | scripts/council-review.sh --ticket CAB-XXXX --diff <range> |
When S3 returns REWORK, address the per-axis blockers/warnings and re-run. Full documentation: .claude/docs/council-s3.md.
/create-adr skill after Council passes (ADR lives in stoa-docs)mega-ticket label automaticallycouncil:ticket-*) are applied after every Council scoring (Step 3b)council:plan-*) are applied after plan validation (Step 4b)