compound-estimate · v1.1.0 · 2026-08-26 · sha256 afae30107951eaa6
compound-estimate v1.1.0B
Immutable. This exact content is served forever at /api/v1/blob/afae30107951eaa6.
--- name: compound-estimate description: "Closing ritual for the AI-native estimation feedback loop. **ALWAYS use when** a ticket's PR has merged and merge-pr's post-merge deploy-verification (CTL-2232) has resolved a terminal sentinel for it — the relay-native trigger this skill now shares with `ticket-retro` and `ticket-compound`, see references/trigger.md (CTL-2244) — or when the user says 'compound-estimate', 'close the estimation loop', 'record actuals', 'compound-log', or wants to log post-merge actuals for a shipped Linear ticket. Writes a structured entry (linear.key, pr_number, merged_at, estimate_at_start, estimate_actual, cost_usd, wall_time_hours, what_worked, what_surprised_me) to thoughts/shared/retros/estimate/YYYY-WW-compound-log.md — one file per ISO week, appends." disable-model-invocation: false allowed-tools: Bash(gh *), Bash(linearis *), Bash(jq *), Bash(git *), Bash(./plugins/dev/scripts/compound-log.sh *), Bash(plugins/dev/scripts/compound-log.sh *), Bash(./plugins/dev/scripts/estimate/refresh-corpus.sh *), Bash(plugins/dev/scripts/estimate/refresh-corpus.sh *), Read, Write version: 1.1.0 --- # Compound Estimate — Closing Ritual at PR Merge Write a compound-log entry for a just-shipped ticket. This is the Phase 1 exit gate for AI-native estimation: without this closer, cost/wall-time signals never feed future estimates and the calibration loop stays open. All mechanical work delegates to `plugins/dev/scripts/compound-log.sh` — your job is collecting the three human-authored inputs and invoking it. ## Invocation ``` /compound-estimate <TICKET-ID> ``` `<TICKET-ID>` is required unless it can be detected from the current branch name (`gh pr view --json headRefName` → parse the ticket prefix). ## Load on demand | when | read | | -- | -- | | resolving the ticket, collecting the three inputs, invoking the helper, reporting back | `references/process.md` | | where `estimate_at_start` and `cost_usd` actually come from today | `references/data-source.md` | | the opportunistic corpus refresh, flags, entry schema, testing, troubleshooting | `references/corpus-refresh.md` | | what fires this skill now, and why the daemon-era `phase-monitor-merge` path is gone | `references/trigger.md` | ## Invariants - **Don't skip the re-score.** `estimate_actual` is the calibration signal; ask for it even when the ticket felt routine. - **Reads → the replica** (via the helper's `linear_read_ticket`, gated by cloud-detection); **writes → `linearis`**. See `references/data-source.md`. - **A refresh failure never fails the ritual** — the corpus refresh in `references/corpus-refresh.md` is best-effort, off the critical path. - **Trigger: merge-pr's post-merge deploy-verification signal (CTL-2232), not `phase-monitor-merge`.** This skill no longer depends on the retiring daemon-era `phase-monitor-merge` phase agent to fire — see `references/trigger.md` for the full contract (CTL-2244). ## Output Appends an entry to `thoughts/shared/retros/estimate/YYYY-WW-compound-log.md` (creating the weekly file if needed). Weeks are ISO-8601, derived from the PR's `mergedAt`, not today's date. ## Related - Spec/plan: `thoughts/shared/research/2026-04-24-CTL-159-compound-closing-ritual.md`, `thoughts/shared/plans/2026-04-24-CTL-159-compound-closing-ritual.md` - Consumers: `compound-log.sh read`/`aggregate` → `refresh-corpus.sh` feeds `estimate_actual` into `reference-class-corpus.json`; `/catalyst-dev:ticket-retro` reads the weekly files for the estimation-calibration summary.