Skip to content

feat: prefer a cross-vendor advisor at fresh-eyes checkpoint sites fleet-wide#934

Merged
kyle-sexton merged 7 commits into
mainfrom
feat/933-advisor-escalation
Jul 22, 2026
Merged

feat: prefer a cross-vendor advisor at fresh-eyes checkpoint sites fleet-wide#934
kyle-sexton merged 7 commits into
mainfrom
feat/933-advisor-escalation

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Fleet-wide escalation of the fresh-eyes checkpoint rule: at sites whose verdict is high-stakes and where correlated blind spots are the risk, prefer a cross-vendor advisor when one is installed AND its documented surface can take the judged artifact, invoked per that plugin's own docs — with the fresh-context same-vendor subagent as the stated fallback. Sites never restate the advisor's command flags (three review rounds showed per-site --wait/--base/diff-semantics examples drifting against the surface the advisor owns); review:fanout remains the one concrete codex integration, since it resolves its own diff base.

  • docs/PLUGIN-PHILOSOPHY.md "Fresh-eyes checkpoints" gains the independence-ladder escalation rule; sites carry only the gate+target+fallback sentence (rule stated once).
  • Seam-phrasing conformant (gate + fallback + ownership framing). verification:confirm's canonical site is aligned to the same capability-generic shape; fanout, implement→confirm, and debug env-hook untouched.
  • One sentence per skill at the primary delegation-instructing site; patch bump + CHANGELOG ### Changed entry per touched plugin.

Touched plugins (all patch bumps)

planning 0.24.4, implementation 0.7.8, review 0.14.11, codebase-health 0.7.2, claude-config 0.9.2, work-items 0.21.2 (0.21.1 taken by #922 on main; resolved in merge), re-anchor 0.5.1, docs-hygiene 0.8.4, verification 0.3.4 (canonical confirm site gains --wait, same defect as the Codex P2 finding), session-flow 0.13.1, playbooks 0.3.2

Two site-level judgment calls worth review attention: session-flow:orchestrate's sentence names no command — imperative 3 is exported verbatim into a model-/tool-agnostic worker brief where a plugin command cannot resolve (gate + cross-vendor target + fallback kept, example dropped); playbooks:fable-5 was aligned at its SSOT (context/orchestration.md, which already named a cross-vendor reviewer) rather than touched at its two pointer sites.

re-anchor gets ONE sentence in the shared method doc (context/re-anchor-audit-correct.md step 3) — all eight skills read it at invocation; per-skill restatement would be the second copy the point-dont-copy discipline prohibits. The -deep fan-out skills (do-your-research-deep, recheck-against-upstream-deep) declare deltas replacing step 3 with throttled per-claim fan-outs the single-verdict escalation does not govern — skipped, no contradiction.

Deliberate skips (audit rows excluded)

  • recheck-against-upstream — doc-source independence dominates model independence at that site.
  • session-flow:running-retro — own-session transcript analysis; cross-model value weak.
  • Deterministic-gate exemptions (tidy, batch-simplify, planning design gates) — a script's pass/fail needs no advisor.
  • naming RETRACTED after Codex review: the codex plugin ships only diff-review surfaces, so a cross-vendor GENERATOR preference is uninstantiable today. Deferred with trigger: a generation-capable cross-vendor adapter ships.

Method caveat

Site list from a fleet sweep (single Explore agent, self-declared completeness caveat) over all plugins for author-verifier / plan-attacker / self-grade delegation sites. Sites the sweep missed are follow-up filings, not silent scope.

Related

Closes #933

🤖 Generated with Claude Code

…eet-wide

PLUGIN-PHILOSOPHY "Fresh-eyes checkpoints" gains the independence-ladder
escalation rule: at high-stakes checkpoint sites, prefer a cross-vendor
advisor when one is installed (e.g. the OpenAI Codex plugin's
/codex:review), with the fresh-context same-vendor subagent as the
stated fallback. Eleven plugins ship one gate+fallback sentence at each
primary delegation-instructing site, modeled on verification:confirm's
already-shipped canonical phrasing; patch bump + CHANGELOG entry each.

Closes #933

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3e1331a6bb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review/skills/quality-gate/context/self.md Outdated
Bare /codex:review can background and return only a status handle, so a
verdict flow would silently complete without the preferred reviewer's
findings (fanout already documents --wait as load-bearing). Applies to
every command-bearing advisor site in this change and, same defect, to
the canonical verification:confirm site (0.3.4).

Addresses the Codex P2 review finding on quality-gate self mode.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dce9092006

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review/skills/quality-gate/context/self.md Outdated
work-items CHANGELOG: both sides released 0.21.1 — main's #922 keeps it;
this branch's advisor entry moves to 0.21.2 with the matching
plugin.json bump.
@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 4m 28s —— View job


PR Review

  • Gather context and understand the request
  • Read key changed files and the diff
  • Review for correctness and consistency across fleet
  • Check open Codex finding (--base flag)
  • Verify phrasing conventions and seam-phrasing discipline

Overall the fleet-wide escalation pattern is clean and well-disciplined: the independence-ladder doctrine lands once in docs/PLUGIN-PHILOSOPHY.md, each site carries only the gate+target+fallback sentence, and the deliberate deviations (session-flow:orchestrate names no command; naming uses generator framing; re-anchor writes one sentence at the SSOT) are sound. The --wait fix from dce9092 is correctly propagated to every command-bearing site. Three items below are worth attention before merge.


Finding 1 — Unresolved Codex P2: missing --base at quality-gate/context/self.md (P2)

The second Codex review finding remains open. quality-gate/context/self.md now says:

e.g. the OpenAI Codex plugin's /codex:review --wait or /codex:adversarial-review --wait

The SKILL.md "Shared inputs" section already resolves the review diff base (git merge-base origin/<baseRefName> HEAD for a PR, fallback chain otherwise) — the subagent prompt template at self.md line 29 even names it: "the dispatcher substitutes the resolved review diff base from SKILL.md 'Shared inputs'." But the new cross-vendor instruction does not carry that resolved base to Codex.

review:fanout documents exactly why this matters:

pass --base <review-base> … so Codex diffs the same change set as every other dispatched surface — without it Codex auto-picks the working tree or default branch and reviews a different diff on any PR whose base is not the default branch.

The fix is the same as fanout's: e.g. … /codex:review --wait --base <review-diff-base> (where <review-diff-base> is the value resolved from SKILL.md "Shared inputs"). The fanout coverage note (committed diff vs dirty tree) also applies.

plugins/review/skills/quality-gate/context/self.md line 5Fix this →


Finding 2 — session-flow/skills/workflow/context/steps.md names /codex:review --wait without --base in a diff-review context (low)

plugins/session-flow/skills/workflow/context/steps.md line 72:

- For a high-stakes diff, prefer a cross-vendor reviewer when one is installed — e.g. the OpenAI
  Codex plugin's `/codex:review --wait` — with the fresh-context same-vendor subagent as the fallback,
  never a route to a command that may not resolve

This is a guide/checklist (not a SKILL.md-orchestrated flow with a pre-resolved diff base), so the severity is lower than self.md. But it names a "high-stakes diff" context and a Codex command without noting the --base requirement. A reader following this guide on a non-default-base PR would hit the same silent wrong-diff failure. Even a brief parenthetical — "carry the resolved PR base via --base if one exists" — would close the gap without disrupting the line's concision.


Finding 3 — Incidental removal of commit-convention row in PLUGIN-PHILOSOPHY.md (observation)

docs/PLUGIN-PHILOSOPHY.md drops the Convention registry row:

| Commit-convention enforcement seam | [`docs/conventions/commit-convention/`](...) |

The target directory docs/conventions/commit-convention/ does not exist in the repo, so removing the dead link is correct. This deletion isn't mentioned in the PR description and appears to be either a merge side-effect or incidental cleanup — worth confirming it's intentional rather than an accidental edit during the merge of origin/main.


What's clean

  • Seam-phrasing discipline: every new site carries the canonical gate + target + fallback shape, and the doc-level rule is stated once in PLUGIN-PHILOSOPHY.md per the point-don't-copy discipline.
  • session-flow:orchestrate (imperative 3): correctly names no command — the brief is model-agnostic and a plugin command would not resolve there.
  • naming:name-it-better: correctly uses generator framing rather than reviewer framing, with appropriate fallback. No --wait needed (generation path, not synchronous review).
  • re-anchor SSOT placement: one sentence in context/re-anchor-audit-correct.md, all eight skills read it at invocation; per-skill restatement would be a second copy.
  • playbooks:fable-5 aligned at SSOT (context/orchestration.md) not at its two pointer sites — correct per the single-copy discipline.
  • --wait fix (dce9092): every command-bearing site now uses the synchronous form.
  • Deliberate skips (recheck-against-upstream, running-retro, deterministic gates) are well-reasoned and documented.

@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 3m 18s —— View job


Security Review

  • Gather context
  • Fetch PR diff
  • Read changed files for security issues
  • Report findings

This PR is pure documentation/instruction text — Markdown skill files and plugin.json version bumps. No GitHub Actions workflow files are touched, no executable code is added, and no secrets or credentials appear in the diff. The attack surface is narrow: the primary concerns involve how the new cross-vendor reviewer instructions could be followed in ways that undermine the review integrity they are designed to provide.


IMPORTANT — Missing --base <review-base> at all new cross-vendor advisor sites

Confidence: HIGH

The existing review:fanout skill (unchanged by this PR) documents the requirement explicitly at SKILL.md line 88:

pass --base <review-base> carrying this skill's resolved review diff base ("Shared inputs") so Codex diffs the same change set as every other dispatched surface — without it Codex auto-picks the working tree or default branch.

The fix commit dce9092 addressed the --wait omission raised by the first Codex review comment, but none of the new advisor invocation sites received --base. Every new site prescribes /codex:review --wait or /codex:adversarial-review --wait without a base argument:

Risk: At PR review sites (quality-gate, verify:confirm, implement-dispatch phase gates), Codex auto-selects the working-tree or default-branch diff rather than the PR's resolved base. An agent following these instructions can receive a "clean" Codex verdict on a change set that does not match the diff actually being gated. The intent of the fresh-eyes escalation is to provide an independent, correlated-blind-spot-free second opinion; without --base alignment, that independence is on the wrong artifact. False confidence in the review verdict is the resulting security property degradation — particularly at quality-gate:self which governs PR mergeability decisions. The non-PR sites (plan stress-test, re-anchor, docs-hygiene derivability) are lower severity since their diffs are typically in-session working trees with no divergent base.

Note: The verification:confirm site adds --wait but still omits --base in both the old and new text (the existing site had neither). The docs-hygiene:audit-derivability and docs-hygiene:compress sites reference a document or compressed file, not a PR diff, so --base is less applicable there — but they still call /codex:review --wait and the mismatch risk is different from the PR review sites.

Fix this →


SUGGESTION — Plugin identity is asserted by name alone; namespace collision could misdirect advisor calls

Confidence: PLAUSIBLE

The new instructions reference "the OpenAI Codex plugin" exclusively by its command names (/codex:review, /codex:adversarial-review). The review:fanout skill identifies it by its namespaced install id codex@openai-codex; the command prefix codex: is derived from that install name. If a consumer installs any other plugin under the name codex, that plugin would receive the delegated review calls. The fresh-eyes escalation would then route diffs — potentially containing confidential code — to an unintended external recipient while appearing to satisfy the cross-vendor independence requirement. The attacker precondition (control over plugin installation in the consumer's environment) is significant, and this is bounded by whatever namespacing guarantees the Claude Code plugin system enforces. Worth noting as a defense-in-depth gap, particularly given that these instructions are now fleet-wide across 11 plugins and govern high-stakes review gates.


No other security issues found

No GitHub Actions workflow files were changed. No secrets, credentials, or tokens appear in the diff. No command injection surfaces exist (all changes are static instruction text, not dynamically constructed shell commands or template strings). No path traversal, SQL injection, or XSS surfaces. No pull_request_target or workflow_run patterns. No permission widening in workflow configurations. No new dependency pins loosened or unpinned.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5e19ad8e8a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/naming/skills/name-it-better/SKILL.md Outdated
@kyle-sexton
kyle-sexton enabled auto-merge (squash) July 22, 2026 03:14
…aming generator escalation

Diff-review advisor sites (quality-gate self, implement-dispatch,
fable-5 verification, workflow review stage, verification:confirm) now
instruct passing the resolved diff base via --base, mirroring fanout's
load-bearing flag — without it Codex auto-picks the working tree or
default branch and reviews a different change set.

naming reverted to 0.3.0: the codex plugin ships only diff-review
surfaces, so a cross-vendor GENERATOR preference is uninstantiable
today. Deferred with trigger: a generation-capable cross-vendor adapter
ships.

Addresses the two Codex P2 findings.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 18s —— View job


PR Review — follow-up on commit dc3a8d9

  • Read the new diff to understand what changed
  • Verify --base fix applied correctly at diff-review sites
  • Check naming generator escalation retraction
  • Review remaining open findings from prior review
  • Final assessment

Commit dc3a8d9 addresses both open Codex P2 findings. Here's the full accounting.


Finding 1 (P2) — quality-gate:self missing --baseCLOSED

plugins/review/skills/quality-gate/context/self.md now reads:

e.g. the OpenAI Codex plugin's /codex:review --wait or /codex:adversarial-review --wait, passing the resolved diff base via --base

The same fix lands at all five sites the commit classifies as diff-review contexts:

Site Fixed
review/skills/quality-gate/context/self.md
implementation/skills/implement-dispatch/SKILL.md
playbooks/skills/fable-5/context/orchestration.md
session-flow/skills/workflow/context/steps.md
verification/skills/confirm/SKILL.md

The phrasings are consistent and mirror review:fanout's load-bearing flag pattern.


Finding 2 (low) — session-flow/steps.md without --baseCLOSED

The line now reads "passing the stage's resolved diff base via --base" — slightly vaguer than the SKILL.md sites (those say "the resolved diff base" with a known resolution path in Shared Inputs), but for a guide/checklist context this level of instruction is proportionate.


Naming generator escalation retraction → CLOSED

naming is reverted to 0.3.0. The SKILL.md cross-vendor generator instruction is removed, the CHANGELOG entry is removed, and the plugin.json version is back to 0.3.0. The Codex P2 finding (naming a command that doesn't exist in the Codex plugin's exposed surface) is correctly resolved. The commit message records the trigger condition for re-opening: "a generation-capable cross-vendor adapter ships."


Remaining sites without --base — scoping is correct

The prior security review flagged 13 sites; this commit addressed 5. The 8 remaining sites are not diff-review contexts, so --base is inapplicable to them:

Site Context — why --base doesn't apply
planning/skills/plan/SKILL.md Codex reviews a plan artifact, not a PR diff
planning/skills/devils-advocate/SKILL.md Same — plan artifact or incumbent identity
claude-config/skills/audit-instructions/SKILL.md Codex refutes an instruction-culling proposal (no diff base)
codebase-health/skills/audit/SKILL.md Codex re-verifies a codebase health finding set
work-items/reference/pipeline-shape.md Abstract pipeline description; concrete --base lives in the pointed-to verification:* skills (now fixed)
re-anchor/context/re-anchor-audit-correct.md Working-tree re-derivation; no PR diff base to resolve
docs-hygiene/skills/audit-derivability/SKILL.md Spot-testing document derivability from exploration (noted as less applicable in the security review)
docs-hygiene/skills/compress/SKILL.md Reviewing semantic drift in compressed content, not a PR diff

The commit's scope decision ("diff-review advisor sites") is the correct categorization.


Finding 3 — Incidental commit-convention row removal → OBSERVATION, UNCHANGED

The row pointing to docs/conventions/commit-convention/ (a directory that doesn't exist in the repo) was removed in the merge of origin/main. This appears deliberate — the dead pointer is gone. Still not mentioned in the PR description; still worth confirming intentional if not already done.


Remaining open observation (from security review)

The namespace-collision risk (any plugin installed under the name codex receives these delegated calls) is still a latent gap, bounded by whatever plugin-system namespacing guarantees exist. It's unchanged by this commit and remains low-priority — only a consumer who installs a rogue plugin named codex is exposed.


Summary

Both Codex P2 findings are closed by dc3a8d9. The --base fix is consistent and correctly scoped to PR-diff contexts. The naming revert is clean and well-reasoned. The PR is in good shape for merge.

@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 4m 4s —— View job


Security Review

  • Gather context and understand the request
  • Fetch PR diff
  • Read changed files for security issues
  • Report findings

This PR is pure documentation/instruction text — Markdown skill files and plugin.json version bumps. No GitHub Actions workflow files are touched, no executable code is added, and no secrets or credentials appear in the diff. The two findings below concern how the new cross-vendor reviewer instructions are followed at runtime.

Previously flagged issues now resolved at HEAD (dc3a8d9):

  • --wait added at all command-bearing advisor sites ✓
  • --base added at diff-review sites (quality-gate:self, verification:confirm, implement-dispatch, fable-5 orchestration, session-flow:workflow steps) ✓
  • Naming escalation retracted (Codex ships only diff-review surfaces, not a generation adapter) ✓

SUGGESTION — /codex:review invoked for semantic judgment tasks where it will auto-select the wrong artifact

Confidence: HIGH

review:fanout's SKILL.md (unchanged by this PR) documents the Codex integration's behavioral constraint explicitly at line 88:

/codex:review: read-only cross-vendor review … pass --base <review-base> … so Codex diffs the same change set … without it Codex auto-picks the working tree or default branch

/codex:review is a git-diff review surface. Four new sites in this PR route it to non-diff-review, semantic judgment tasks — there is no git diff for Codex to anchor on, so it auto-selects whatever is in the working tree. The "cross-vendor clean" verdict covers an unrelated artifact, not the question the skill asked:

  • plugins/docs-hygiene/skills/audit-derivability/SKILL.md:56 — spot-test asks "reproduce this document's conclusions from codebase exploration." Codex will instead review the current git diff. The gate's binary outcome (convergence → delete; divergence → keep) would then be derived from a verdict on an unrelated diff. A document that owns unique non-derivable facts could pass the deletion gate on a Codex "no issues" from a clean working tree.

  • plugins/docs-hygiene/skills/compress/SKILL.md:97 — asks Codex to audit semantic preservation of a document compression. Again, Codex reviews the working-tree git diff, not a document-vs-compressed comparison. A compression that silently drops load-bearing content passes the cross-vendor gate because Codex reviewed unrelated source changes.

  • plugins/claude-config/skills/audit-instructions/SKILL.md:117 — verifier is supposed to argue "would removing this instruction cause Claude to make mistakes?" The SKILL explicitly says a proposal the verifier defends is demoted to info or dropped. If Codex reviews a clean working tree and returns "no issues," a load-bearing — potentially security-relevant — instruction removal could be classified as info and excluded from the report.

  • plugins/codebase-health/skills/audit/SKILL.md:165 — false-positive gate re-verifies each finding against source of truth. Codex's "no findings" from a git diff is not the same as confirming a claim in a health audit finding against the live codebase.

The fallback path (fresh-context same-vendor subagent) is correctly stated at all four sites and IS appropriately targeted. The cross-vendor escalation path is what's broken — it creates false confidence in an independent opinion that covered the wrong artifact. The fix would be to either (a) scope the Codex invocation to a specific target file, branch, or question via the appropriate Codex arguments, or (b) restrict the cross-vendor example to diff-review-capable sites only and note the mismatch here.


SUGGESTION — Plugin namespace collision is now fleet-wide across 11 plugins

Confidence: PLAUSIBLE

The new instructions reference the cross-vendor advisor exclusively by the codex: command prefix at 11+ plugin SKILL.md files. The review:fanout skill identifies the intended plugin by its install id (codex@openai-codex); the command prefix is derived from that name. If a consumer has any plugin installed under the codex namespace that is not the genuine codex@openai-codex plugin, every fresh-eyes escalation site fleet-wide silently routes its high-stakes review delegation — including diffs and instruction content — to that plugin's backend. The escalation appears to satisfy the cross-vendor independence requirement while delivering verdicts from an unintended (potentially external or untrusted) recipient.

This was present in the prior revision of this PR. The precondition for exploitation is control over the consumer's plugin installation environment, which constrains severity. Noting it because the blast radius is now substantially larger (one site in the original PR → 11+ sites after this fleet-wide rollout).


No other security issues found

No workflow files changed. No secrets, credentials, or tokens in the diff. No command injection (all changes are static instruction text). No pull_request_target, workflow_run, script injection through github context, or permission-widening patterns. No dependency pins loosened or new unpinned actions.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dc3a8d9910

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/verification/skills/confirm/SKILL.md Outdated
Comment thread plugins/review/skills/quality-gate/context/self.md Outdated
Comment thread plugins/planning/skills/plan/SKILL.md Outdated
…ation

Three review rounds showed per-site command examples drifting against
the surface the advisor plugin owns (--wait, --base, committed-only
diffs, non-diff artifacts). Sites now name the capability and the
fallback only — gate extended with artifact fit ("when its documented
surface can take this artifact, invoked per its own docs") — and the
philosophy records the rule: a checkpoint site never restates the
advisor's command flags. fanout remains the one concrete codex
integration; it resolves its own diff base, so its flags are
well-formed where they live.

Addresses the three round-3 Codex P2 findings.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 7s —— View job


PR Review — commit 1ce76f0

  • Gather context and understand the request
  • Read HEAD commit diff to understand what changed
  • Read key changed files at current HEAD
  • Assess open Codex P2 findings against current state
  • Review for correctness, security, and alignment with CLAUDE.md
  • Post findings

Commit 1ce76f0 ("fix: make advisor sites capability-generic; advisor plugin owns invocation") is a root-cause fix rather than another patch: instead of adding more flag arguments (--wait, --base) to each site, it removes all flag-level specificity and establishes the durable principle that checkpoint sites name the capability, not the invocation mechanics.


All outstanding Codex P2 findings closed by this commit

The prior Codex P2 findings (from the dc3a8d9 review round) were:

Finding Resolution
verification:confirm — no review base resolved before --base required Flags removed; "invoked per its own docs" delegates base selection to the advisor
quality-gate:self — uncommitted edits dropped from preferred review "when its documented surface can take this artifact" gates capability-incompatible surfaces to fallback
planning:plan — plan stress-test routed to a diff-review surface Same capability gate; advisor's docs govern what artifacts /codex:review accepts
Non-diff-review sites (docs-hygiene, codebase-health, claude-config) Same gate resolves the wrong-artifact concern across all four

The prior security finding — "non-diff-review sites auto-select wrong artifact" — is resolved by the new gating clause.


What's clean

Architectural principle established once. docs/PLUGIN-PHILOSOPHY.md now states:

Invocation mechanics — synchronous waiting, diff-base selection, which artifacts a surface can judge — are the advisor plugin's own documentation's concern: a checkpoint site names the capability and the fallback, never the advisor's command flags, which drift against the surface their owner evolves.

This prevents the flag-omission recurrence pattern that produced three rounds of P2 findings. The principle is correctly placed at the doctrine level, not replicated at sites.

"When its documented surface can take this artifact" gating. This clause is consistently applied at all new sites that are not guaranteed diff-review contexts (claude-config, codebase-health, docs-hygiene, planning, re-anchor, work-items). Diff-review sites that previously had --base (quality-gate, verification:confirm, implement-dispatch, fable-5, session-flow:steps) use the same gating, which is equally sound — the Codex plugin's own docs state when --base is required.

25 files updated consistently. Every site in the fleet carries the same capability-generic phrasing. The CHANGELOG entries are updated to match. No sites carry the old command-flag phrasing.

verification:confirm CHANGELOG is accurate. The 0.3.4 entry correctly notes that the site "no longer names advisor commands" and that "per-site command flags drift against the surface the advisor owns" — this matches the commit's stated design intent.


Observation — session-flow/steps.md prose wrapping

plugins/session-flow/skills/workflow/context/steps.md line 288–290

The new line is unwrapped compared to every other advisor-escalation sentence in the fleet:

- For a high-stakes diff, prefer a cross-vendor reviewer when one is installed — e.g. the OpenAI Codex plugin, when its documented surface can take this artifact, invoked per its own docs — with the fresh-context same-vendor subagent as the fallback,
  never a route to a command that may not resolve

The prior revision had a natural break before "with the fresh-context…" The sentence is now a single 220-character line. This is a prose-consistency observation, not a correctness issue.


Remaining latent gap (unchanged from prior reviews)

The plugin namespace collision risk (any plugin installed under the codex namespace receives these delegated calls) is structurally unchanged — the sites still reference "the OpenAI Codex plugin" by name, not by install ID. The precondition for exploitation is control over the consumer's plugin installation. With the capability-generic phrasing this risk is no more or less exposed than it was in dc3a8d9; it's bounded by the plugin system's namespacing guarantees.


Summary

All open Codex P2 findings are resolved by 1ce76f0. The commit takes a principled architectural approach — delegating flag mechanics to the advisor plugin's own documentation — rather than patching individual omissions, which is the correct long-term fix. The session-flow/steps.md line-wrapping is a minor prose note. The PR is ready to merge on its technical merits.

@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 3m 29s —— View job


Security Review

  • Gather context and understand the request
  • Fetch PR diff (HEAD: 1ce76f0)
  • Read changed files for security issues
  • Report findings

This PR is pure documentation/instruction text — Markdown skill files and plugin.json version bumps. No GitHub Actions workflow files are touched, no executable code is added, and no secrets or credentials appear in the diff.

Issues resolved since last security review (dc3a8d91ce76f0):
The most recent commit re-derives ALL checkpoint sites to use capability-generic language rather than naming advisor commands. docs/PLUGIN-PHILOSOPHY.md lines 354–355 now state the governing principle:

"Invocation mechanics — synchronous waiting, diff-base selection, which artifacts a surface can judge — are the advisor plugin's own documentation's concern: a checkpoint site names the capability and the fallback, never the advisor's command flags, which drift against the surface their owner evolves."

This closes all three open Codex P2 findings from prior reviews:

  • --base at diff-review sites — no longer needed; no site names --base (except review:fanout, which remains the only concrete Codex integration and handles its own base resolution)
  • Wrong-artifact routing — the capability-fit gate ("when its documented surface can take this artifact") requires the invoking agent to verify artifact support before proceeding
  • Non-diff-review sites naming /codex:review — none of the updated sites name a Codex command; the pattern now only names the example plugin with an artifact-fit and invocation-docs guard

SUGGESTION — Plugin namespace collision is now fleet-wide across 11+ skill sites

Confidence: PLAUSIBLE

Every checkpoint site now says "e.g. the OpenAI Codex plugin, when its documented surface can take this artifact, invoked per its own docs." The invocation resolves at runtime by reading the installed advisor's docs — whichever plugin the agent finds in the codex (or analogous) namespace.

review:fanout/SKILL.md line 84 (the only concrete Codex integration, unchanged by this PR) identifies the intended plugin by its full install id:

codex@openai-codex

The eleven checkpoint sites added by this PR do not include that qualifier. If a consumer has any plugin installed under the codex namespace that is not codex@openai-codex, every fresh-eyes escalation site fleet-wide silently routes its high-stakes artifact — diffs, plan documents, instruction texts, codebase health findings, document derivability checks — to that plugin's backend. The cross-vendor independence goal is satisfied structurally while the actual reviewer is uncontrolled.

This was flagged in the prior security review (dc3a8d9). Commit 1ce76f0 removes the concrete command names, which reduces the direct exploitability (a rogue codex plugin would now need to document an artifact surface and have the agent believe it supports the target artifact), but does not close the namespace gap. The blast radius is 11+ sites across 10 plugins versus the single review:fanout site in the original PR.

Precondition for exploitation: control over plugin installation in the consumer's environment (install a plugin under the expected advisor namespace). This limits practical severity. The only mitigation available today without a platform-level namespace-pinning mechanism is to note the intended install id in the doctrine at PLUGIN-PHILOSOPHY.md — so the checker carries the expected identity, not just the expected capability.


SUGGESTION — Fleet-wide data egress scope is not surfaced at advisor installation

Confidence: PLAUSIBLE

When a consumer installs the OpenAI Codex plugin (or any cross-vendor advisor), high-stakes artifacts flow to the advisor's vendor at 11+ sites across 10 plugins: diffs, plan artifacts, instruction-culling proposals, codebase health findings, document derivability spot-tests, compression semantic-diff audits, re-anchor re-derivation artifacts, and orchestration verification verdicts.

A user who installs codex@openai-codex to get cross-vendor review in review:fanout receives this expanded routing — the same install flag now reaches planning, config auditing, documentation health, and session orchestration verification, all routing artifacts to OpenAI. The seam phrasing correctly uses "when one is installed" (presence-gate + fallback), but the data-egress scope of that single installation decision is not documented at the install boundary or in the plugin READMEs.

This is bounded by the user's own installation choice, so severity is low. But the intent-vs-scope gap is material: a user who audited the egress scope for review:fanout and then installed did not audit it for ten additional plugins. A ## Data egress note in the advisor plugin's README or in this marketplace's plugin-acceptance security review checklist (docs/MIGRATION-PLAYBOOK.md) would close it.


No other security issues found

No GitHub Actions workflow files were changed. No secrets, credentials, or tokens appear in the diff. No command injection surfaces exist (all changes are static instruction text). No path traversal, SQL injection, or XSS surfaces. No pull_request_target or workflow_run patterns. No permission widening. No dependency pins loosened or unpinned. The plugin.json changes are patch-version bumps only with no schema changes.

The review:fanout concrete Codex integration (with --wait and --base) is unchanged and correctly scoped to PR diff review.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1ce76f0481

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review/skills/quality-gate/context/self.md Outdated
Sites gated on installation alone while the doctrine gates on
"installed and set up" — an installed-but-unauthenticated advisor would
be selected and prompt or fail instead of falling back.

Addresses the round-4 Codex P2 finding.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 44s —— View job


Claude finished @kyle-sexton's task


PR Review — commit 96c3ad6

  • Gather context and understand the request
  • Read the new diff to understand what changed
  • Verify the set-up readiness gate is correctly applied fleet-wide
  • Check for any remaining open findings from prior reviews
  • Final assessment

Commit 96c3ad6 closes the final Codex P2 finding (round 4): sites that gated on installation alone now gate on "installed and set up", matching the doctrine in docs/PLUGIN-PHILOSOPHY.md:348. Here is the full accounting.


Round-4 Codex P2 — Set-up readiness gate → CLOSED

All 13 checkpoint sites in the fleet now read "when one is installed and set up":

Site Fixed
review/skills/quality-gate/context/self.md
verification/skills/confirm/SKILL.md
implementation/skills/implement-dispatch/SKILL.md
planning/skills/plan/SKILL.md
planning/skills/devils-advocate/SKILL.md
playbooks/skills/fable-5/context/orchestration.md
session-flow/skills/workflow/context/steps.md
claude-config/skills/audit-instructions/SKILL.md
codebase-health/skills/audit/SKILL.md
docs-hygiene/skills/audit-derivability/SKILL.md
docs-hygiene/skills/compress/SKILL.md
re-anchor/context/re-anchor-audit-correct.md
work-items/reference/pipeline-shape.md

The doctrine in docs/PLUGIN-PHILOSOPHY.md:348 already read "when one is installed and set up"; every checkpoint site now matches it. A plugin that is installed but not authenticated or configured falls through to the fresh-context same-vendor fallback, which is the correct behavior.


session-flow:orchestrate — deliberately excluded, correctly

plugins/session-flow/skills/orchestrate/SKILL.md:52 reads "when one is on hand" rather than "when one is installed and set up." This site was excluded from 96c3ad6 for the same reason the prior review accepted it: imperative 3 is exported verbatim into a model-/tool-agnostic worker brief that leaves the Claude Code environment entirely — "installed" is not the right framing outside a Claude Code context. "On hand" is a looser, tool-agnostic reading of the same availability intent. The exclusion is correct.


All four rounds of P2 findings are now closed

Round Finding Commit
1 Missing --wait for synchronous advisor invocation dce9092
2 Missing --base at diff-review sites dc3a8d9
3 Non-diff artifacts routed to git-diff-only surface; plan stress-test on diff-only surface; unresolvable --base at confirm 1ce76f0 (capability-generic re-derivation)
4 Set-up readiness gate missing from 13 checkpoint sites 96c3ad6

Latent gaps — structurally unchanged from prior reviews

Plugin namespace collision (PLAUSIBLE): Sites reference "the OpenAI Codex plugin" by command prefix (codex:), not by install id (codex@openai-codex). Any plugin installed under the codex namespace would receive delegation. Precondition: control over plugin installation. Mitigation available today: note the expected install id in the doctrine. No regression introduced by this commit.

Data egress scope (PLAUSIBLE): A consumer who installed codex@openai-codex for review:fanout now gets advisor routing at 11+ sites across 10 plugins. The expanded scope is not surfaced at the install boundary. Bounded by the user's own installation decision. A ## Data egress note in the plugin README or the MIGRATION-PLAYBOOK acceptance checklist would close it.

Both gaps are pre-existing; neither is introduced or worsened by 96c3ad6.


What's clean

  • Four rounds of P2 findings closed. The architectural decision in 1ce76f0 (capability-generic sites, invocation mechanics delegated to the advisor plugin's own docs) eliminated the recurring flag-omission failure mode. 96c3ad6 completes the last surface-level fix the approach requires.
  • Doctrine consistency. Every checkpoint site now matches the PLUGIN-PHILOSOPHY.md doctrine exactly.
  • review:fanout untouched. The one concrete Codex integration, which handles its own diff base, remains unchanged.
  • CHANGELOG entries. Touched plugins reflect the "installed and set up" alignment accurately.

Summary

All open Codex P2 findings across all four review rounds are resolved. The PR is ready to merge.

@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 31s —— View job


Security Review

  • Gather context and understand the request
  • Fetch PR diff and read changed files
  • Analyze for security vulnerabilities
  • Report findings

This PR is pure documentation/instruction text — Markdown skill files and plugin.json version bumps. No GitHub Actions workflow files are touched by this PR, no executable code is added, and no secrets or credentials appear in the diff.

Issues resolved at HEAD (96c3ad6) from prior review rounds:

  • --wait at all command-bearing sites (dce9092)
  • --base at diff-review sites (dc3a8d9)
  • ✅ Naming escalation retracted (naming reverted to 0.3.0; Codex ships no generation surface)
  • ✅ Non-diff-review sites routing /codex:review to wrong artifact (1ce76f0 — capability-generic phrasing)
  • ✅ Readiness gate ("installed and set up") at all checkpoint sites (96c3ad6)

SUGGESTION — "Invoked per its own docs" is explicit trust delegation to advisor plugin documentation, fleet-wide

Confidence: PLAUSIBLE

The architectural fix in 1ce76f0 replaced per-site command flags with "invoked per its own docs," codified at docs/PLUGIN-PHILOSOPHY.md line 353–355:

"Invocation mechanics — synchronous waiting, diff-base selection, which artifacts a surface can judge — are the advisor plugin's own documentation's concern: a checkpoint site names the capability and the fallback, never the advisor's command flags, which drift against the surface their owner evolves."

Every one of the 11+ new checkpoint sites carries this: "e.g. the OpenAI Codex plugin, when its documented surface can take this artifact, invoked per its own docs."

This is explicit trust delegation to the advisor plugin's documentation. The invoking agent must read the advisor plugin's docs in two ways: (1) to determine artifact-fit eligibility, and (2) to determine invocation mechanics. If an advisor plugin's documentation files contain adversarial content — through supply-chain compromise of that plugin, or through a consumer installing a rogue plugin under the expected namespace — the invoking agent at each of the 11+ checkpoint sites is explicitly instructed to read and follow those docs.

The prior approach (naming specific flags like --wait --base) was inadvertent defense-in-depth: it constrained what the agent could be instructed to do regardless of what the advisor plugin's docs said. The capability-generic phrasing is architecturally correct for flag drift prevention, but it trades that constraint for broader trust delegation.

Attack path: Supply-chain compromise of the advisor plugin (or installation of a rogue plugin under the codex namespace) → adversarial docs instruct the invoking agent to exfiltrate artifact content, report false verdicts, or perform unintended actions → all 11+ checkpoint sites execute those adversarial mechanics simultaneously.

Precondition: Requires control over a plugin installed in the consumer's environment. This limits practical severity. The .claude-plugin/plugin.json security review gate in docs/MIGRATION-PLAYBOOK.md already addresses egress and third-party trust for first-party plugins; noting whether the advisor's documentation files are subject to the same trust gate (or whether "invoked per its own docs" should carry a bounded-trust caveat) would close the gap.


SUGGESTION — Fleet-wide data egress scope is undisclosed at the advisor install boundary

Confidence: PLAUSIBLE

When a consumer installs any cross-vendor advisor plugin, the new fleet-wide escalation routes high-stakes artifacts to that advisor's backend from 11+ sites across 10 plugins: implementation diffs, plan artifacts, instruction-culling proposals, codebase health finding sets, document derivability spot-tests, compression semantic-diff audits, re-anchor re-derivation artifacts, orchestration verification verdicts.

A user who installs codex@openai-codex for review:fanout's single diff-review use case (the only concrete integration before this PR) implicitly opted in to that scope. After this PR, that same single installation decision now routes artifacts from 10 additional plugins. The expanded egress scope is not documented at the advisor plugin's install boundary, in the marketplace listing, or in docs/MIGRATION-PLAYBOOK.md's plugin-acceptance security review checklist.

Concrete gap: The plugin-acceptance security review checklist at docs/MIGRATION-PLAYBOOK.md asks reviewers to audit "data egress" for each plugin. A codex@openai-codex audit pre-review:fanout cleared egress for diff review. Post-this-PR, the same installation activates egress for planning, config auditing, documentation health, implementation verification, and orchestration — without re-triggering the egress gate. A ## Data egress section in the advisor plugin's documentation enumerating the artifact types it may receive (post-marketplace fleet adoption) would surface this to consumers before installation.


SUGGESTION — Plugin namespace collision is now fleet-wide

Confidence: PLAUSIBLE

Previously flagged in prior reviews; unchanged by this PR. Documenting for completeness since blast radius grew substantially.

review:fanout/SKILL.md line 84 (unchanged) identifies the intended plugin as codex@openai-codex. The 11+ new checkpoint sites reference "the OpenAI Codex plugin" by example only — no install-ID qualifier. The invocation resolves at runtime by finding the advisor in whatever namespace the consumer has configured. A plugin installed under the codex (or analogous) namespace that is not codex@openai-codex receives high-stakes artifact delegation fleet-wide while appearing to satisfy the cross-vendor independence requirement.

One mitigating change from prior review: The capability-fit gate ("when its documented surface can take this artifact") means a rogue plugin would also need to document artifact support for each site type. This slightly raises the bar for a rogue plugin to successfully intercept all 11 sites. The risk is still latent and bounded by consumer plugin installation practices.


No other security issues found

No GitHub Actions workflow files were changed by this PR (the .github/workflows/ci.yml and lib/ changes visible in the raw git diff belong to the d115cbf merge-base commit on main, not to this PR's commits). No secrets, credentials, or tokens appear in the PR's changes. No command injection surfaces (all changes are static instruction text, not dynamically constructed shell commands or template strings). No path traversal, SQL injection, or XSS surfaces. No pull_request_target or workflow_run patterns. No permission widening. No dependency pins loosened or new unpinned actions. The plugin.json changes are patch-version bumps only with no schema changes.

The review:fanout concrete Codex integration (with --wait and --base) is unchanged and correctly scoped to PR diff review.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 96c3ad6730

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/session-flow/skills/orchestrate/SKILL.md Outdated
…visor line

The exported imperative gated on "on hand" alone; an unauthenticated or
artifact-unfit advisor would be selected instead of the mandatory
fresh-context fallback. Now "set up and able to judge this artifact",
still naming no command (the brief is exported into tool-agnostic
contexts).

Addresses the round-5 Codex P2 finding.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 54s —— View job


Claude finished @kyle-sexton's task


PR Review — commit 9218ec4

  • Gather context and understand the request
  • Read the final commit diff to understand what changed
  • Verify session-flow:orchestrate fix for readiness + artifact-fit gate
  • Confirm all prior Codex P2 findings remain closed at HEAD
  • Final assessment and review

Commit 9218ec4 ("fix: readiness and artifact-fit gate on orchestrate's export-bound advisor line") addresses the round-5 Codex P2 finding. Here is the full accounting.


Round-5 Codex P2 — orchestrate imperative 3 set-up gate → CLOSED

plugins/session-flow/skills/orchestrate/SKILL.md line 52–54:

Before (96c3ad6):

prefer a different-vendor advisor when one is on hand — its blind spots are uncorrelated with yours — with the fresh-context same-vendor verifier as the fallback.

After (9218ec4):

prefer a different-vendor advisor when one is set up and able to judge this artifact — its blind spots are uncorrelated with yours — with the fresh-context same-vendor verifier as the fallback.

The fix correctly incorporates both the readiness gate ("set up") and the artifact-fit gate ("able to judge this artifact") without naming a command — appropriate for the tool-agnostic export context where "installed" has no meaning outside Claude Code. The phrasing intentionally diverges from the other 13 sites' "installed and set up" to preserve the model-/tool-agnostic brief contract; this is the right trade-off.


All five rounds of Codex P2 findings are now closed

Round Finding Commit
1 Missing --wait for synchronous advisor invocation dce9092
2 Missing --base at diff-review sites dc3a8d9
3 Non-diff artifacts routed to git-diff-only surface; plan stress-test on diff-only surface; unresolvable --base at confirm 1ce76f0 (capability-generic re-derivation)
4 Set-up readiness gate missing from 13 checkpoint sites 96c3ad6
5 orchestrate imperative 3 gated on "on hand" only — missing readiness + artifact-fit 9218ec4

Observation — CHANGELOG for session-flow 0.13.1 predates the round-5 fix

The 0.13.1 CHANGELOG entry for orchestrate describes the tool-agnostic, no-command nature of the site but doesn't mention the "set up and able to judge this artifact" gate that 9218ec4 adds. The entry isn't incorrect — it just omits the gate condition. A one-phrase addendum ("presence-gated on readiness and artifact fit") would make the CHANGELOG accurately reflect HEAD, but this is cosmetic and not a merge blocker.


Observation — imperative 7 still uses "on hand" for conditions calibration

orchestrate/SKILL.md line 67: whether a capable advisor/verifier is on hand is a calibration condition (sizing input), not a delegation gate. "On hand" is appropriate here — it describes a factor to weigh in sizing decisions, not an instruction to select an unverified advisor. Correctly untouched.


Remaining latent observations (structurally unchanged)

Plugin namespace collision (PLAUSIBLE): Sites reference "the OpenAI Codex plugin" by command prefix, not by install id (codex@openai-codex). A plugin installed under the codex namespace that is not the genuine plugin would receive fleet-wide delegation. Precondition: control over consumer plugin installation. No regression from this commit.

Data egress scope (PLAUSIBLE): A consumer who installed codex@openai-codex for review:fanout now gets advisor routing at 11+ sites across 10 plugins. The expanded egress scope is not surfaced at the install boundary. Bounded by the user's own installation decision.

Neither gap is introduced or worsened by 9218ec4.


Summary

All five rounds of Codex P2 findings are closed. The final commit is a clean, minimal fix that correctly aligns the orchestrate export-bound site with the fleet-wide readiness + artifact-fit gate, preserving its tool-agnostic invariant. The PR is ready to merge.

@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 51s —— View job


Security Review — commit 9218ec4

  • Gather context and read the new diff
  • Read changed files at HEAD
  • Assess open findings from prior rounds against current state
  • Report findings

This PR is pure documentation/instruction text — Markdown skill files and plugin.json version bumps. No GitHub Actions workflow files are touched, no executable code is added, and no secrets or credentials appear in the diff.

Issues resolved across all five Codex review rounds:

  • --wait at command-bearing sites (dce9092)
  • --base at diff-review sites (dc3a8d9)
  • ✅ Naming escalation retracted (dc3a8d9)
  • ✅ Non-diff-review sites routing to wrong artifact via /codex:review — capability-generic re-derivation (1ce76f0)
  • ✅ Readiness gate ("installed and set up") across all checkpoint sites (96c3ad6)
  • ✅ Export-bound orchestrate site gating on "set up and able to judge this artifact" (9218ec4)

What 9218ec4 changes and its security effect

plugins/session-flow/skills/orchestrate/SKILL.md imperative 3 now reads:

prefer a different-vendor advisor when one is set up and able to judge this artifact

The prior "on hand" wording would have selected an unauthenticated or artifact-unfit advisor in the worker brief environment, where the fallback (fresh-context same-vendor verifier) is the correct behavior when the advisor cannot satisfy the gate. The new wording carries the readiness + artifact-fit conditions that every other checkpoint site already carried. Notably, this site correctly names no specific plugin or command — the brief is exported verbatim into model-/tool-agnostic worker contexts where a plugin command cannot resolve; naming no plugin also sidesteps the namespace-collision risk present at the other sites for this one export path.


Persistent latent gaps — unchanged from prior rounds

The three pre-existing gaps flagged in prior security reviews are structurally unchanged by this commit. They are not introduced or worsened here.

SUGGESTION — Plugin namespace collision, fleet-wide
Confidence: PLAUSIBLE

Eleven checkpoint sites reference "the OpenAI Codex plugin" by example. review:fanout/SKILL.md line 84 (the only concrete integration, unchanged) identifies it as codex@openai-codex; the checkpoint sites do not carry that qualifier. A consumer with any plugin installed under the codex namespace that is not codex@openai-codex receives high-stakes artifact delegation fleet-wide. The capability-fit gate ("when its documented surface can take this artifact") means a rogue plugin would also need to document the artifact support surface, which slightly raises the bar. Precondition: control over plugin installation in the consumer's environment. Mitigation available today without a platform-level fix: note the expected install id (codex@openai-codex) in docs/PLUGIN-PHILOSOPHY.md's doctrine paragraph, so the invoking agent carries an identity check alongside the capability check.

SUGGESTION — "Invoked per its own docs" is explicit trust delegation to advisor documentation, fleet-wide
Confidence: PLAUSIBLE

Every checkpoint site says "invoked per its own docs." If an advisor plugin's documentation is compromised (supply-chain attack on the advisor, or a rogue plugin under the expected namespace), the invoking agent at each of the 11+ sites is explicitly instructed to read and follow those docs. The prior per-site flag approach (--wait --base) was inadvertent defense-in-depth: it bounded what the agent could be instructed to do. The capability-generic architecture trades that constraint for correct flag-drift prevention. The docs/MIGRATION-PLAYBOOK.md plugin-acceptance security review already gates third-party trust and egress for first-party plugins; extending that gate to cover advisor plugin documentation — verifying that the advisor's docs are trusted before the "per its own docs" delegation fires — would close this.

SUGGESTION — Fleet-wide data egress scope undisclosed at the advisor install boundary
Confidence: PLAUSIBLE

A consumer who installed codex@openai-codex for review:fanout's single diff-review use case now gets advisor routing for planning, config auditing, documentation health, implementation verification, codebase health re-verification, compression semantic audits, re-anchor re-derivation, and orchestration verdicts — 10 additional plugins beyond the original install scope. The expanded egress is not disclosed at the install boundary, in the marketplace listing, or in docs/MIGRATION-PLAYBOOK.md's plugin-acceptance checklist. A ## Data egress section in the advisor plugin's documentation (enumerating the artifact types it may receive post-fleet adoption) and a corresponding entry in the MIGRATION-PLAYBOOK acceptance checklist for advisor plugins would surface this to consumers before installation.


No other security issues found

No GitHub Actions workflow files were changed. No secrets, credentials, or tokens appear in the diff. No command injection (all changes are static instruction text). No path traversal, SQL injection, or XSS surfaces. No pull_request_target or workflow_run patterns. No permission widening. No dependency pins loosened or new unpinned actions. The plugin.json changes are patch-version bumps only.

All five rounds of Codex P2 findings are now closed. The three remaining items above are pre-existing SUGGESTION-level gaps with a bounded precondition (consumer plugin installation control); they do not block merge.

@kyle-sexton
kyle-sexton merged commit 983a0b1 into main Jul 22, 2026
25 checks passed
@kyle-sexton
kyle-sexton deleted the feat/933-advisor-escalation branch July 22, 2026 03:52
kyle-sexton added a commit that referenced this pull request Jul 22, 2026
…rine (#941)

## Summary

PLUGIN-PHILOSOPHY's design boundary is the plugin specialization of the
org-wide convention now owned by `melodic-software/standards`
`conventions/engineering/shareable-artifact-design.md` (standards #237,
merged in standards PR #238). The design boundary states the
specialization relationship; the authoritative references gain the
explicit entry. Completes the follow-up promised in #933's companion
work.

No linked issue: the tracked items (#933, standards#237) are already
closed by their own PRs; this is their promised follow-up citation.

## Related

- melodic-software/standards#237 — the convention doc this cites (closed
by standards PR #238; not closed by this PR).
- #933 — the advisor-escalation work this citation follow-up was
sequenced after (already closed by #934).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fleet: prefer a cross-vendor advisor at fresh-eyes checkpoint sites, presence-gated with fresh-context fallback

1 participant