Skip to content

Add /tempyr-spar and the interview kill-pass critic (S3a) - #58

Merged
cleak merged 2 commits into
masterfrom
feat/interview-spar
Oct 13, 2026
Merged

cleak merged 2 commits into
masterfrom
feat/interview-spar

Conversation

@cleak

@cleak cleak commented Oct 11, 2026

Copy link
Copy Markdown
Owner

Summary

This is S3a of docs/interview-challenge-research.md. It's stacked on #57 (eval harness), which is stacked on #55 (skill) and #54 (Rust). It relies on #54's graph_traverse {include_body}, interview_show {full}, and journal_search tag/reference filters.

Research and five rounds of critic review pointed the same way. Critics work best when they are independent, run in a fresh context, define their target narrowly, and get filtered deterministically. A multi-agent debate panel would not have done as well. Critics also belong in an on-demand command that can challenge any node, including ones no interview ever touched. They should not be wired into every turn.

tempyr-critic (subagent)

  • One critic. The lens is passed in:
    • kill-pass: the single assumption that kills the idea, plus the cheapest test for it. It has a mandate-focus variant.
    • pre-mortem
    • assumptions
    • outside-view
  • It sees a node packet and the settled items, never the conversation.
  • Every objection must quote at least 15 characters verbatim from its target node, so it can't get away with generic "consider security". It must not argue settled items. "No objection, here's what's well-reasoned" is a valid answer.

/tempyr-spar <node> [hops N] [lens …|panel]

  1. Builds the packet with graph_traverse. Outside-view and kill-pass packets drop solution nodes.
  2. Collects prior rebuttals and dismissals from the journal by tag and reference.
  3. Validates quotes after normalization (CRLF, whitespace, curly quotes, case). It drops anything targeting a settled item, a needs: line, or a generated block.
  4. Shows the top 3. The user answers in one line, e.g. 1a 2r launchd handles it 3d.
  5. Applies each choice:
    • Accept previews and then writes a risk or open question. If the node type has no valid edge for that, it appends to the body instead.
    • Change edits the node.
    • Rebut and dismiss only record.
  6. Journals every choice with references and tags: ["disposition:…"], so a rebutted objection never comes back.

Interview kill-pass

  • When the interview enters Technical, the skill launches the critic in the background with an outside-view packet and keeps interviewing.
  • The result becomes the next push: "An independent red-team pass flagged one thing: …".
  • If it's still pending at Review, the skill waits up to ~30s and then lists it.
  • At hard level, an announced pre-Review sweep also runs.

Also

  • The extractor returns a weakest_claim (a push candidate written from a fresh context) and marks weak answers with needs:.
  • The managed files gain SparSkill and CriticAgent. They're implied by the existing Skill and Agent selections, so existing projects get them on update. The manifest still records only the user-facing artifacts, so older binaries can read it.
  • Codex gets mirrored interview and spar skills under .agents/skills/.
  • Eval harness: for arms whose skill has a kill-pass, the harness runs the critic itself at the Technical transition, because workflow subagents can't launch their own. It passes the result to the next interviewer turn and scores whether the interviewer surfaced it. The target is ≥ 8/9 runs.

Test plan

  • cargo test -p tempyr-cli passes. New test: Skill and Agent imply the spar skill and critic, and the manifest records only Hooks, Skill, and Agent. Updated two tests that assumed three managed files.
  • cargo clippy -p tempyr-cli --all-targets and cargo fmt --check.
  • Ran workflow.js with mocks. The kill-pass runs once per kill-pass arm after Technical, is delivered on the next turn, and the baseline reports none.
  • setup.sh copies the critic into the sandbox.
  • Live /tempyr-spar on a real graph, and kill-pass numbers from a full /tempyr-eval run.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

  • Run on-demand review

This review includes 12 billable files and costs up to $3.00.

  • Ask an admin to make reviews automatic

Open in CodeRabbit

Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing.

Or wait 43 minutes for your next included review.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available. Your 74 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Essentials
  • Run ID: 239aadf6-b26a-4f3c-b509-2b9365d231fb
📥 Commits

Reviewing files that changed from the base of the PR and between 1725952 and 0827503.

📒 Files selected for processing (12)
  • .claude/agents/tempyr-critic.md
  • .claude/agents/tempyr-extractor.md
  • .claude/skills/tempyr-interview/SKILL.md
  • .claude/skills/tempyr-spar/SKILL.md
  • crates/tempyr-cli/assets/tempyr-interview.codex.SKILL.md
  • crates/tempyr-cli/assets/tempyr-spar.codex.SKILL.md
  • crates/tempyr-cli/src/commands/init.rs
  • crates/tempyr-cli/src/commands/managed.rs
  • evals/interview/rubric.md
  • evals/interview/setup.sh
  • evals/interview/template/.claude/skills/tempyr-eval/SKILL.md
  • evals/interview/workflow.js
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@cleak
cleak force-pushed the feat/interview-eval-harness branch from 277e6e3 to f4785e9 Compare October 11, 2026 22:05
@cleak
cleak force-pushed the feat/interview-spar branch from b143b0f to 87506cd Compare October 11, 2026 22:05
@cleak
cleak force-pushed the feat/interview-eval-harness branch from f4785e9 to 644084a Compare October 13, 2026 04:11
cleak and others added 2 commits October 12, 2026 21:12
Stage S3a of the interview-challenge proposal: an independent critic
that challenges graph nodes in a fresh context, on demand or once per
interview.

- tempyr-critic subagent: one critic, lens passed in (kill-pass,
  pre-mortem, assumptions, outside-view; mandate-focus variant). Works
  only from a node packet plus settled items, never the conversation;
  every objection quotes >=15 chars verbatim from its target node; "no
  objection" is valid.
- /tempyr-spar <node>: builds the packet with graph_traverse
  {include_body}, collects prior rebuttals via journal_search tag and
  reference filters, validates quotes, shows the top 3, and applies
  accept / rebut / dismiss / change in one line. Every disposition is
  journaled with references + tags so rebutted objections never return.
- Interview skill: a background kill-pass at the Product -> Technical
  boundary with an outside-view packet (no solution nodes); its result
  becomes the next push.
- Extractor returns a weakest_claim and marks weak answers `needs:`.
- The spar skill and critic agent are managed files implied by the
  existing Skill / Agent selections (the manifest keeps recording only
  the user-facing artifacts); Codex gets mirrored skills.
- Eval harness runs the kill-pass for arms that have one and scores
  whether the interviewer surfaced it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…gaps

- Agent definitions use the `tools:` frontmatter key (Claude Code
  ignores `allowed-tools:` there), so the critic really is limited to
  graph_get_node; same fix for the extractor.
- The critic is installed with the Skill artifact, since the interview
  and spar skills are what launch it.
- Codex gets the critic's instructions at .agents/skills/tempyr-spar/
  critic.md, and both skills fall back to an in-session critique pass
  that sees only the packet when the subagent isn't available.
- Spar/kill-pass accepts set valid statuses (risk: identified,
  open_question: open); kill-pass settled items include dismissals; an
  interview that reaches Review without starting the kill-pass runs it
  there. The push-priority list regains the kill-pass result.
- Eval harness: the judge only grades kill-passes whose result reached
  the interviewer, and the eval critic ignores recorded answers other
  than the premise reply, matching the real kill-pass's view.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@cleak
cleak force-pushed the feat/interview-spar branch from 87506cd to 0827503 Compare October 13, 2026 04:14
@cleak
cleak changed the base branch from feat/interview-eval-harness to master October 13, 2026 04:24
@cleak
cleak merged commit 2bdad03 into master Oct 13, 2026
5 checks passed
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.

1 participant