UI はローカライズ済みです。スキルの紹介と説明文書は選択した言語へ AI が自動翻訳し、コード・コマンド・パス・専門用語は原文のままです。原作者の文書が優先されます。
スキルを探す
開発・技術 · SKILL.md

sim-conductor

sim-conductor

Autonomously runs external user reaction simulations, internal audits, ideation scans, artifact validation, and quality reviews. Profiles the target artifact first, then derives task-appropriate personas, dispatches them as parallel agents, classifies findings into M/S/R tiers, and completes the pipeline through to commit automatically.

Independent GitHub snapshot · Automated classification · Original documentation governs

スキルの説明

GitHub

name: sim-conductor description: Autonomously runs external user reaction simulations, internal audits, ideation scans, artifact validation, and quality reviews. Profiles the target artifact first, then derives task-appropriate personas, dispatches them as parallel agents, classifies findings into M/S/R tiers, and completes the pipeline through to commit automatically. user-invocable: true allowed-tools: ["Read", "Write", "Bash", "Grep", "Glob", "Agent"] model-note: session-inherit — Sonnet base is first-class (sonnet_floor_doctrine.md); depth-critical judged steps route to dispatch (opus agent / cross-family sidecar, consent-gated), never a substrate requirement

sim-conductor — Meta-Simulation Automation Orchestrator

Profiles target → derives personas → dispatches parallel agents → M/S/R triage → commit. Personas are sourced installed-first → filled from the persona-container schema (7 slots as of 2026-07-18 — stance added, not an ad-hoc directive) → external install. Scale: 3 to 16, extensible to a crowd behind the marginal-coverage stop (§Scale).

Invocation Triggers

Trigger patternSuggested Area
"Look at this from an external user's perspective", "How would someone else see this?"Area A
"Check the harness", "asset audit", "internal audit"Area B
"Any new ideas?", "ideation scan", "naming candidates"Area C
"Review this code" (pre-PR), "review this prompt"Area D (code)
"Check if the session card is correct", "does the skill actually work", "memory cold-start validation"Area D (consumer)
"Is the output good?", "artifact quality review"Area E

Proposal format: "If it's related to [X], should I simulate with /sim-conductor [Area]?"

Natural Language Triggers

Example utteranceIntentMapped Area
"Validate our system virtually"Full system simulationArea B
"Test it with personas", "Run an external user simulation"External user reactionArea A
"Look at it through someone else's eyes"External perspectiveArea A
"Validate that this actually works"Real-usage validationArea D
"Find problems aggressively"Adversarial validationArea B (challenger)

Triggers

/sim-conductor                        # default: Area C auto-run
/sim-conductor A                      # external user simulation
/sim-conductor B                      # internal meta audit
/sim-conductor C                      # Innovator scan
/sim-conductor all                    # full A + B + C
/sim-conductor A --target <path>      # specific asset target
/sim-conductor D --target <file>      # code/prompt multi-persona review (pre-PR)
/sim-conductor D session [--target]   # session card cold-start validation
/sim-conductor D skill <name>         # skill trigger utterance consumer simulation
/sim-conductor D memory <file>        # memory file cold-start validation
/sim-conductor E --target <file>      # artifact quality review (post-pipeline)

Frequency limits: Area A after asset changes or manual trigger · Area B min 7-day interval (executor-applied guard: stop a re-run inside 7 days) · target cadence once/month (30-day reminder, when the optional fh_audit_check.zsh is enabled and the report is under $FH_DIR/tracks/_meta) · Area C/D/E no limit. The 7-day rule is the execution procedure; the 30-day check is only a conditional reminder. They use the same clock only when they inspect the same report directory.


Step 0 — Environment Sync

Auto-detect harness root, sync sim clone if present, set $REPORT_DIR.

Detail: See SKILL_detail.md §Step0-Bash — harness root detection, sim clone sync, report dir creation — read when executing Step 0.

Area B frequency check (the 7-day minimum interval, not the monthly target): Before running Area B, inspect the latest Area B report in $REPORT_DIR; if it is less than 7 days old, stop and report its date. This is an executor-applied procedure, not an automatic shell gate. No report in the selected $REPORT_DIR → treat as first run for this check. Separately, the optional fh_audit_check.zsh reminder only looks in $FH_DIR/tracks/_meta; it may not see a report stored in a different $REPORT_DIR.


Step 0.3 — Target Profile Analysis

Schema: knowledge/shared/harness-core/tpa_schema.md — canonical field definitions, artifact type table, gate routing. Use §Profile Output Format for output block.

Runs when Area is unspecified, or when target file is provided before Area selection. Skip if user provides a complete directive (e.g. /sim-conductor A --target <file>).

Read target artifact(s) → classify on 5 dimensions → output recommendation → user confirms or overrides:

DimensionSignal → Weight shift
artifact_typeSKILL.md / design-doc → Area B + D-skill↑ · README / CHEATSHEET → Area A↑ · code / config → Area D-code↑
audienceexternal installer / first-time user → beginner↑ · internal team only → challenger↑
claim_density3+ stated benefits or superlatives → challenger↑
risk_levelexternal publish / marketplace listing → steel-quench prerequisite triggered. Mechanical floor (not judge-only): any of — publish/marketplace target · public-surface or visibility change · auth/secret-handling or executable code · an FH asset under the 4-axis gate — forces risk_level ≥ medium regardless of profiler judgment. The floor closes the "fool the profiler into low to skip Step 0.6" seam; the judge may only raise above the floor, never below it.
noveltyfirst-of-its-kind / no prior session evidence → phantom-quench recommended
Target Profile output:
  artifact_type: [type]
  audience: [internal | external | mixed]
  claim_density: [low | medium | high] ([N] stated claims)
  risk_level: [low | medium | high]

Recommendation:
  Areas: [list + rationale]
  Persona composition: [list + weight]
  Scale: [Minimum 3 | Extended 4–8 | Full ≤16]
  Prerequisites: [steel-quench / phantom-quench / none]

Persona Discovery (after profile → before dispatch)

Schema: knowledge/shared/harness-core/persona_container_schema.md — the 7-slot persona-definition container. ② below fills these slots (lens / internal-logic / external-grounding / output-protocol / stance / cost-tier / lifecycle) instead of injecting a shapeless directive. The container is what makes a synthesized persona reproducible and cost-routable; the old "fallback palette" was undefined.

After profiling, sim-conductor determines the needed perspective types, then maps each to the best available agent:

For each needed perspective:
  ① Scan installed plugins + .claude/agents/ → exact match? → use it
  ② Fill the 7-slot persona container — lens · internal-logic · external-grounding · output-protocol · stance
       (= Step 1.5 parallax shape) · cost-tier · lifecycle → a defined, reproducible persona; the filled
       container IS the dispatch prompt (replaces the old ad-hoc "fallback palette" directive). Assign
       the cost-tier slot per §Scale cost-tier routing. [Schema: persona_container_schema.md]
  ③ GAP: no ①② match for a high-weight perspective
       → query /plugin-recommender: "find agents for [perspective] matching [artifact_type] context"
       → present: name · install command · estimated fit · token cost
       → user chooses: install now / skip / substitute with ②

Persona Discovery output:

Persona Map:
  beginner       → [installed agent: beginner] OR [filled 7-slot container]
  challenger     → [installed agent: challenger] OR [filled 7-slot container]
  [profile-specific role] → ⚠️ GAP — plugin-recommender recommends: [X] (install? y/n)

Gaps on high-weight personas (from profile) block dispatch until resolved. Gaps on low-weight personas → auto-fill with built-in fallback, no block.

Degraded coverage rule: When user skips a high-weight gap (substitutes with built-in fallback), flag in the Step 3 report under "Persona composition used" as ⚠️ degraded: [perspective]. Do not silently proceed. Degraded coverage on risk_level=high targets → additionally warn before dispatch.

Overriding a prerequisite recommendation requires explicit "skip [prerequisite]" utterance.

Detail: See SKILL_detail.md §PersonaDiscovery — plugin-recommender query format, gap resolution decision tree, persona map examples for each artifact type — read when running Persona Discovery.

Detail: See SKILL_detail.md §Profile-Examples — worked profiles for SKILL.md, README, bash script, design doc — read when result is ambiguous or to calibrate weights.


Step 0.5 — Precondition Validation

Proactively surface 1 concern, then confirm whether to proceed. Skip if no concern.

CheckConcern trigger condition
Area B unresolved S-tierAn unresolved S-tier finding from the previous run
Unresolved M-tierNew simulation without processing previous M-tier
steel-quench not runArea A in external publish context → mandatory gate: Area A does not proceed until steel-quench completes
Self-recursive pathsim-conductor attempting to auto-PR its own M-tier
Goal-method alignmentRequested Area doesn't match actual problem
D/E --target missingArea D(code)/E runs without --target file
D session target not foundSession start card file not found → confirm path
E execution timing errorArea E before pipeline run (no artifact yet)

Concern format: "One thing to check before [Area X]: [concern]. Proceed?"


Step 0.6 — Cross-Model Coverage Gate (risk≥medium — hard)

Closes the homogeneous-blind-spot + formatting-flattery vector (judge-robustness swarm, 2026-06-13): a panel of same-session Claude sub-agents shares one model's blind spots, so a clean verdict can be flattery the whole panel is blind to — and with no quotable-rule violation, no persona escalates. For risk_level ≥ medium targets (from Step 0.3), at least one persona MUST come from a source outside the orchestrator's own session context. This promotes the former advisory "dual validation principle" (detail §AreaB-Baseline #4) to a hard gate — the mechanical-anchor pattern of hardening #1–#5: a judged verdict binds to a fact the judge cannot fake.

Graceful-degradation ladder — take the highest available rung. The gate never breaks sim-conductor; at the bottom it only withdraws the unsafe autonomy (self-certifying a blind verdict), not the run:

RungSourcecross_model_coverageClosesWhen
1External CLI team (Multi-Team Mode — §MultiTeam)externalmodel-level blind spot (genuine cross-model)1+ external CLI live + probe non-empty
2Cross-session Claude — claude -p headless, or an Agent with zero inherited contextcross-sessionsession-contamination only — a fresh Claude shares the same weights/RLHF gradient, so it does not close the model-level blind spot; it only removes the orchestrator's working-memory bias. Honest partial mitigation, labeled as suchno external CLI; dispatch probe returns non-empty
3Same-session sub-agents onlyNONEnothing — homogeneous panelneither rung's probe succeeded

Mechanical anchor — cross_model_coverage is valid only if backed by a quoted dispatch artifact, not a self-assessment (the self-signing hole hardening #1 closed for the marker — same fix here). To record external or cross-session, the Step 3 report must quote a non-empty excerpt of the actual dispatch output (external CLI stdout, or the dispatched Agent's returned verdict text); a label with no quoted excerpt is invalid and falls to NONE. Liveness, not mere availability: probe the rung before claiming it — attempt the dispatch with a timeout; if it errors or returns empty (plan-gate closed, context saturated, CLI present-but-dead), record NONE, never assume the rung succeeded. This is the same honest scope as #1: the artifact makes the claim auditable, not cryptographically unforgeable — a fabricated excerpt remains the operator's + weekly-audit's residual by design. On rung 3 (NONE) for a risk≥medium target:

  • the report flags ⚠️ cross-model coverage: NONE — homogeneous same-session panel; verdict provisional, and
  • Step 4 auto-commit privilege is withdrawn (see Step 4): M-tier fixes may be prepared but the commit waits for the operator's explicit go. Auto-committing a structurally self-blind verdict is exactly what the exploit targeted — so that single privilege is what degrades, not the simulation.

risk_level = low targets are exempt (a homogeneous panel is acceptable); the gate fires only at medium+. The rung-2 fallback is what makes this CC-only-safe: a Claude-only environment still gets a real cross-context read (a fresh isolated dispatch shares no working memory with the orchestrator), so NONE is reached only when both external CLIs and a second Claude context are unavailable.


Step 1 — Area-Specific Simulation

Area A — External User Perspective

Target: skill descriptions, README, CHEATSHEET entry points.

Task-Adaptive Persona Selection

sim-conductor does not run a fixed persona set. It derives needed perspectives from the task, then sources each persona in priority order:

① Installed first — scan installed plugins + .claude/agents/ for a matching persona/agent
② Container fill — fill the 7-slot persona container for the standpoint; the filled container IS the
     dispatch prompt into a general-purpose Agent (Path B — replaces the old ad-hoc role directive)
③ External fetch — chain to /plugin-recommender when ①② insufficient for high-stakes tasks

Shipped standpoint agents (① tier — sourced installed-first):

FH ships a coherent user-mastery spectrum as real, reusable agents (not prompt-directive shells) — found by the ① installed-first scan, reusable across skills, and each isolated-context dispatchable for a true cold read (the bias-isolation value: an evaluator outside the author's context reads cold):

AgentSpectrum tierStandpointType
beginnerentryFirst-contact cold-read — onboarding friction a fluent author cannot feelreasoning
main-playercoreEngaged user; intelligently scopes Light / Midcore / Heavy (Heavy = classic power-user edge/limit lens)reasoning
expertfrontierDomain authority; web-grounded accuracy + SOTA currency, citation-enforceddata (WebSearch/WebFetch)
challengeradversarial axisFrontier adversary; U1 absorbs the skeptic "why not just X?" lensadversarial

Lineage: beginner / main-player / expert are the FH-native frontier successors to the field deep-insight user group (newcomer / power-user) — re-derived to FH grade with embedded methodology + Done-When, not name-copied. challenger is the advanced form of the field devil-advocate. The former standalone skeptic standpoint is folded into challenger U1.

Ad-hoc roles (② tier — container fill): when the profile demands a standpoint with no shipped agent (e.g. "security auditor", "non-native reader"), fill the 7-slot persona container for that standpoint — the filled container is the dispatch prompt. Prefer ① shipped agents; use ② only for genuinely task-specific one-offs.

Scale

ScaleCountWhen
Minimum3Routine Area A — most task-relevant 3 perspectives
Extended4–8High-stakes publish / external release
FullUp to 16 parallelPre-major-version / architecture review
Crowd16+ — no fixed cap; bounded by the marginal-coverage stopOnly when the marginal-coverage stop has demonstrably not fired at 16 — i.e. persona #17 is still decorrelated and finding-productive. Not chosen by artifact size or audience count (Full already covers those); the stop, not a headcount, opens this tier

Crowd is output-driven, never a target (per the container schema): the 16-cap lifts only behind the marginal-coverage stop — add a persona only if it is decorrelated (a distinct viewpoint, or — at crowd scale — a different model family) from those already running; stop when the marginal new-finding rate → 0. A crowd of identical-output personas is decorative (steel-quench Wave-1 angle #1). Do not name a headcount goal; the count is whatever the stop allows.

Cost-tier routing (the economy lever) — each persona's cost-tier slot routes it to a model so breadth is cheap and the verdict stays trustworthy:

  • floor-local / heavy-local (e.g. a local Ollama sidecar) carry cheap breadth — extra decorrelated standpoints at near-zero token cost. A heavier local (27–32B) is a stronger canary than a floor model, but on one probe, not a benchmark ([[persona-container-schema]] §tier-distribution) — so a local tier is a canary, never the gate.
  • frontier carries the terminal verdict — the M/S/R triage and any auto-commit decision stay frontier. This is the same anchor as Step 0.6: local breadth decorrelates, it does not decide.
  • Cost-tier routing and the Step 0.6 cross-model gate are complementary, not duplicate: 0.6 requires a non-session source for risk≥medium (blind-spot closure); cost-tier distributes breadth for economy. A local-sidecar persona can satisfy both at once (cross-family and cheap), but only Step 0.6's quoted-artifact rule lets it count as external coverage.

All personas run as parallel Agents — no sequential bottleneck. Use agent-composer Medium/Large fan-out for Extended/Full; Crowd scale dispatches in decorrelated waves, re-checking the marginal-coverage stop between waves rather than firing all at once.

Simplification guard: Routine internal audits → ② built-in fallback at Minimum scale. Chain to ③ only when a needed perspective has no ①② match, or stakes are high.

Multi-Team Mode (when external CLIs available)

When 1+ external CLIs detected, Area A upgrades to Multi-Team Panel: each CLI forms an independent team. Cross-team: 2+ teams flag same issue → tier-up (S→S-confirmed). External-only findings → "Claude blind spot" flag.

Pre-entry user confirmation required before multi-team execution.

Detail: See SKILL_detail.md §MultiTeam — team formation table (T0–T4), CLI detection bash, confirmation dialog, cross-team synthesis format — read when multi-team mode activates.

A-1 (beginner) — first-contact friendliness · onboarding friction · terminology clarity A-2 (main-player) — engaged-use fit; Heavy tier: install conflicts · duplication · silent overwrite A-3 (challenger, artifact_type="SKILL") — claim-evidence gaps · angles U3, U5, S2

⚠️ Human review gate: Area A S-tier judgments require owner review before entering AI-AI loop.


Area B — Internal Meta Audit

Target: all fh-meta assets (skills + agents + plugin.json).

Self-recursive caution: When M-tier found in sim-conductor itself → report only, delegate to user.

Dispatch pattern: hub-persona-auditor ∥ persona-innovator (parallel) → challenger (after, with both outputs as context)

  1. hub-persona-auditor — README/CHEATSHEET as external briefing, 4-axis review, 3-tier suggestions
  2. persona-innovator (Mode I) — naming gaps + structural gaps + 3-5 candidates
  3. challenger (artifact_type="SKILL") — receives 1+2 outputs, angles U2, D3, U5 — "what was missed?"

Rationale: 1+2 run without influencing each other; challenger synthesizes both perspectives independently, avoiding Cost of Consensus.

Detail: See SKILL_detail.md §AreaB-Baseline — external baseline injection methods, dual-validation principle, Area B → steel-quench handoff — read when setting up Area B defenses.

⚠️ Human review gate: Area B convergence is provisional until owner confirms.


Area C — Innovator Scan

Runs independently. Skip if included in Area B.

persona-innovator (Mode F = Internal + External): current harness gaps + frontier scan. Output: naming candidates + absorption signals + top 1 priority action.


Area D — Artifact Validity Validation

ModeTriggerCore question
code/sim-conductor D --target <file>Is the code/prompt well-built?
consumer/sim-conductor D session/skill/memoryDoes the artifact work for the intended consumer?

D-code — Profile-Aware Persona Routing

Persona composition adapts to artifact_type from Step 0.3 profile:

Artifact typePrimary personaSupporting personaFocus
SKILL.md / design docchallenger (artifact_type="SKILL")beginnerGovernance gaps, behavioral rule coverage
Python / JS / bash codechallenger (artifact_type="Code")main-player (Heavy)Edge cases, performance, security surface
Prompt / configbeginnerchallengerInterpretation errors, implicit assumptions
Auth / security-sensitivechallenger + Security-auditor†main-player (Heavy)Attack surface, privilege escalation

† Security-auditor = ② tier — the 7-slot persona container filled for a security-auditor standpoint.

All personas run in parallel. Findings = M/S/R → M-tier items fixed immediately.

D-consumer — Artifact Consumer Simulation

Consumer agent attempts actual use (not just reads and judges). Grades: F (functional) / P (partial → S-tier) / B (broken → M-tier immediate fix).

Detail: See SKILL_detail.md §AreaD-Consumer — D-session 4 questions, D-skill cold-start procedure, D-memory check items, verdict criteria — read when executing D-consumer.


Area E — Artifact Quality Review

expert objection (E-1) + Practitioner confusion (E-2) in parallel → Pattern structuring (E-3) integrates both.

Detail: See SKILL_detail.md §AreaE-Detail — E-1/E-2/E-3 execution, finding format, pattern naming procedure — read when executing Area E.


Step 1.5 — Persona Output Protocol + Neutral Synthesizer (parallax)

Generalized from the field deep-insight multi-persona pattern (private companion store), domain-stripped — the pattern is renamed parallax for public FH (it is a mode of this skill, not a separate skill — see asset-placement 2026-06-06). It gives the persona dispatch above a shared output contract + a neutral aggregator, so multi-persona findings stay comparable and the synthesis injects no bias of its own.

Naming provenance (precise): "renamed" above refers to the pattern (→ parallax), not the personas. The company-team-coupled field personas (fe/be/ios/pm/ux-writer/compliance/qa) were domain-stripped entirely. The generic user group (newcomer/power-user) was re-derived to FH grade as the shipped beginner / main-player / expert mastery-spectrum agents (embedded methodology + Done-When, not name-copied shells), and the field devil-advocate was advanced into challenger (sandboxed-adversary

  • adaptive attack matrix). Lineage is acknowledged; nothing is carried verbatim as a shell.

Shared persona output protocol — every dispatched persona emits the same shape, whatever its lens:

### Strengths        (0–3, from this persona's viewpoint)
### Concerns
  Critical   — compile/runtime failure · clear logic error · data corruption · security leak
  Important  — significant user/service impact in a plausible scenario
  Suggestion — optional improvement
  (each item: [file:line or quoted span] one-line summary — rationale)
### Open questions   (0–3 items needed for a decision)
### Absence check    (outside-vantage personas — beginner/integrator: what does the artifact FAIL to
                      specify that this standpoint needs? discoverability · undocumented contract ·
                      unstated assumption. A normal, self-administrable rubric item — surfaces real gaps.)

FP judgment discipline — only escalate when confident. Never escalate: pre-existing issues not introduced by this change · style/quality without a quotable rule · linter-catchable · speculative ("might break if…") · subjective preference (→ Suggestion). If not confident, do not mark it — false positives erode reviewer trust.

Neutral synthesizer — the aggregator is a NON-persona; it adds no opinion of its own:

  • No opinion injection — never a conclusion no persona stated.
  • Preserve attribution — always traceable which persona said what.
  • Priority labels verbatim — Critical/Important/Suggestion carried as the persona set them.
  • No forced consensus or forced conflict — report Common opinions (2+ personas agree) and Conflicts (position A vs B, each with rationale) as-is. Feeds Step 2 M/S/R triage (M ← Critical or 2+ personas).
  • Cost-tier aware triage — a frontier-tier persona's verdict is terminal; a floor/heavy-local persona's finding enters only as decorrelated breadth (it can raise a standpoint to covered, never solely set an M-tier on its own). This enforces in the aggregator the §Scale "local breadth decorrelates, it does not decide" lock — without it, a local canary's finding would drive triage identically to frontier.

Zero-coverage map (mandatory synthesizer output) — the synthesizer must emit, mechanically, the set of standpoints that produced no finding, not only the ones that did (judge-robustness swarm, 2026-06-13). Enumerate the persona standpoints in play — those the Step 0.3 profile recommended, plus the standpoints its dimensions imply (risk_level=high → a security/publish standpoint · audience=mixed → a non-native-reader standpoint · claim_density=high → a claim-evidence standpoint). List the standpoints, not the bare dimension names (a risk_level (low) → ZERO row is noise that trains operators to ignore ⚠️). Mark each covered (≥1 persona addressed it) or ZERO (no persona touched it):

Coverage map:
  beginner (onboarding friction)      → covered (A-1: 2 findings)
  challenger (claim-evidence)         → covered (A-3: 1 finding)
  security surface (risk_level=high)  → ZERO ⚠️
  non-native reader (audience=mixed)  → ZERO ⚠️

A clean report with ZERO standpoints is not a pass — it is an uncovered surface, reported as such. This converts the formatting-flattery failure (everything reads fine → nothing escalates) into a visible gap: silence on a standpoint is reported as ZERO, never inferred as approval. It is a checklist derived from the profile and the dispatch outputs — a mechanical anchor, not a judgment. Carry the map verbatim into the Step 3 report.

The two severity vocabularies are layered, not redundant: a persona running in isolation assigns only its own Critical/Important/Suggestion — it cannot assign M/S/R, since S = found by 3+ personas depends on cross-persona agreement the isolated persona never sees. The synthesizer is the only context that can triage to M/S/R. So isolation requires the per-persona → synthesized two-layer split.

External-harness persona sourcing — isomorphic to steel-quench Step 0.4 (Specialized Reviewer Discovery) + Wave 5 (external CLI teams). A needed lens may be sourced from an installed sibling harness, not only the built-in palette — e.g. gstack /review (staff-engineer), /cso (security-officer), /qa (QA-lead) when gstack is installed. sim-conductor orchestrates; the sibling supplies the specialist lens. Same ①installed → ②fallback → ③fetch priority as Persona Discovery — an external harness's review-skills count as ① installed sources, widening the persona pool without FH shipping every specialist.

Absence check — resolved (added above): the clean replication (companion-store experiment, Arm F: identical artifact, explicit omission prompt, ownership-only variable) found self ≈ isolated (~90% overlap) — omission-detection is self-administrable when explicitly asked, refuting the earlier "the author can't see their own omissions" (Arm E, a prompt/design-drift artifact). So the Absence check is a normal, valuable rubric item (it surfaces real undocumented-contract gaps), not a special isolation-only power. The pattern's value is rubric/standpoint supply + routine enforcement (copyable utility), not de-biasing — see knowledge/shared/patterns/multi-persona-review.md.


Step 2 — Synthesis

TierCriteriaAction
M (Mandatory)Blocks external user entry / naming-substance mismatch / security/trust damageImmediate fix required
S (Strong)Feature degradation / found by 3+ personasAddress within next session
R (Recommended)Improvement value / found by single personaBacklog

Deduplication: Multiple personas → same location: M > S > R.

Early Convergence Detection: 2+ Areas independently classify same item as M-tier → immediate fix, remaining Areas continue for S/R coverage only.


Step 3 — Report

File: $REPORT_DIR/sim_YYYY_MM_DD_area_[X].md

Detail: See SKILL_detail.md §Report-Format — full report template with frontmatter, M/S/R sections, emerging asset candidates — read when writing the report.


Step 4 — PR or Direct Commit

1+ M-tier → fix immediately → commit. PR creation requires explicit user request. 0 M-tier → commit report only + report S/R backlog.

Cross-model gate on auto-commit (risk≥medium) — when Step 0.6 recorded cross_model_coverage: NONE on a risk≥medium target, the auto-commit privilege is withdrawn: prepare the M-tier fixes and write the report, but do not self-commit — surface "cross-model coverage NONE on a risk≥medium target; the verdict is from a homogeneous same-session panel. Commit the fixes, or add a cross-context read first?" and wait for the operator's go. external/cross-session coverage, or risk_level=low, commits as normal. (This withdraws one privilege, not the run — the report and fixes still exist.)

Detail: See SKILL_detail.md §PR-Bash — branch creation bash, commit + push, gh pr create template — read when creating a PR.


Step 5 — Graduate a Proven Persona (optional, rare)

Most synthesized personas are throwaway — the run accelerated the work and the persona is discarded. A persona earns a permanent home only by passing the container schema's admission test (the analogue of "app-ification"; [[persona-container-schema]] §Lifecycle):

CheckCriterionClass
Recurrencesurfaced ≥1 unique S/M finding (one no other persona in the run produced) across ≥2 distinct targets — not a one-off lucky firemeasured
Trust bar (skills only)if graduating into a skill rather than a project's persona set, additionally clears the FH 6-item creation gatemandatory-pass
  • Pass → into a project's static set: route the write through asset-placement-gate (expected verdict: project-local) before writing the filled container to the project's persona file (e.g. the-bible core/personas.json) — sim-conductor proposes the target, the placement gate confirms it, the operator approves. A project-local asset, not an FH change, but the cross-boundary write is still gated.
  • Pass → into a skill: route through asset-placement-gate + the New-Skill creation gate (the skill-foundry inversion — the trust bar is non-negotiable). This is HITL, never auto-graduated.
  • Fail the recurrence check → stays ephemeral. Do not graduate on a single run.

Graduation is never automatic and is out of scope for auto-commit — it is a deliberate, operator-approved promotion. A clean simulation that graduated nothing is a normal, complete run.


Human Gate Principle

Convergence within an AI-AI loop is provisional. Elevated to final only after human gate.

StageHuman gate condition
Area A S-tierUser reviews + says "convergence approved"
Area B convergenceAI-AI loop is provisional → elevated after user confirmation
M-tier auto-fixCommit after fix (no PR gate); PR requires explicit user request
Three-Doctor Loop endUser reviews convergence and decides next action

Done When

ConditionVerdict
sim-conductor [Area X] complete format output✅ Simulation complete
1+ M-tier → fixed + committed (or "none")✅ Prescription complete
Report tracks/_meta/sim_YYYY_MM_DD_*.md saved✅ Persistence complete
0 M-tier → report committed + S/R backlog reported✅ Health check complete
risk≥medium → cross_model_coverage recorded in report (external/cross-session/NONE)✅ Coverage gate ran (check class: measured — the recorded value reflects the dispatch path that ran, not a self-grade; pair: NONE withdraws auto-commit per Step 4)
Synthesizer emitted the zero-coverage map (every profile standpoint marked covered/ZERO)✅ Blind-spot surface reported (check class: mechanical — a checklist over the profile, not a judgment)

Verdicts: PASS · CONDITIONAL_PASS (S/R only, or Area B cadence skip) · FAIL (M-tier unresolved) · ESCALATE (persona conflict requiring human judgment, or cross_model_coverage: NONE on risk≥medium → auto-commit withdrawn pending operator go).

Mandatory for Area A (external publish): steel-quench must complete in same session before Area A is marked complete.


Simplification Guard

  • Area B 2+ times in one week: check whether previous S-tier resolved first
  • New simulation without processing M-tier: warn about unresolved M-tier
  • Add new persona: require 1+ empirical cases not captured by current palette

Operations Notes

AI-AI Loop Bias Defense: sim-conductor → harness-pr-reviewer → sim-conductor loop shares LLM cognitive blind spots. Internal convergence is "provisional convergence" — elevated only by external review or human gate. Area A/B convergence without human gate = incomplete.


Three-Doctor Loop Integration

harness-doctor (structure) · context-doctor (context) · sim-conductor (future behavior) form a closed loop.

SituationNext skill
Structural problem in simulation results/harness-doctor
Token waste pattern/context-doctor
All three mentioned simultaneouslyThree-Doctor Loop: diagnosis→prescription→re-diagnosis cycle
Area A before external publish/steel-quench required first — mandatory gate

Path B (External Environment)

When ~/sim/ absent: fallback to harness root, logical isolation only.

Detail: See SKILL_detail.md §PathB-Detail — git fallback, logical isolation prompt directive, Area restriction rules — read when running in external/restricted environment.

保存したスキル