From 054d8443b8ae090885f2a1cc4ec8fd19b91a8150 Mon Sep 17 00:00:00 2001 From: Tanisha Aberdeen <32620895+aliasunder@users.noreply.github.com> Date: Mon, 21 Sep 2026 18:24:10 -0400 Subject: [PATCH 1/3] fix(ship-check): pass Codex attribution model --- plugins/ship-check/agents/bug-checker.md | 21 +++--- .../agents/code-quality-reviewer.md | 21 +++--- plugins/ship-check/agents/pr-reviewer.md | 21 +++--- plugins/ship-check/agents/test-auditor.md | 21 +++--- plugins/ship-check/skills/bug-check/SKILL.md | 18 ++--- .../ship-check/skills/code-quality/SKILL.md | 18 ++--- plugins/ship-check/skills/pr-monitor/SKILL.md | 15 ++-- plugins/ship-check/skills/pr-review/SKILL.md | 18 ++--- plugins/ship-check/skills/ship-check/SKILL.md | 69 +++++++++++++------ plugins/ship-check/skills/test-audit/SKILL.md | 18 ++--- 10 files changed, 142 insertions(+), 98 deletions(-) diff --git a/plugins/ship-check/agents/bug-checker.md b/plugins/ship-check/agents/bug-checker.md index 5ff02f9..ee343e7 100644 --- a/plugins/ship-check/agents/bug-checker.md +++ b/plugins/ship-check/agents/bug-checker.md @@ -136,15 +136,18 @@ skipping decision points. Every PR comment or review you post โ€” inline comments, review bodies, PR-level comments โ€” MUST include the footer: `\n\n---\n*๐Ÿ” ship-check ยท bug-check ยท *` -where `` identifies the runtime model. Claude runs use the family ID from -system context, such as `claude-opus-4-6`; omit context-window, dated-build, and other -transcript-only suffixes. Codex GPT runs use the verified exact runtime model ID, -including version and variant suffixes such as `gpt-5.6-sol`. In Codex, match a -runtime-provided current thread or session ID to `session_meta.payload.id` exactly, -then read `session_meta.payload.base_instructions.provenance.model`; never select a -rollout by recency, cwd, or display name. If the Codex ID cannot be verified, stop -before posting. No exceptions โ€” a comment without a footer misattributes automated -output to the repo owner. +where `` identifies the exact runtime model used for the footer and any +`Ship-Check` commit trailer. Resolve it in this order: + +1. Use `Attribution model ID: ` from the dispatch prompt verbatim. +2. Without that line, a Claude agent may use the family ID from its system context, + such as `claude-opus-4-6`; omit context-window and dated-build suffixes. +3. An OpenCode agent may use the exact provider/model ID exposed by its runtime. + +A Codex child without the dispatch line stops before committing or posting and reports +an attribution blocker. Never infer a model from memory, parent prose, +rollout recency, cwd, or display name. No exceptions โ€” a comment without a footer +misattributes automated output to the repo owner. ### Comment mode diff --git a/plugins/ship-check/agents/code-quality-reviewer.md b/plugins/ship-check/agents/code-quality-reviewer.md index 265904e..9747919 100644 --- a/plugins/ship-check/agents/code-quality-reviewer.md +++ b/plugins/ship-check/agents/code-quality-reviewer.md @@ -122,15 +122,18 @@ You loaded `sequentialthinking` in orientation. Call it at these decision points Every PR comment or review you post โ€” inline comments, review bodies, PR-level comments โ€” MUST include the footer: `\n\n---\n*๐Ÿ” ship-check ยท code-quality ยท *` -where `` identifies the runtime model. Claude runs use the family ID from -system context, such as `claude-opus-4-6`; omit context-window, dated-build, and other -transcript-only suffixes. Codex GPT runs use the verified exact runtime model ID, -including version and variant suffixes such as `gpt-5.6-sol`. In Codex, match a -runtime-provided current thread or session ID to `session_meta.payload.id` exactly, -then read `session_meta.payload.base_instructions.provenance.model`; never select a -rollout by recency, cwd, or display name. If the Codex ID cannot be verified, stop -before posting. No exceptions โ€” a comment without a footer misattributes automated -output to the repo owner. +where `` identifies the exact runtime model used for the footer and any +`Ship-Check` commit trailer. Resolve it in this order: + +1. Use `Attribution model ID: ` from the dispatch prompt verbatim. +2. Without that line, a Claude agent may use the family ID from its system context, + such as `claude-opus-4-6`; omit context-window and dated-build suffixes. +3. An OpenCode agent may use the exact provider/model ID exposed by its runtime. + +A Codex child without the dispatch line stops before committing or posting and reports +an attribution blocker. Never infer a model from memory, parent prose, +rollout recency, cwd, or display name. No exceptions โ€” a comment without a footer +misattributes automated output to the repo owner. ### Comment mode diff --git a/plugins/ship-check/agents/pr-reviewer.md b/plugins/ship-check/agents/pr-reviewer.md index 91bdf8a..b43f33d 100644 --- a/plugins/ship-check/agents/pr-reviewer.md +++ b/plugins/ship-check/agents/pr-reviewer.md @@ -126,15 +126,18 @@ you're shortcutting the review. Every PR comment or review you post โ€” inline comments, review bodies, PR-level comments โ€” MUST include the footer: `\n\n---\n*๐Ÿ” ship-check ยท pr-review ยท *` -where `` identifies the runtime model. Claude runs use the family ID from -system context, such as `claude-opus-4-6`; omit context-window, dated-build, and other -transcript-only suffixes. Codex GPT runs use the verified exact runtime model ID, -including version and variant suffixes such as `gpt-5.6-sol`. In Codex, match a -runtime-provided current thread or session ID to `session_meta.payload.id` exactly, -then read `session_meta.payload.base_instructions.provenance.model`; never select a -rollout by recency, cwd, or display name. If the Codex ID cannot be verified, stop -before posting. No exceptions โ€” a comment without a footer misattributes automated -output to the repo owner. +where `` identifies the exact runtime model used for the footer and any +`Ship-Check` commit trailer. Resolve it in this order: + +1. Use `Attribution model ID: ` from the dispatch prompt verbatim. +2. Without that line, a Claude agent may use the family ID from its system context, + such as `claude-opus-4-6`; omit context-window and dated-build suffixes. +3. An OpenCode agent may use the exact provider/model ID exposed by its runtime. + +A Codex child without the dispatch line stops before committing or posting and reports +an attribution blocker. Never infer a model from memory, parent prose, +rollout recency, cwd, or display name. No exceptions โ€” a comment without a footer +misattributes automated output to the repo owner. ### Comment mode diff --git a/plugins/ship-check/agents/test-auditor.md b/plugins/ship-check/agents/test-auditor.md index 76ede99..1a7751a 100644 --- a/plugins/ship-check/agents/test-auditor.md +++ b/plugins/ship-check/agents/test-auditor.md @@ -98,15 +98,18 @@ You loaded `sequentialthinking` in orientation. Call it at these decision points Every PR comment or review you post โ€” inline comments, review bodies, PR-level comments โ€” MUST include the footer: `\n\n---\n*๐Ÿ” ship-check ยท test-audit ยท *` -where `` identifies the runtime model. Claude runs use the family ID from -system context, such as `claude-opus-4-6`; omit context-window, dated-build, and other -transcript-only suffixes. Codex GPT runs use the verified exact runtime model ID, -including version and variant suffixes such as `gpt-5.6-sol`. In Codex, match a -runtime-provided current thread or session ID to `session_meta.payload.id` exactly, -then read `session_meta.payload.base_instructions.provenance.model`; never select a -rollout by recency, cwd, or display name. If the Codex ID cannot be verified, stop -before posting. No exceptions โ€” a comment without a footer misattributes automated -output to the repo owner. +where `` identifies the exact runtime model used for the footer and any +`Ship-Check` commit trailer. Resolve it in this order: + +1. Use `Attribution model ID: ` from the dispatch prompt verbatim. +2. Without that line, a Claude agent may use the family ID from its system context, + such as `claude-opus-4-6`; omit context-window and dated-build suffixes. +3. An OpenCode agent may use the exact provider/model ID exposed by its runtime. + +A Codex child without the dispatch line stops before committing or posting and reports +an attribution blocker. Never infer a model from memory, parent prose, +rollout recency, cwd, or display name. No exceptions โ€” a comment without a footer +misattributes automated output to the repo owner. ### Comment mode diff --git a/plugins/ship-check/skills/bug-check/SKILL.md b/plugins/ship-check/skills/bug-check/SKILL.md index 81bc4de..68bf362 100644 --- a/plugins/ship-check/skills/bug-check/SKILL.md +++ b/plugins/ship-check/skills/bug-check/SKILL.md @@ -538,14 +538,16 @@ REVIEW ``` Replace `OWNER_REPO` and `PR_NUMBER` with values from the dispatch prompt. Replace -`MODEL_ID` with the runtime model label. Claude runs use the family ID from system -context, such as `claude-opus-4-6`; omit context-window, dated-build, and other -transcript-only suffixes. Codex GPT runs use the verified exact runtime model ID, -including version and variant suffixes such as `gpt-5.6-sol`. In Codex, match a -runtime-provided current thread or session ID to `session_meta.payload.id` exactly, -then read `session_meta.payload.base_instructions.provenance.model`; never select a -rollout by recency, cwd, or display name. If the Codex ID cannot be verified, stop -before posting. +`MODEL_ID` with the exact runtime model: + +1. Use `Attribution model ID: ` from the dispatch prompt verbatim. +2. Without that line, a Claude agent may use its system-context family ID, and an + OpenCode agent may use its runtime-exposed provider/model ID. +3. An inline standalone run may use the current session's verified exact model source. + +A Codex child without the dispatch line stops before committing or posting and reports +an attribution blocker. Never infer a model from memory, parent prose, rollout recency, +cwd, or display name. 5. **If 0 findings and no dismissals**, skip the API call โ€” report "0 findings" to the orchestrator only. With 0 findings but cleared suspicions, post a diff --git a/plugins/ship-check/skills/code-quality/SKILL.md b/plugins/ship-check/skills/code-quality/SKILL.md index 29dd921..6d1c3cc 100644 --- a/plugins/ship-check/skills/code-quality/SKILL.md +++ b/plugins/ship-check/skills/code-quality/SKILL.md @@ -549,14 +549,16 @@ REVIEW ``` Replace `OWNER_REPO` and `PR_NUMBER` with values from the dispatch prompt. Replace -`MODEL_ID` with the runtime model label. Claude runs use the family ID from system -context, such as `claude-opus-4-6`; omit context-window, dated-build, and other -transcript-only suffixes. Codex GPT runs use the verified exact runtime model ID, -including version and variant suffixes such as `gpt-5.6-sol`. In Codex, match a -runtime-provided current thread or session ID to `session_meta.payload.id` exactly, -then read `session_meta.payload.base_instructions.provenance.model`; never select a -rollout by recency, cwd, or display name. If the Codex ID cannot be verified, stop -before posting. +`MODEL_ID` with the exact runtime model: + +1. Use `Attribution model ID: ` from the dispatch prompt verbatim. +2. Without that line, a Claude agent may use its system-context family ID, and an + OpenCode agent may use its runtime-exposed provider/model ID. +3. An inline standalone run may use the current session's verified exact model source. + +A Codex child without the dispatch line stops before committing or posting and reports +an attribution blocker. Never infer a model from memory, parent prose, rollout recency, +cwd, or display name. 4. **If 0 findings and no dismissals**, skip the API call โ€” report "0 findings" to the orchestrator only. With 0 findings but cleared suspicions, post a diff --git a/plugins/ship-check/skills/pr-monitor/SKILL.md b/plugins/ship-check/skills/pr-monitor/SKILL.md index 75669a1..d442c40 100644 --- a/plugins/ship-check/skills/pr-monitor/SKILL.md +++ b/plugins/ship-check/skills/pr-monitor/SKILL.md @@ -271,14 +271,13 @@ For each unresolved bot thread, do ALL of these in order: 5. **Reply to the comment** -- do this BEFORE resolving, for EVERY bot comment. Since `gh` posts as the user's account, every reply MUST include an attribution - footer. Claude runs use the family ID from system context, such as - `claude-opus-4-6`; omit context-window, dated-build, and other transcript-only - suffixes. Codex GPT runs use the verified exact runtime model ID, including version - and variant suffixes such as `gpt-5.6-sol`. In Codex, match a runtime-provided - current thread or session ID to `session_meta.payload.id` exactly, then read - `session_meta.payload.base_instructions.provenance.model`; never select a rollout - by recency, cwd, or display name. If the Codex ID cannot be verified, stop before - posting and report the attribution blocker. The footer format is: + footer. Use the pipeline's verified `Attribution model ID` when ship-check supplied + one. A standalone run uses the current session's exact runtime model: Claude reads + the family ID from system context; OpenCode uses its exact runtime identifier; Codex + matches its own `CODEX_THREAD_ID` to `session_meta.payload.id` before reading + `session_meta.payload.base_instructions.provenance.model`. Never select a rollout by + recency, cwd, or display name. If the exact ID cannot be verified, keep monitoring + but stop before posting and report the attribution blocker. The footer format is: `\n\n---\n*๐Ÿ” ship-check ยท pr-monitor ยท *` ``` diff --git a/plugins/ship-check/skills/pr-review/SKILL.md b/plugins/ship-check/skills/pr-review/SKILL.md index c2b9411..bbcf322 100644 --- a/plugins/ship-check/skills/pr-review/SKILL.md +++ b/plugins/ship-check/skills/pr-review/SKILL.md @@ -270,14 +270,16 @@ REVIEW ``` Replace `OWNER_REPO` and `PR_NUMBER` with values from the dispatch prompt. Replace -`MODEL_ID` with the runtime model label. Claude runs use the family ID from system -context, such as `claude-opus-4-6`; omit context-window, dated-build, and other -transcript-only suffixes. Codex GPT runs use the verified exact runtime model ID, -including version and variant suffixes such as `gpt-5.6-sol`. In Codex, match a -runtime-provided current thread or session ID to `session_meta.payload.id` exactly, -then read `session_meta.payload.base_instructions.provenance.model`; never select a -rollout by recency, cwd, or display name. If the Codex ID cannot be verified, stop -before posting. +`MODEL_ID` with the exact runtime model: + +1. Use `Attribution model ID: ` from the dispatch prompt verbatim. +2. Without that line, a Claude agent may use its system-context family ID, and an + OpenCode agent may use its runtime-exposed provider/model ID. +3. An inline standalone run may use the current session's verified exact model source. + +A Codex child without the dispatch line stops before committing or posting and reports +an attribution blocker. Never infer a model from memory, parent prose, rollout recency, +cwd, or display name. 5. **If 0 findings and no dismissals**, skip the API call โ€” report "0 findings" to the orchestrator only. With 0 findings but cleared suspicions, post a diff --git a/plugins/ship-check/skills/ship-check/SKILL.md b/plugins/ship-check/skills/ship-check/SKILL.md index e701876..489f312 100644 --- a/plugins/ship-check/skills/ship-check/SKILL.md +++ b/plugins/ship-check/skills/ship-check/SKILL.md @@ -45,15 +45,21 @@ orchestrator triage, pr-monitor replies). - `` is the phase or role: `pr-review`, `code-quality`, `test-audit`, `bug-check`, `pr-monitor`, or `triage` (for orchestrator inter-phase triage posts). -- `` identifies the poster's runtime model. Claude runs use the family ID - from system context, such as `claude-opus-4-6`; omit context-window, dated-build, - and other transcript-only suffixes. Codex GPT runs use the verified exact runtime - model ID, including version and variant suffixes such as `gpt-5.6-sol`. In Codex, - match a runtime-provided current thread or session ID to `session_meta.payload.id` - exactly, then read `session_meta.payload.base_instructions.provenance.model`; never - select a rollout by recency, cwd, or display name. If the Codex ID cannot be - verified, stop before posting and report the attribution blocker. Agents - self-identify โ€” the orchestrator does not look up or pass model IDs for them. +- `` identifies the poster's exact runtime model. Resolve it by runtime: + - **Claude agent mode:** the phase agent uses the family ID from its system context, + such as `claude-opus-4-6`; omit context-window and dated-build suffixes. + - **Codex agent mode:** the orchestrator passes an exact model on every spawn and + adds `Attribution model ID: ` to the phase prompt. The phase agent uses + that value verbatim. A Codex child never searches rollout files or infers a model + from memory, parent prose, recency, cwd, or display name. + - **OpenCode agent mode:** use the exact provider/model ID exposed by the child + runtime or supplied by its dispatcher. + - **Inline mode:** the poster uses the current session's exact runtime context. A + Codex inline poster matches its own `CODEX_THREAD_ID` to + `session_meta.payload.id` before reading + `session_meta.payload.base_instructions.provenance.model`. + If the required source is missing, stop before posting and report the attribution + blocker. - **The orchestrator's own PR-level comments** (non-inline findings, deferred items posted via `gh pr comment`) follow the same runtime-specific model-label rule with component `triage` or `ship-check`. @@ -73,6 +79,9 @@ Add this instruction to each phase dispatch prompt (phases 1, 3-5 โ€” Phase 2 do commit): ``` +For Codex agent mode, include this line with the exact model passed to spawn: +Attribution model ID: EXACT_CODEX_MODEL_ID + When committing, add this trailer to every commit message (after the body, before any trailers the harness adds): Ship-Check: PHASE_NAME ยท YOUR_MODEL_ID @@ -347,21 +356,33 @@ the pipeline pushes nothing). ## Execution -The dispatch templates below omit `model`. Add it to each agent-mode phase -dispatch according to this table: +The dispatch templates below omit model selection. Resolve it once, then reuse it for +every agent-mode phase: + +| Runtime | No `--model` | Explicit `--model` | `--model inherit` | +|---|---|---|---| +| Claude | pass `opus` | pass the supported Claude selector | omit the override; the child inherits | +| Codex | pass `gpt-5.6-terra` | pass the exact supported `gpt-*` ID | resolve the parent's exact model and reasoning effort, then pass both explicitly | +| OpenCode | use its configured default | pass the runtime-supported selector or provider/model ID | use its inherited-model mechanism | + +For Codex `inherit`, match the root's `CODEX_THREAD_ID` to one rollout's +`session_meta.payload.id`. Read the model from +`session_meta.payload.base_instructions.provenance.model`, then read the reasoning +effort from the latest `turn_context.payload.effort` in that same rollout at or before +the phase dispatch. Never select a rollout by recency, cwd, or display name. Stop before +dispatch if the matching rollout, model, or applicable effort is missing. -| User flag | `model:` in the Agent() call | -|-----------|----------------------------| -| (none) | `"opus"` โ€” the pipeline default | -| `--model sonnet` (or `haiku`, `fable`, `opus`) | the named model | -| `--model inherit` | omitted โ€” the agent definition's `model: inherit` takes effect, so the agent runs on the session's model | -| `--inline` | N/A โ€” phases run in the session, not as agents | -| `--fork` | N/A โ€” forks always run on the session's model (they ignore model overrides) | +`--inline` needs no child model selection. `--fork` inherits the session model and +ignores model overrides; a Codex fork prompt still carries the root's verified +`Attribution model ID`. The dispatch templates below also omit the `Ship-Check` commit trailer instruction. Append it to every phase that commits (phases 1, 3-5): ``` +For Codex agent mode, include: +Attribution model ID: EXACT_CODEX_MODEL_ID + When committing, add this trailer to every commit message: Ship-Check: PHASE_NAME ยท YOUR_MODEL_ID Use the runtime-specific model label from the Attribution section for YOUR_MODEL_ID. @@ -482,6 +503,9 @@ no CI to watch. After Phase 5 completes, output the summary report and stop. Run /pr-monitor inline (not as an agent). This phase stays inline because it needs ScheduleWakeup, user interaction for human comments, and continuous monitoring. +Carry the orchestrator's verified attribution model ID into pr-monitor. A standalone +pr-monitor run resolves the current session's exact model under the Attribution rules. + **Phase 6 does not end.** Phases 1-5 are "complete and move on" steps. Phase 6 is a continuous monitoring loop that outlives the pipeline. The pipeline "completes" when Phases 1-5 are done, but Phase 6 runs until the user says stop or the PR merges. @@ -579,10 +603,11 @@ The user can customize the pipeline: persona cannot grant codebase familiarity or change the read into another review type. No-op when fresh-eyes doesn't run. - `/ship-check --model ` โ€” override the model for all phase agents for this run. - Valid values: `sonnet`, `opus`, `haiku`, `fable`, `inherit` (`inherit` = follow the - session's model). Ignored with `--inline` and `--fork` โ€” both run phases on the - session's model (forks ignore model overrides). Default without the flag, agent mode - only: `opus` โ€” the orchestrator adds `model: "opus"` to each phase dispatch. + Use a selector the active runtime accepts: Claude aliases such as `opus`, exact Codex + IDs such as `gpt-5.6-luna`, or an OpenCode-supported selector/provider ID. `inherit` + follows the session model through the runtime-specific procedure in Execution. + Ignored with `--inline` and `--fork` โ€” both run on the session model, though Codex + fork prompts still receive the root's verified attribution ID. - `/ship-check --inline` โ€” run all phases in the current context (no agents, no fresh eyes โ€” useful when context from prior work is actually helpful). Fresh-eyes is skipped because inherited context defeats the no-prior-knowledge persona. diff --git a/plugins/ship-check/skills/test-audit/SKILL.md b/plugins/ship-check/skills/test-audit/SKILL.md index 8191fac..e8f96c4 100644 --- a/plugins/ship-check/skills/test-audit/SKILL.md +++ b/plugins/ship-check/skills/test-audit/SKILL.md @@ -410,14 +410,16 @@ REVIEW ``` Replace `OWNER_REPO` and `PR_NUMBER` with values from the dispatch prompt. Replace -`MODEL_ID` with the runtime model label. Claude runs use the family ID from system -context, such as `claude-opus-4-6`; omit context-window, dated-build, and other -transcript-only suffixes. Codex GPT runs use the verified exact runtime model ID, -including version and variant suffixes such as `gpt-5.6-sol`. In Codex, match a -runtime-provided current thread or session ID to `session_meta.payload.id` exactly, -then read `session_meta.payload.base_instructions.provenance.model`; never select a -rollout by recency, cwd, or display name. If the Codex ID cannot be verified, stop -before posting. +`MODEL_ID` with the exact runtime model: + +1. Use `Attribution model ID: ` from the dispatch prompt verbatim. +2. Without that line, a Claude agent may use its system-context family ID, and an + OpenCode agent may use its runtime-exposed provider/model ID. +3. An inline standalone run may use the current session's verified exact model source. + +A Codex child without the dispatch line stops before committing or posting and reports +an attribution blocker. Never infer a model from memory, parent prose, rollout recency, +cwd, or display name. 4. **If 0 findings and no dismissals**, skip the API call โ€” report "0 findings" to the orchestrator only. With 0 findings but cleared suspicions, post a From 30ffbf699b500af3dd13b5d3474a555a2499b5ea Mon Sep 17 00:00:00 2001 From: Tanisha Aberdeen <32620895+aliasunder@users.noreply.github.com> Date: Mon, 21 Sep 2026 18:36:08 -0400 Subject: [PATCH 2/3] fix(ship-check): harden attribution dispatch --- plugins/ship-check/agents/bug-checker.md | 7 +++++-- plugins/ship-check/agents/code-quality-reviewer.md | 7 +++++-- plugins/ship-check/agents/pr-reviewer.md | 7 +++++-- plugins/ship-check/agents/test-auditor.md | 7 +++++-- plugins/ship-check/skills/bug-check/SKILL.md | 1 + plugins/ship-check/skills/code-quality/SKILL.md | 1 + plugins/ship-check/skills/pr-review/SKILL.md | 1 + plugins/ship-check/skills/ship-check/SKILL.md | 12 ++++++------ plugins/ship-check/skills/test-audit/SKILL.md | 1 + 9 files changed, 30 insertions(+), 14 deletions(-) diff --git a/plugins/ship-check/agents/bug-checker.md b/plugins/ship-check/agents/bug-checker.md index ee343e7..a194819 100644 --- a/plugins/ship-check/agents/bug-checker.md +++ b/plugins/ship-check/agents/bug-checker.md @@ -6,7 +6,8 @@ description: > include being dispatched by the ship-check pipeline for Phase 5, a user asking for a deep correctness check or to look for subtle bugs, and verifying that tool descriptions match their implementations after changes. See "When to invoke" in the - agent body for worked scenarios. + agent body for worked scenarios. A Codex dispatcher must include + `Attribution model ID: ` in the prompt. model: inherit color: red tools: @@ -41,7 +42,8 @@ bugs hide. fresh-eyes, code quality, and test audit have committed their fixes. You read every changed production file in full and apply the 7-dimension checklist systematically. - **Standalone bug check.** A user asks to "check for bugs", "deep correctness check", - or "look for subtle bugs". You run the full bug-check skill procedure. + or "look for subtle bugs". You run the full bug-check skill procedure. A Codex + dispatcher includes `Attribution model ID: ` in this standalone prompt. - **Description-vs-implementation audit.** After MCP tool descriptions or API docs change, the user wants to verify every claim in every description matches the actual code path โ€” the highest-yield check (40%+ of bot findings). @@ -140,6 +142,7 @@ where `` identifies the exact runtime model used for the footer and an `Ship-Check` commit trailer. Resolve it in this order: 1. Use `Attribution model ID: ` from the dispatch prompt verbatim. + Placeholder text is not an ID; treat it as a missing line. 2. Without that line, a Claude agent may use the family ID from its system context, such as `claude-opus-4-6`; omit context-window and dated-build suffixes. 3. An OpenCode agent may use the exact provider/model ID exposed by its runtime. diff --git a/plugins/ship-check/agents/code-quality-reviewer.md b/plugins/ship-check/agents/code-quality-reviewer.md index 9747919..fd38582 100644 --- a/plugins/ship-check/agents/code-quality-reviewer.md +++ b/plugins/ship-check/agents/code-quality-reviewer.md @@ -6,7 +6,8 @@ description: > ship-check pipeline for Phase 3 (naming, structure, comments, simplicity, module conventions), a user asking for a convention-grounded code quality pass, and reviewing changed files against project-specific naming and immutability rules. See "When to - invoke" in the agent body for worked scenarios. + invoke" in the agent body for worked scenarios. A Codex dispatcher must include + `Attribution model ID: ` in the prompt. model: inherit color: green tools: @@ -43,7 +44,8 @@ line is under review, not just new additions. and vault memory fresh. - **Standalone code quality pass.** A user asks to "clean up against conventions", "do a readability pass", or "review against AGENTS.md". You run the full code-quality - skill procedure. + skill procedure. A Codex dispatcher includes `Attribution model ID: ` in + this standalone prompt. - **Post-refactor convention check.** After a large refactor, the user wants to verify all touched files still meet naming and module layering rules. - **Not for a fresh-eyes read of one function, or a comparison of two candidate @@ -126,6 +128,7 @@ where `` identifies the exact runtime model used for the footer and an `Ship-Check` commit trailer. Resolve it in this order: 1. Use `Attribution model ID: ` from the dispatch prompt verbatim. + Placeholder text is not an ID; treat it as a missing line. 2. Without that line, a Claude agent may use the family ID from its system context, such as `claude-opus-4-6`; omit context-window and dated-build suffixes. 3. An OpenCode agent may use the exact provider/model ID exposed by its runtime. diff --git a/plugins/ship-check/agents/pr-reviewer.md b/plugins/ship-check/agents/pr-reviewer.md index b43f33d..c68c029 100644 --- a/plugins/ship-check/agents/pr-reviewer.md +++ b/plugins/ship-check/agents/pr-reviewer.md @@ -6,7 +6,8 @@ description: > for Phase 1 (correctness, security, conditional checks), a user asking for a convention-aware PR review rather than a generic one, and reviewing a PR against project-specific TDQS scoring or feature surface doc requirements. See "When to invoke" - in the agent body for worked scenarios. + in the agent body for worked scenarios. A Codex dispatcher must include + `Attribution model ID: ` in the prompt. model: inherit color: cyan tools: @@ -43,7 +44,8 @@ author intended. quality since dedicated agents handle those in later phases. - **Standalone PR review.** A user asks for a project-aware PR review ("review this PR against AGENTS.md", "thorough review with my preferences"). You run all dimensions - since no pipeline is handling the others. + since no pipeline is handling the others. A Codex dispatcher includes + `Attribution model ID: ` in this standalone prompt. - **TDQS or feature surface check.** The PR changes MCP tool descriptions or the project's feature surface, and the user wants those dimensions specifically evaluated against the project's scoring rubric. @@ -130,6 +132,7 @@ where `` identifies the exact runtime model used for the footer and an `Ship-Check` commit trailer. Resolve it in this order: 1. Use `Attribution model ID: ` from the dispatch prompt verbatim. + Placeholder text is not an ID; treat it as a missing line. 2. Without that line, a Claude agent may use the family ID from its system context, such as `claude-opus-4-6`; omit context-window and dated-build suffixes. 3. An OpenCode agent may use the exact provider/model ID exposed by its runtime. diff --git a/plugins/ship-check/agents/test-auditor.md b/plugins/ship-check/agents/test-auditor.md index 1a7751a..20ef9a9 100644 --- a/plugins/ship-check/agents/test-auditor.md +++ b/plugins/ship-check/agents/test-auditor.md @@ -5,7 +5,8 @@ description: > test conventions. Typical triggers include being dispatched by the ship-check pipeline for Phase 4, a user asking to audit tests or check test quality against conventions, and checking whether production code changes have adequate test coverage. See "When - to invoke" in the agent body for worked scenarios. + to invoke" in the agent body for worked scenarios. A Codex dispatcher must include + `Attribution model ID: ` in the prompt. model: inherit color: yellow tools: @@ -41,7 +42,8 @@ Every `it()` block gets individual evaluation. No shortcuts, no "the rest look f AND run coverage gap analysis on changed production files to find missing tests. - **Standalone test audit.** A user asks to "audit tests", "check test quality", "review tests against AGENTS.md", or "are there missing tests". You run the full test-audit - skill procedure. + skill procedure. A Codex dispatcher includes `Attribution model ID: ` in + this standalone prompt. - **Coverage gap check.** After production code changes, the user wants to know whether new functions, branches, or bug fixes have adequate test coverage โ€” and wants the missing tests written, not just reported. @@ -102,6 +104,7 @@ where `` identifies the exact runtime model used for the footer and an `Ship-Check` commit trailer. Resolve it in this order: 1. Use `Attribution model ID: ` from the dispatch prompt verbatim. + Placeholder text is not an ID; treat it as a missing line. 2. Without that line, a Claude agent may use the family ID from its system context, such as `claude-opus-4-6`; omit context-window and dated-build suffixes. 3. An OpenCode agent may use the exact provider/model ID exposed by its runtime. diff --git a/plugins/ship-check/skills/bug-check/SKILL.md b/plugins/ship-check/skills/bug-check/SKILL.md index 68bf362..4c15396 100644 --- a/plugins/ship-check/skills/bug-check/SKILL.md +++ b/plugins/ship-check/skills/bug-check/SKILL.md @@ -541,6 +541,7 @@ Replace `OWNER_REPO` and `PR_NUMBER` with values from the dispatch prompt. Repla `MODEL_ID` with the exact runtime model: 1. Use `Attribution model ID: ` from the dispatch prompt verbatim. + Placeholder text is not an ID; treat it as a missing line. 2. Without that line, a Claude agent may use its system-context family ID, and an OpenCode agent may use its runtime-exposed provider/model ID. 3. An inline standalone run may use the current session's verified exact model source. diff --git a/plugins/ship-check/skills/code-quality/SKILL.md b/plugins/ship-check/skills/code-quality/SKILL.md index 6d1c3cc..df1215c 100644 --- a/plugins/ship-check/skills/code-quality/SKILL.md +++ b/plugins/ship-check/skills/code-quality/SKILL.md @@ -552,6 +552,7 @@ Replace `OWNER_REPO` and `PR_NUMBER` with values from the dispatch prompt. Repla `MODEL_ID` with the exact runtime model: 1. Use `Attribution model ID: ` from the dispatch prompt verbatim. + Placeholder text is not an ID; treat it as a missing line. 2. Without that line, a Claude agent may use its system-context family ID, and an OpenCode agent may use its runtime-exposed provider/model ID. 3. An inline standalone run may use the current session's verified exact model source. diff --git a/plugins/ship-check/skills/pr-review/SKILL.md b/plugins/ship-check/skills/pr-review/SKILL.md index bbcf322..f70c858 100644 --- a/plugins/ship-check/skills/pr-review/SKILL.md +++ b/plugins/ship-check/skills/pr-review/SKILL.md @@ -273,6 +273,7 @@ Replace `OWNER_REPO` and `PR_NUMBER` with values from the dispatch prompt. Repla `MODEL_ID` with the exact runtime model: 1. Use `Attribution model ID: ` from the dispatch prompt verbatim. + Placeholder text is not an ID; treat it as a missing line. 2. Without that line, a Claude agent may use its system-context family ID, and an OpenCode agent may use its runtime-exposed provider/model ID. 3. An inline standalone run may use the current session's verified exact model source. diff --git a/plugins/ship-check/skills/ship-check/SKILL.md b/plugins/ship-check/skills/ship-check/SKILL.md index 489f312..25046e1 100644 --- a/plugins/ship-check/skills/ship-check/SKILL.md +++ b/plugins/ship-check/skills/ship-check/SKILL.md @@ -78,10 +78,11 @@ Ship-Check: ยท Add this instruction to each phase dispatch prompt (phases 1, 3-5 โ€” Phase 2 does not commit): -``` -For Codex agent mode, include this line with the exact model passed to spawn: -Attribution model ID: EXACT_CODEX_MODEL_ID +For Codex agent mode, prepend the literal prefix `Attribution model ID: ` followed by +the exact model passed to spawn, for example `Attribution model ID: gpt-5.6-terra`. +Never dispatch an unexpanded placeholder. +``` When committing, add this trailer to every commit message (after the body, before any trailers the harness adds): Ship-Check: PHASE_NAME ยท YOUR_MODEL_ID @@ -379,10 +380,9 @@ ignores model overrides; a Codex fork prompt still carries the root's verified The dispatch templates below also omit the `Ship-Check` commit trailer instruction. Append it to every phase that commits (phases 1, 3-5): -``` -For Codex agent mode, include: -Attribution model ID: EXACT_CODEX_MODEL_ID +For Codex agent mode, also prepend the populated attribution line described above. +``` When committing, add this trailer to every commit message: Ship-Check: PHASE_NAME ยท YOUR_MODEL_ID Use the runtime-specific model label from the Attribution section for YOUR_MODEL_ID. diff --git a/plugins/ship-check/skills/test-audit/SKILL.md b/plugins/ship-check/skills/test-audit/SKILL.md index e8f96c4..d232ea5 100644 --- a/plugins/ship-check/skills/test-audit/SKILL.md +++ b/plugins/ship-check/skills/test-audit/SKILL.md @@ -413,6 +413,7 @@ Replace `OWNER_REPO` and `PR_NUMBER` with values from the dispatch prompt. Repla `MODEL_ID` with the exact runtime model: 1. Use `Attribution model ID: ` from the dispatch prompt verbatim. + Placeholder text is not an ID; treat it as a missing line. 2. Without that line, a Claude agent may use its system-context family ID, and an OpenCode agent may use its runtime-exposed provider/model ID. 3. An inline standalone run may use the current session's verified exact model source. From a525756edae573eaa294f372e784ceaeb9d1976b Mon Sep 17 00:00:00 2001 From: Tanisha Aberdeen <32620895+aliasunder@users.noreply.github.com> Date: Mon, 21 Sep 2026 18:49:29 -0400 Subject: [PATCH 3/3] fix(ship-check): pass model in comment mode --- plugins/ship-check/skills/ship-check/SKILL.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/plugins/ship-check/skills/ship-check/SKILL.md b/plugins/ship-check/skills/ship-check/SKILL.md index 25046e1..bef14c4 100644 --- a/plugins/ship-check/skills/ship-check/SKILL.md +++ b/plugins/ship-check/skills/ship-check/SKILL.md @@ -131,6 +131,9 @@ reviewing a PR it isn't responsible for. When `--comment` is active, prepend this to every phase's dispatch prompt: +In Codex agent mode, prepend the populated `Attribution model ID` line from the +Attribution section before this block. + ``` COMMENT MODE: Do NOT edit any files, commit, or push. Instead, collect all findings and post them as a single GitHub PR review with inline comments. Follow the "Comment @@ -185,9 +188,9 @@ Before dispatching Phase 1, resolve the **repo identifier** for `gh api` calls: gh repo view --json nameWithOwner -q .nameWithOwner ``` -Pass it as `Repo: owner/repo` in the dispatch prompt. In comment mode, agents -include their own runtime-specific model label in the footer โ€” -the orchestrator does not need to look it up or pass it. +Pass it as `Repo: owner/repo` in the dispatch prompt. Claude and OpenCode agents use +their runtime-specific model source for the footer. In Codex agent mode, the +orchestrator also passes the exact attribution model ID resolved before Phase 1. ## Local review mode (`--local`)