@chrono-meta/fh-gate 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -2
- package/CATALOG.md +6 -1
- package/CHEATSHEET.md +125 -1
- package/CLAUDE.md +40 -4
- package/README.md +69 -17
- package/docs/codex-compat.md +4 -4
- package/docs/pillars.svg +26 -29
- package/knowledge/shared/harness-core/fh_integration_contract.md +1 -1
- package/package.json +1 -1
- package/plugins/fh-meta/skills/agent-composer/SKILL.md +1 -1
- package/plugins/fh-meta/skills/agent-composer/SKILL_detail.md +2 -2
- package/plugins/fh-meta/skills/edit-manifest/SKILL.md +1 -1
- package/plugins/fh-meta/skills/harness-doctor/SKILL_detail.md +1 -1
- package/plugins/fh-meta/skills/install-wizard/SKILL.md +8 -1
- package/plugins/fh-meta/skills/marketplace-gate/SKILL.md +1 -1
- package/plugins/fh-meta/skills/phantom-quench/SKILL.md +248 -0
- package/plugins/fh-meta/skills/{source-grounding-audit → phantom-quench}/SKILL_detail.md +3 -3
- package/plugins/fh-meta/skills/pipeline-conductor/SKILL.md +10 -10
- package/plugins/fh-meta/skills/public-surface-audit/SKILL.md +77 -1
- package/plugins/fh-meta/skills/return-path-gate/SKILL.md +2 -2
- package/plugins/fh-meta/skills/sim-conductor/SKILL.md +59 -2
- package/plugins/fh-meta/skills/sim-conductor/SKILL_detail.md +2 -2
- package/plugins/fh-meta/skills/skill-splitter/SKILL.md +4 -4
- package/plugins/fh-meta/skills/skill-splitter/SKILL_detail.md +2 -2
- package/plugins/fh-meta/skills/source-grounding-audit/SKILL.md +27 -215
- package/plugins/fh-meta/skills/steel-quench/SKILL.md +24 -2
- package/plugins/fh-meta/skills/steel-quench/SKILL_detail.md +2 -2
- package/scripts/fh-gate.sh +3 -9
- package/scripts/fh-run.sh +1 -1
|
@@ -479,6 +479,6 @@ F7 (bash -n parse) is a general-purpose syntax capability. Other skills reuse it
|
|
|
479
479
|
|---|---|---|
|
|
480
480
|
| harness-doctor Step 10 (this) | Regression detection — new syntax errors from change | *Backward* |
|
|
481
481
|
| steel-quench | Attack vector — "SKILL.md claims bash runs but has syntax errors" | *Adversarial* |
|
|
482
|
-
|
|
|
482
|
+
| phantom-quench | Phantom claim — code in docs that doesn't parse = fabricated example | *Forward* |
|
|
483
483
|
|
|
484
484
|
For shared utility: `templates/regression_guard.sh` — extract `count_bad_blocks` function or invoke with ref pair.
|
|
@@ -323,6 +323,7 @@ Auto-check the following items based on detected environment. Each item classifi
|
|
|
323
323
|
| MCP plugin | ~/.claude.json mcpServers contains entry | `python3 -c "import json,os; d=json.load(open(os.path.expanduser('~/.claude.json'))); print(list(d.get('mcpServers',{}).keys()))"` |
|
|
324
324
|
| `deep-insight plugin` | settings.json plugins contains deep-insight | `grep -r "deep-insight" .claude/settings.json 2>/dev/null` |
|
|
325
325
|
| `fh_env_context.jsonc` | `.claude/rules/fh_env_context.jsonc` exists | `ls .claude/rules/fh_env_context.jsonc` |
|
|
326
|
+
| `phantom-gate` | **(Python + AI-output projects only)** `phantom-gate` present in `requirements.txt` / `pyproject.toml` | `grep "phantom.gate" requirements.txt pyproject.toml 2>/dev/null` |
|
|
326
327
|
| `Streamlit pattern applied` | (Streamlit projects only, if the pattern pack is present) data_editor empty df branch/async wrapper/CSS numeric variables | CC `knowledge/shared/streamlit_patterns.md` Pattern 1-5 check (skip if file absent) |
|
|
327
328
|
|
|
328
329
|
**Score calculation**: PASS = 1 point / MISS = 0.5 points / FAIL = 0 points → converted to 100-point scale.
|
|
@@ -363,6 +364,12 @@ install-wizard — Diagnosis Results ({score}/100)
|
|
|
363
364
|
Copy: {FH_DIR}/templates/fh_env_context.jsonc → .claude/rules/fh_env_context.jsonc
|
|
364
365
|
Then manually update with actual values for org name, Jira URL, environment status, etc.
|
|
365
366
|
Effect: Each skill references common environment context → eliminate individual setting duplication
|
|
367
|
+
[9] Install phantom-gate — AI output hallucination detection (Python + AI-output projects only, if MISS)
|
|
368
|
+
Run: pip install git+https://github.com/chrono-meta/phantom-gate.git
|
|
369
|
+
Usage: phantom-gate scan output.txt / phantom-gate scan . --project
|
|
370
|
+
Detectors: M1 (phantom claims) · M2 (self-reference loops) · M3 (unvalidated external-dep claims) · M4 (temporal) · M5 (cross-file version mismatch)
|
|
371
|
+
Skip condition: non-Python project OR no AI-generated output in pipeline
|
|
372
|
+
|
|
366
373
|
|
|
367
374
|
Each item: Y (approve) / N (skip) / L (later) / A (approve all)
|
|
368
375
|
```
|
|
@@ -559,7 +566,7 @@ ls ~/.cc_sentinels/${PROJECT_NAME}_wizard_done 2>/dev/null && echo "Inspection m
|
|
|
559
566
|
|---|---|
|
|
560
567
|
| Structural anomaly detected | `/harness-doctor` |
|
|
561
568
|
| Token waste pattern detected | `/context-doctor` |
|
|
562
|
-
| External user simulation needed | `/sim-conductor
|
|
569
|
+
| External user simulation needed | `/sim-conductor` |
|
|
563
570
|
| Install conflict suspected | `/install-doctor` |
|
|
564
571
|
|
|
565
572
|
## Per-Cluster Deferred Loading (Progressive Disclosure)
|
|
@@ -187,7 +187,7 @@ All steps 0–2 completed
|
|
|
187
187
|
+ Overall verdict output (🟢 Recommended / 🟡 Conditional / 🔴 On hold)
|
|
188
188
|
```
|
|
189
189
|
|
|
190
|
-
**→ Mandatory before 🟢 Recommended verdict: `
|
|
190
|
+
**→ Mandatory before 🟢 Recommended verdict: `phantom-quench`** — forward axis check on all citations, external URLs, and file path references in the asset being reviewed. A 🟢 verdict without phantom-quench is incomplete. If phantom-quench finds phantom refs → verdict downgrades to 🟡 Conditional automatically.
|
|
191
191
|
|
|
192
192
|
> When `agent-composer` receives a "comprehensive marketplace listing audit" request,
|
|
193
193
|
> recommend: Wave 0 `fact-checker` → Wave 1 `marketplace-gate` + `hub-persona-auditor` in parallel.
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: phantom-quench
|
|
3
|
+
description: The grounding member of the quench series — extracts proper nouns, numerical values, and branching conditions from artifacts (TCs, analysis reports, design documents), back-traces them to declared source files, and marks anything not found as a Phantom Claim (ungrounded — present in the artifact but not traceable to a declared source; not a claim that it is necessarily false). If steel-quench attacks output patterns (self-declarations, cushion language), phantom-quench attacks input tracing (where did this come from?). Renamed from source-grounding-audit (2026-06-06, quench-series); `/source-grounding-audit` still resolves as an alias. Triggered by "phantom detection", "phantom-quench", "phantom claim", "hallucinated claim detection", "source back-trace", "source audit", "verify source", "TC evidence tracing", "where did this come from", "grounding audit", "source grounding audit", "false claim detection".
|
|
4
|
+
user-invocable: true
|
|
5
|
+
allowed-tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob"]
|
|
6
|
+
model: sonnet
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# phantom-quench — Input Tracing Grounding Audit
|
|
10
|
+
|
|
11
|
+
> Just because an artifact looks plausible doesn't mean it's grounded in source. plausible ≠ grounded.
|
|
12
|
+
|
|
13
|
+
> **Renamed from `source-grounding-audit` (2026-06-06)** — the grounding member of the quench series
|
|
14
|
+
> (steel-quench · phantom-quench · goal-quench). Same skill, same ruleset; only the label changed to fit
|
|
15
|
+
> the family. The **v1 paper (Zenodo 10.5281/zenodo.20397566) cites the old name** — that is the
|
|
16
|
+
> historical record, not a phantom. `/source-grounding-audit` still resolves via the deprecated redirect
|
|
17
|
+
> stub at `plugins/fh-meta/skills/source-grounding-audit/SKILL.md` (`successor: phantom-quench`).
|
|
18
|
+
> This is a **label rename, not a capability change** — phantom-quench does not fuse steel-quench or
|
|
19
|
+
> inject faults; those remain separate (orthogonality is deliberate — see Role Separation below).
|
|
20
|
+
>
|
|
21
|
+
> **Quench-series semantics** (resolves the "quench *what*?" question): each member subjects a different
|
|
22
|
+
> thing to the forge — steel-quench hardens an **existing output**; phantom-quench hardens the system
|
|
23
|
+
> against **mistaking the absent for present** (the phantom illusion — *not* the phantom as a material to
|
|
24
|
+
> harden); goal-quench hardens the **goal itself** into an advanced version. Same verb, consistent grammar.
|
|
25
|
+
>
|
|
26
|
+
> **Not the same as `phantom-gate`.** `phantom-gate` is the *productized standalone* phantom detector — a
|
|
27
|
+
> PyPI package run against any repo from the shell. `phantom-quench` is the *in-harness skill* — the same
|
|
28
|
+
> detection lineage as a method invoked inside a Claude session against a declared source set. Tool vs
|
|
29
|
+
> skill; different delivery, shared idea.
|
|
30
|
+
|
|
31
|
+
When AI generates artifacts without reading the source, those artifacts look like domain knowledge but are actually **Phantom Claims** coming from LLM weights. This skill back-traces each claim in the artifact to the declared source to explicitly mark Phantoms.
|
|
32
|
+
|
|
33
|
+
## Role Separation from steel-quench
|
|
34
|
+
|
|
35
|
+
| Dimension | steel-quench | phantom-quench |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| **Attack target** | Output patterns (self-declarations, cushion language, reason for existence) | Input tracing (is the claim in the source?) |
|
|
38
|
+
| **Core question** | "Is this structure flawed?" | "Where did this content come from?" |
|
|
39
|
+
| **Activation timing** | All-angle quench just before completion | Immediately after source-based artifact generation or at point of suspicion |
|
|
40
|
+
| **Primary attack vector** | Bus factor, self-reference, platform obsolescence | Phantom Claim, source not read, fabricated branching conditions |
|
|
41
|
+
| **Representative pattern** | "Declaration only, no evidence" | "Number in TC that doesn't exist in source" |
|
|
42
|
+
|
|
43
|
+
**Can be used together**: steel-quench Wave 1 real-code-based attack + phantom-quench Phantom marking can be run sequentially in the same session. But do not mix the roles of the two skills.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Trigger Phrases
|
|
48
|
+
|
|
49
|
+
| Phrase | Situation |
|
|
50
|
+
|---|---|
|
|
51
|
+
| "phantom detection", "phantom claim", "false claim detection" | Full artifact Phantom scan (primary trigger) |
|
|
52
|
+
| "source back-trace", "source audit" | Analysis report, design document verification |
|
|
53
|
+
| "verify source", "where did this come from" | Suspecting origin of a specific claim |
|
|
54
|
+
| "TC evidence tracing", "TC source verification" | Post-TC-generation source consistency check |
|
|
55
|
+
| "grounding audit", "source grounding audit" | Full artifact Phantom scan |
|
|
56
|
+
| "verify evidence files" | Analysis report, design document verification |
|
|
57
|
+
| `/phantom-quench` | Explicit call |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Core Concept — Phantom Claim
|
|
62
|
+
|
|
63
|
+
**Phantom Claim**: A claim that appears in the artifact but cannot be found in the declared source files.
|
|
64
|
+
|
|
65
|
+
3 paths through which Phantoms are produced:
|
|
66
|
+
|
|
67
|
+
| Path | Description | Risk |
|
|
68
|
+
|---|---|:---:|
|
|
69
|
+
| **Source not read** | AI generates artifact using domain knowledge without Read-ing source | S |
|
|
70
|
+
| **Partial reading** | Source partially read, rest filled in with inference | A |
|
|
71
|
+
| **Reconstruction contamination** | Source was read but LLM modified values/conditions during paraphrase | A |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Execution Steps
|
|
76
|
+
|
|
77
|
+
### Step 0. Confirm Audit Target
|
|
78
|
+
|
|
79
|
+
If not provided by user, explicitly confirm: artifact file path, declared source files, and audit scope. Source not declared = S-grade blocker registered immediately.
|
|
80
|
+
|
|
81
|
+
> **Detail**: See `SKILL_detail.md §Step0-Detail` — confirmation output format and simplification guard — read when audit target or source list is ambiguous.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### Step 0.5. Claim Distribution Profile
|
|
86
|
+
|
|
87
|
+
> **Schema**: `knowledge/shared/harness-core/tpa_schema.md` — `phantom_risk` derivation rule, gate trigger conditions, §Gate Routing Table.
|
|
88
|
+
|
|
89
|
+
Runs after Step 0 (target + source confirmed). Skip if user specifies scope explicitly.
|
|
90
|
+
|
|
91
|
+
Scan artifact quickly to classify claim distribution:
|
|
92
|
+
|
|
93
|
+
| Dimension | Signal → Audit depth shift |
|
|
94
|
+
|---|---|
|
|
95
|
+
| `claim_density` | > 10 claims → full Step 1-4 audit; ≤ 3 claims → light (S+A only) |
|
|
96
|
+
| `artifact_type` | SKILL.md/design-doc → prioritize Branch/State-transition claims; code → prioritize Proper-noun/API claims |
|
|
97
|
+
| `risk_level` | external publish / arXiv citations → all claim types, max depth |
|
|
98
|
+
| `source_count` | 0 declared sources → S-grade blocker immediately (skip to Step 3 prescription) |
|
|
99
|
+
| `quantitative_density` | > 3 numerical claims → focus numerical+range types first |
|
|
100
|
+
|
|
101
|
+
Scope recommendation output:
|
|
102
|
+
```
|
|
103
|
+
Claim types to prioritize: [list]
|
|
104
|
+
Audit depth: [full | prioritized | light]
|
|
105
|
+
Immediate blockers detected: [yes/no — 0 sources = immediate S-grade]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**0-source behavioral rule**: When artifact has 0 declared sources, skip Steps 1-2 entirely and go directly to Step 3 with S-grade blocker: "Source not declared — all claims unverifiable."
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### Step 1. Claim Extraction (Artifact Scan)
|
|
113
|
+
|
|
114
|
+
Extract claims from the artifact that require source back-tracing. Claim types: Proper nouns (highest), Numerical/range values (highest), Branching conditions (highest), State transitions (high), Preconditions (high), Actors (medium). Exclude generic test methodology descriptions and generic UI patterns.
|
|
115
|
+
|
|
116
|
+
> **Detail**: See `SKILL_detail.md §Step1-Detail` — full claim types table with examples, exclude list, and Step 1 output format template — read when deciding which claims to include or format the extraction results.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### Step 2. Source Read + Back-Trace
|
|
121
|
+
|
|
122
|
+
Back-trace each claim to the declared source files using Read + Grep directly — no inference judgment. Partial match is not treated as match.
|
|
123
|
+
|
|
124
|
+
Back-tracing classification:
|
|
125
|
+
|
|
126
|
+
| Classification | Criteria | Marking |
|
|
127
|
+
|---|---|:---:|
|
|
128
|
+
| **Grounded** | Claim directly confirmed in source | ✅ |
|
|
129
|
+
| **Partial** | Similar content in source but not exact match — needs re-confirmation | ⚠️ |
|
|
130
|
+
| **Phantom** | Cannot be found in source | ❌ |
|
|
131
|
+
| **Source-Missing** | Source itself cannot be Read or was not declared | 🔴 |
|
|
132
|
+
|
|
133
|
+
> **Detail**: See `SKILL_detail.md §Step2-Detail` — back-tracing execution procedure, classification decision rules, and Step 2 output format template — read when handling edge cases or formatting results.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### Step 3. Phantom Classification + Prescription
|
|
138
|
+
|
|
139
|
+
Classify Phantom and Partial claims by severity and provide prescriptions.
|
|
140
|
+
|
|
141
|
+
**Severity classification criteria**:
|
|
142
|
+
|
|
143
|
+
| Severity | Criteria | Examples |
|
|
144
|
+
|:---:|---|---|
|
|
145
|
+
| **S** (Immediate blocker) | If this claim is wrong, TC could Pass-judge incorrect behavior | Monetary boundary values, branching conditions, status values |
|
|
146
|
+
| **A** (Must fix) | If this claim is wrong, TC cannot execute or runs wrong path | API endpoint names, field names, preconditions |
|
|
147
|
+
| **B** (Improvement recommended) | If this claim is wrong, TC can execute but intent may differ | Descriptive text, non-critical names |
|
|
148
|
+
|
|
149
|
+
Prescriptions: (1) Source Re-read — precisely re-read the relevant source section and fix; (2) Request source specification — when source doesn't exist or wasn't declared; (3) Delete/rewrite — delete claims without source grounding and rewrite from source.
|
|
150
|
+
|
|
151
|
+
> **Detail**: See `SKILL_detail.md §Step3-Detail` — prescription procedures and Step 3 output format template — read when writing the classification table or applying a prescription.
|
|
152
|
+
|
|
153
|
+
**S-grade Immediate Human Gate** — if 1+ S-grade Phantoms found, pause before Step 4/5 and surface:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
⚠️ phantom-quench: N S-grade Phantom(s) found:
|
|
157
|
+
- [claim 1 — one-line summary, location]
|
|
158
|
+
- [claim 2 — one-line summary, location]
|
|
159
|
+
|
|
160
|
+
Options:
|
|
161
|
+
(a) Continue — AI proceeds to Step 4 pattern diagnosis + Step 5 re-audit
|
|
162
|
+
(b) Human review first — inspect Phantoms directly, then proceed
|
|
163
|
+
(c) Abort — fix sources manually and re-run audit
|
|
164
|
+
|
|
165
|
+
Waiting for input. (Default: a)
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Rationale: S-grade Phantoms that enter Step 5 re-audit without human review risk LLM reconstruction contamination — the same pattern that originally produced the Phantoms can "verify" its own fixes. Human review at this threshold breaks the loop.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
### Step 4. Source Not-Read Pattern Detection (Meta Diagnosis)
|
|
173
|
+
|
|
174
|
+
Analyze Phantom distribution to diagnose structural problems in the artifact generation process. Reveal "why were these Phantoms produced", not just "this TC is wrong".
|
|
175
|
+
|
|
176
|
+
**Pattern detection criteria**:
|
|
177
|
+
|
|
178
|
+
| Pattern | Detection Condition | Meaning |
|
|
179
|
+
|---|---|---|
|
|
180
|
+
| **Source not read** | 3+ Phantoms and no or partial source Read history | AI generated using domain knowledge without reading source |
|
|
181
|
+
| **Partial reading contamination** | Partial items exceed 30% of total | AI read source partially and filled rest with inference |
|
|
182
|
+
| **Reconstruction modification** | Source value exists but unit/format/range modified in TC | LLM paraphrase process contamination |
|
|
183
|
+
| **Source declaration absent** | Source file not specified when generating artifact | Process design stage problem |
|
|
184
|
+
|
|
185
|
+
**Simplification guard**: If 0 Phantoms, skip Step 4 entirely. Replace with one line: "Source grounding adequate."
|
|
186
|
+
|
|
187
|
+
> **Detail**: See `SKILL_detail.md §Step4-Detail` — Step 4 output format template — read when writing the pattern diagnosis section.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
### Step 5. Post-Fix Re-audit (Optional)
|
|
192
|
+
|
|
193
|
+
Re-run back-trace for S-grade blocker claims after fixes are complete. Activate when 1+ S-grade blockers exist and fix is immediately possible.
|
|
194
|
+
|
|
195
|
+
**Done When (re-audit)**: Back-trace results for fixed claims all show Grounded (✅) status.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Completion Declaration Format
|
|
200
|
+
|
|
201
|
+
> **Template**: See `SKILL_detail.md §Report-Template` — full completion declaration format — read when producing the final audit summary.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Connected Skills
|
|
206
|
+
|
|
207
|
+
| Situation | Connected Skill |
|
|
208
|
+
|---|---|
|
|
209
|
+
| Simultaneously verify output patterns (self-declarations, cushion language) | `/steel-quench` Wave 1 "real-use verification" angle |
|
|
210
|
+
| Re-verify Phantom patterns from external user perspective | `/sim-conductor Area A` |
|
|
211
|
+
| Source not-read is a harness structure problem | `/harness-doctor` |
|
|
212
|
+
| Phantom pattern is a candidate for new rule items | `fh-meta:persona-innovator` |
|
|
213
|
+
| Redesign the artifact generation prompt itself | `/meta-prompt-builder` |
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## External User Environment Adaptation
|
|
218
|
+
|
|
219
|
+
This skill can be used independently without the full meta-harness structure.
|
|
220
|
+
|
|
221
|
+
**How to declare source files**: When generating artifacts, specify "source: [file path list]", or provide source files when invoking this skill.
|
|
222
|
+
|
|
223
|
+
**External environment fallback**:
|
|
224
|
+
- If no `tracks/_meta/` → skip persistence step
|
|
225
|
+
- If no project-specific rules (like PFD) → output Phantom pattern summary only
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Done When
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
Step 1 claim extraction complete
|
|
233
|
+
+ Step 2 all claims back-traced (using Read tool — no inference judgment)
|
|
234
|
+
+ Step 3 Phantom severity classification + prescription output
|
|
235
|
+
+ Step 4 process pattern diagnosis complete (skip if 0 Phantoms)
|
|
236
|
+
+ "phantom-quench Complete" declaration output
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Verdict: PASS (0 Phantom claims) | CONDITIONAL_PASS (LOW-severity Phantoms only, prescriptions noted) | FAIL (1+ HIGH/MEDIUM Phantom — broken path, phantom file, or stale external link) | ESCALATE (scope unclear or claim extraction impossible)
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Operating Notes
|
|
244
|
+
|
|
245
|
+
- **Never back-trace by inference**: Judging "this value is probably in the source" treats it as Partial not Phantom. Always directly confirm with Read + Grep.
|
|
246
|
+
- **Partial is not Grounded**: Processing similar-value-in-source as Grounded misses the reconstruction modification pattern.
|
|
247
|
+
- **Source not declared itself is S-grade**: If source is not declared when making an artifact, no claim can subsequently be verified. Recommend mandating source declaration in the process design stage.
|
|
248
|
+
- **Recommended to use with steel-quench**: steel-quench quenches structural flaws, phantom-quench ensures source consistency. The two skills are orthogonal and artifact quality assurance is strengthened when used together.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# phantom-quench — Execution Detail
|
|
2
2
|
|
|
3
3
|
On-demand reference. Load the section indicated by the pointer in SKILL.md.
|
|
4
4
|
|
|
@@ -153,7 +153,7 @@ Process prescription:
|
|
|
153
153
|
**Completion Declaration Format**
|
|
154
154
|
|
|
155
155
|
```
|
|
156
|
-
##
|
|
156
|
+
## phantom-quench Complete
|
|
157
157
|
|
|
158
158
|
Audit scope: {artifact file} / source {N files}
|
|
159
159
|
{N} total claims audited
|
|
@@ -179,4 +179,4 @@ Next actions:
|
|
|
179
179
|
|
|
180
180
|
**Evidence Record**
|
|
181
181
|
|
|
182
|
-
- **Verified in practice**: TC generation without reading source files → steel-quench passes →
|
|
182
|
+
- **Verified in practice**: TC generation without reading source files → steel-quench passes → phantom-quench back-trace detects numerous Phantoms (notifications vs. push notifications, version names vs. non-enrolled, bottom sheet vs. screen navigation). **Procedure**: Read sources in order then regenerate → replace with source-based TCs. **Recurrence prevention**: Source gate implementation — FileNotFoundError if required source files absent. steel-quench misses this because: outputs look logically sound so pattern attacks cannot identify Phantoms — only source back-tracing can detect them.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pipeline-conductor
|
|
3
|
-
description: Chains the four core FH verification pipelines (harvest-loop → steel-quench →
|
|
3
|
+
description: Chains the four core FH verification pipelines (harvest-loop → steel-quench → phantom-quench → sim-conductor) into a single gated sweep. Accepts a scope (single skill, specific asset, full harness) and aggregates results into one structured report. Supports --quick mode (steps 2+3 only) and --full mode (all four steps). Triggered by "run the full pipeline", "chain all verifications", "end-to-end sweep", "pipeline-conductor", or "verify everything".
|
|
4
4
|
user-invocable: true
|
|
5
5
|
allowed-tools: ["Read", "Write", "Bash", "Grep", "Glob", "Agent"]
|
|
6
6
|
model: sonnet
|
|
@@ -10,7 +10,7 @@ model: sonnet
|
|
|
10
10
|
|
|
11
11
|
Chains the four standalone FH verification pipelines into a gated sequence. Each step receives the previous step's verdict before proceeding. Aggregates all findings into a single structured report at the end.
|
|
12
12
|
|
|
13
|
-
The gap this closes: harvest-loop, steel-quench,
|
|
13
|
+
The gap this closes: harvest-loop, steel-quench, phantom-quench, and sim-conductor are each invocable independently but have no automatic hand-off between them. Running them sequentially by hand loses inter-step signal — a FAIL in step 2 should block step 3 rather than silently continuing. pipeline-conductor enforces that ordering.
|
|
14
14
|
|
|
15
15
|
## Triggers
|
|
16
16
|
|
|
@@ -92,7 +92,7 @@ Do not infer scope — a wrong scope produces misleading verdicts.
|
|
|
92
92
|
|
|
93
93
|
The four constituent skills use heterogeneous scope models. Translate the pipeline scope to each skill's invocation form before running any step:
|
|
94
94
|
|
|
95
|
-
| Pipeline scope | harvest-loop (Step 1) | steel-quench (Step 2) |
|
|
95
|
+
| Pipeline scope | harvest-loop (Step 1) | steel-quench (Step 2) | phantom-quench (Step 3) | sim-conductor (Step 4) |
|
|
96
96
|
|---|---|---|---|---|
|
|
97
97
|
| Single SKILL.md | Check session findings relevant to this skill; propose mode only | Adversarial attack on this SKILL.md | Back-trace claims in this SKILL.md to declared sources | Area D (artifact review) on this SKILL.md |
|
|
98
98
|
| Specific directory | Check session findings in this domain | Attack all SKILL.md files in directory | Back-trace all claims in directory | Area A + Area D on the domain |
|
|
@@ -219,13 +219,13 @@ Run steel-quench against the target scope.
|
|
|
219
219
|
|
|
220
220
|
---
|
|
221
221
|
|
|
222
|
-
## Step 3.
|
|
222
|
+
## Step 3. phantom-quench — Phantom Claim Detection
|
|
223
223
|
|
|
224
|
-
Run
|
|
224
|
+
Run phantom-quench against the target scope.
|
|
225
225
|
|
|
226
226
|
**What it checks**: Proper nouns, numerical values, file paths, and branching conditions back-traced to declared source files. Claims not found in source are marked Phantom.
|
|
227
227
|
|
|
228
|
-
**Invocation**: Run
|
|
228
|
+
**Invocation**: Run phantom-quench scoped to the same target as Steps 1 and 2.
|
|
229
229
|
|
|
230
230
|
**Load-bearing Phantom** (binary test — apply mechanically):
|
|
231
231
|
|
|
@@ -238,7 +238,7 @@ All other locations (§Triggers, advisory §Chains language, frontmatter descrip
|
|
|
238
238
|
|
|
239
239
|
**Verdict criteria**:
|
|
240
240
|
|
|
241
|
-
|
|
|
241
|
+
| phantom-quench result | pipeline-conductor verdict |
|
|
242
242
|
|---|---|
|
|
243
243
|
| 0 Phantoms, all claims grounded | `PASS` |
|
|
244
244
|
| Phantom claims found, none load-bearing (binary test) | `CONDITIONAL_PASS` — list Phantoms |
|
|
@@ -246,12 +246,12 @@ All other locations (§Triggers, advisory §Chains language, frontmatter descrip
|
|
|
246
246
|
| Grounding ambiguous (source file exists but content unclear) | `ESCALATE` |
|
|
247
247
|
|
|
248
248
|
**On FAIL**: Output the load-bearing Phantom(s). Ask:
|
|
249
|
-
> "
|
|
249
|
+
> "phantom-quench found a load-bearing Phantom claim. Fix and re-run Step 3, or abort the sweep?"
|
|
250
250
|
|
|
251
251
|
**On CONDITIONAL_PASS**: Capture non-load-bearing Phantoms. Continue to Step 4.
|
|
252
252
|
|
|
253
253
|
```
|
|
254
|
-
[Step 3 —
|
|
254
|
+
[Step 3 — phantom-quench]
|
|
255
255
|
Verdict: {verdict}
|
|
256
256
|
Basis: {one-line}
|
|
257
257
|
Phantoms: {count} — {load-bearing: Y/N} — {top item or "none"}
|
|
@@ -320,7 +320,7 @@ pipeline-conductor — Sweep Report
|
|
|
320
320
|
Step 0.5 — return-path-gate: {PASS / CONDITIONAL_PASS / FAIL / SKIPPED / degraded}
|
|
321
321
|
Step 1 — harvest-loop: {PASS / CONDITIONAL_PASS / FAIL / ESCALATE / SKIPPED}
|
|
322
322
|
Step 2 — steel-quench: {verdict}
|
|
323
|
-
Step 3 —
|
|
323
|
+
Step 3 — phantom-quench: {verdict}
|
|
324
324
|
Step 4 — sim-conductor: {verdict}
|
|
325
325
|
|
|
326
326
|
Overall: {CLEAN (--full) / CLEAN (--quick) / CLEAN (--no-sim) / PENDING / BLOCKED}
|
|
@@ -24,6 +24,7 @@ breaks the "public repo = model-agnostic methodology only" invariant.
|
|
|
24
24
|
|
|
25
25
|
- `/public-surface-audit`
|
|
26
26
|
- `/public-surface-audit --target <repo path>`
|
|
27
|
+
- `/public-surface-audit --json` (machine-parseable verdict for hook-gating — see Step 5)
|
|
27
28
|
- "Did I leak anything into the public repo?", "public surface audit", "private token scan"
|
|
28
29
|
- "Check tracked files for private tokens", "is my public/private split clean?"
|
|
29
30
|
- "Did any operator-private token survive into a tracked file?", "scan before publish"
|
|
@@ -137,6 +138,38 @@ not "edit the HTML by hand". Flag them with a `(generated artifact)` note.
|
|
|
137
138
|
|
|
138
139
|
---
|
|
139
140
|
|
|
141
|
+
## Step 3b. FP Hygiene — Placeholder & Example Exclusion
|
|
142
|
+
|
|
143
|
+
A scan that flags its own placeholders erodes trust. Two **value-shape** classes are never real leaks
|
|
144
|
+
and are dropped before the report — imported from `gstack-redact`'s canonical-example allowlist, scoped
|
|
145
|
+
in PSA's direction to the *matched token* (not the whole line, so a real leak sharing a substring still
|
|
146
|
+
reports):
|
|
147
|
+
|
|
148
|
+
- **Angle-bracket placeholders** — the matched token is itself a placeholder (`<your-unix-username>`,
|
|
149
|
+
`<company-asset>`, `{project}`). PSA dogfoods these in Step 1; the scan must not report them as leaks.
|
|
150
|
+
- **Canonical dummy values** — the matched token is a documented example/dummy (`EXAMPLE`, `dummy`,
|
|
151
|
+
`changeme`, `REDACTED`, `xxxx`, AWS-doc keys like `AKIAIOSFODNN7EXAMPLE`). A high-entropy *example* is
|
|
152
|
+
not a secret.
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# FP-hygiene tests the MATCHED TOKEN only — never the whole line. A line-level `grep -v` would
|
|
156
|
+
# suppress a real leak that merely *mentions* an example (e.g. `user=<realname> # see EXAMPLE.md`),
|
|
157
|
+
# violating PSA's "allowlist tight" rule. So extract the matched span per hit and drop it only when
|
|
158
|
+
# the span is *entirely* a placeholder/example (anchored ^…$).
|
|
159
|
+
PLACEHOLDER='^(<[a-z0-9_-]+>|\{project\}|EXAMPLE|dummy|changeme|REDACTED|xxxx)$'
|
|
160
|
+
grep -nIE "$regex" $(cat /tmp/_psa_tracked.txt) 2>/dev/null | while IFS= read -r hit; do
|
|
161
|
+
tok=$(printf '%s' "$hit" | grep -oiE "$regex" | head -1)
|
|
162
|
+
printf '%s' "$tok" | grep -qiE "$PLACEHOLDER" && continue # token IS a placeholder → drop
|
|
163
|
+
printf '%s\n' "$hit"
|
|
164
|
+
done
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
This differs from the Step 2 allowlist: Step 2 suppresses by **file::token legitimacy**, Step 3b by
|
|
168
|
+
**token value-shape**. Both run — Step 2 then Step 3b. Keep it tight (PSA's "allowlist tight" rule): if a
|
|
169
|
+
token only *contains* an example substring but is otherwise a real private value, it still reports.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
140
173
|
## Step 4. Report
|
|
141
174
|
|
|
142
175
|
```
|
|
@@ -175,6 +208,32 @@ tokens in {N} tracked files (X allowlist-suppressed)." Do not print empty severi
|
|
|
175
208
|
|
|
176
209
|
---
|
|
177
210
|
|
|
211
|
+
## Step 5. Machine Output (`--json`) — Hook-Gateable Verdict
|
|
212
|
+
|
|
213
|
+
By default PSA prints the Step 4 human report. With `--json`, emit a machine-parseable verdict so a
|
|
214
|
+
**pre-publish / pre-push hook can gate on counts mechanically** — turning PSA from advisory into
|
|
215
|
+
enforceable (FH's "enforcement is a hook, not a prompt" principle). Imported from `gstack-redact --json`.
|
|
216
|
+
|
|
217
|
+
```json
|
|
218
|
+
{
|
|
219
|
+
"target": "{REPO_PATH}",
|
|
220
|
+
"tracked_files": 0,
|
|
221
|
+
"findings": [
|
|
222
|
+
{"file": "path", "line": 42, "token": "<matched>", "severity": "HIGH", "class": "username"}
|
|
223
|
+
],
|
|
224
|
+
"counts": {"HIGH": 0, "MED": 0, "LOW": 0, "suppressed": 0},
|
|
225
|
+
"verdict": "CLEAN"
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
`verdict` is one of `CLEAN | REVIEW | LEAK | NOT_CONFIGURED` (same thresholds as Step 4). **`verdict` is
|
|
230
|
+
authoritative — never gate on `counts` alone**: a counts-only check (`HIGH==0 && MED==0`) misreads
|
|
231
|
+
`NOT_CONFIGURED` (which also has zero counts) as a pass. A caller blocks when `verdict` is `LEAK` **or**
|
|
232
|
+
`NOT_CONFIGURED` — an unconfigured scan is not a pass (the same silent-failure guard as the human path:
|
|
233
|
+
absence ≠ CLEAN).
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
178
237
|
## Connected Skills
|
|
179
238
|
|
|
180
239
|
| Situation | Connected skill |
|
|
@@ -182,7 +241,7 @@ tokens in {N} tracked files (X allowlist-suppressed)." Do not print empty severi
|
|
|
182
241
|
| Broader pre-publish repo readiness (README, license, API keys) | `/marketplace-gate` (Check 5 Public Safety is the wide net; this skill is the private-token detail) |
|
|
183
242
|
| A leak is a recurring process gap, not a one-off | log via `field-harvest` → candidate `#rule-candidate` |
|
|
184
243
|
| Where should the leaked content actually live? | `/asset-placement-gate` (hub vs project vs CLAUDE.local.md) |
|
|
185
|
-
| Phantom refs / stale links on the same surface | `/
|
|
244
|
+
| Phantom refs / stale links on the same surface | `/phantom-quench` (forward axis — orthogonal to this leak axis) |
|
|
186
245
|
|
|
187
246
|
---
|
|
188
247
|
|
|
@@ -222,3 +281,20 @@ Verdict: **CLEAN** (0 tokens after allowlist) | **REVIEW** (LOW-only — drift,
|
|
|
222
281
|
leak even though hand-editing it is wrong — report it, prescribe "regenerate from sanitized source".
|
|
223
282
|
- **Allowlist tight, not loose**: when unsure whether a reference is legitimate, report it. A false LEAK
|
|
224
283
|
the user dismisses is cheaper than a real leak suppressed by an over-broad allowlist.
|
|
284
|
+
- **Auto-redact deliberately not imported**: `gstack-redact` offers `--auto-redact` (rewrite + diff). PSA's
|
|
285
|
+
philosophy is *report + prescribe; the human decides where the line goes* — auto-redacting a HIGH
|
|
286
|
+
(username/company) hit would pre-empt that judgment, and auto-editing a generated artifact is explicitly
|
|
287
|
+
wrong (regenerate from source). If ever imported, restrict to the MED absolute-home-path class only
|
|
288
|
+
(mechanically safe: `/Users/<user>/` → `~/` or `{project}`), never HIGH, never generated files.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Sister-Asset Provenance
|
|
293
|
+
|
|
294
|
+
Step 3b (FP hygiene) and Step 5 (`--json`) were imported from **garrytan/gstack** `gstack-redact`
|
|
295
|
+
(`lib/redact-engine.ts`) during a hands-on sister-asset cross-audit (2026-06-06; see
|
|
296
|
+
`tracks/_audit/session_2026_06_06_gstack_sister_handson.md`). They are adapted to PSA's operator-IP
|
|
297
|
+
ontology — `gstack-redact`'s generic secret/PII classes (AWS / PEM / JWT / hostname) stay out of PSA's
|
|
298
|
+
scope (orthogonal coverage: PSA = operator-IP leak, redact = generic secret). The reverse direction
|
|
299
|
+
(PSA's operator private-codename + bare-username classes, which `gstack-redact` structurally cannot
|
|
300
|
+
detect) is a candidate contribution back to gstack.
|
|
@@ -132,7 +132,7 @@ Apply the following decision rules per (caller → callee) pair.
|
|
|
132
132
|
| Caller identity | Tier |
|
|
133
133
|
|---|:---:|
|
|
134
134
|
| Core pipeline skill (harvest-loop, steel-quench, apex-review, agent-composer, sim-conductor, pipeline-conductor) | HIGH |
|
|
135
|
-
| Diagnostic or gate skill (harness-doctor,
|
|
135
|
+
| Diagnostic or gate skill (harness-doctor, phantom-quench, verify-bidirectional, return-path-gate) | MEDIUM |
|
|
136
136
|
| Utility or advisory skill (context-doctor, plugin-recommender, frontier-digest, etc.) | LOW |
|
|
137
137
|
|
|
138
138
|
*Callee consequence tier*:
|
|
@@ -239,7 +239,7 @@ Verdict: PASS (0 HIGH severity OPEN chains) | CONDITIONAL_PASS (MEDIUM/LOW sever
|
|
|
239
239
|
| Situation | Connected Skill |
|
|
240
240
|
|---|---|
|
|
241
241
|
| Check harness structural completeness alongside chain closure | `/harness-doctor` |
|
|
242
|
-
| Verify phantom references in §Chains targets (callee skill actually exists) | `/
|
|
242
|
+
| Verify phantom references in §Chains targets (callee skill actually exists) | `/phantom-quench` |
|
|
243
243
|
| Run chain audit as pre-flight before parallel dispatch | `pipeline-conductor` Step 0.5 calls this skill |
|
|
244
244
|
| Prescribe verdict format for callee skills missing structured output | `/meta-prompt-builder` |
|
|
245
245
|
| Chain OPEN finding becomes improvement candidate | `/field-harvest` |
|
|
@@ -79,7 +79,7 @@ Read target artifact(s) → classify on 5 dimensions → output recommendation
|
|
|
79
79
|
| `audience` | external installer / first-time user → newcomer↑ · internal team only → devil↑ |
|
|
80
80
|
| `claim_density` | 3+ stated benefits or superlatives → devil-advocate↑ |
|
|
81
81
|
| `risk_level` | external publish / marketplace listing → steel-quench prerequisite triggered |
|
|
82
|
-
| `novelty` | first-of-its-kind / no prior session evidence →
|
|
82
|
+
| `novelty` | first-of-its-kind / no prior session evidence → phantom-quench recommended |
|
|
83
83
|
|
|
84
84
|
```
|
|
85
85
|
Target Profile output:
|
|
@@ -92,7 +92,7 @@ Recommendation:
|
|
|
92
92
|
Areas: [list + rationale]
|
|
93
93
|
Persona composition: [list + weight]
|
|
94
94
|
Scale: [Minimum 3 | Extended 4–8 | Full ≤16]
|
|
95
|
-
Prerequisites: [steel-quench /
|
|
95
|
+
Prerequisites: [steel-quench / phantom-quench / none]
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
#### Persona Discovery (after profile → before dispatch)
|
|
@@ -271,6 +271,63 @@ Domain-expert objection (E-1) + Practitioner confusion (E-2) in parallel → Pat
|
|
|
271
271
|
|
|
272
272
|
---
|
|
273
273
|
|
|
274
|
+
## Step 1.5 — Persona Output Protocol + Neutral Synthesizer (parallax)
|
|
275
|
+
|
|
276
|
+
Generalized from the field `deep-insight` multi-persona pattern (fh-be #7), domain-stripped and renamed
|
|
277
|
+
**parallax** for public FH (it is a mode of this skill, not a separate skill — see asset-placement
|
|
278
|
+
2026-06-06). It gives the persona dispatch above a shared output contract + a neutral aggregator, so
|
|
279
|
+
multi-persona findings stay comparable and the synthesis injects no bias of its own.
|
|
280
|
+
|
|
281
|
+
**Shared persona output protocol** — every dispatched persona emits the same shape, whatever its lens:
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
### Strengths (0–3, from this persona's viewpoint)
|
|
285
|
+
### Concerns
|
|
286
|
+
Critical — compile/runtime failure · clear logic error · data corruption · security leak
|
|
287
|
+
Important — significant user/service impact in a plausible scenario
|
|
288
|
+
Suggestion — optional improvement
|
|
289
|
+
(each item: [file:line or quoted span] one-line summary — rationale)
|
|
290
|
+
### Open questions (0–3 items needed for a decision)
|
|
291
|
+
### Absence check (outside-vantage personas — newcomer/integrator: what does the artifact FAIL to
|
|
292
|
+
specify that this standpoint needs? discoverability · undocumented contract ·
|
|
293
|
+
unstated assumption. A normal, self-administrable rubric item — surfaces real gaps.)
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
**FP judgment discipline** — only escalate when confident. Never escalate: pre-existing issues not
|
|
297
|
+
introduced by this change · style/quality without a quotable rule · linter-catchable · speculative
|
|
298
|
+
("might break if…") · subjective preference (→ Suggestion). **If not confident, do not mark it** — false
|
|
299
|
+
positives erode reviewer trust.
|
|
300
|
+
|
|
301
|
+
**Neutral synthesizer** — the aggregator is a NON-persona; it adds no opinion of its own:
|
|
302
|
+
- No opinion injection — never a conclusion no persona stated.
|
|
303
|
+
- Preserve attribution — always traceable which persona said what.
|
|
304
|
+
- Priority labels verbatim — Critical/Important/Suggestion carried as the persona set them.
|
|
305
|
+
- No forced consensus or forced conflict — report Common opinions (2+ personas agree) and Conflicts
|
|
306
|
+
(position A vs B, each with rationale) as-is. Feeds Step 2 M/S/R triage (M ← Critical or 2+ personas).
|
|
307
|
+
|
|
308
|
+
The two severity vocabularies are layered, not redundant: a persona running **in isolation** assigns only
|
|
309
|
+
its own Critical/Important/Suggestion — it cannot assign M/S/R, since `S = found by 3+ personas` depends on
|
|
310
|
+
cross-persona agreement the isolated persona never sees. The synthesizer is the only context that can triage
|
|
311
|
+
to M/S/R. So isolation *requires* the per-persona → synthesized two-layer split.
|
|
312
|
+
|
|
313
|
+
**External-harness persona sourcing** — isomorphic to steel-quench Step 0.4 (Specialized Reviewer
|
|
314
|
+
Discovery) + Wave 5 (external CLI teams). A needed lens may be sourced from an **installed sibling
|
|
315
|
+
harness**, not only the built-in palette — e.g. gstack `/review` (staff-engineer), `/cso`
|
|
316
|
+
(security-officer), `/qa` (QA-lead) when gstack is installed. sim-conductor orchestrates; the sibling
|
|
317
|
+
supplies the specialist lens. Same ①installed → ②fallback → ③fetch priority as Persona Discovery — an
|
|
318
|
+
external harness's review-skills count as ① installed sources, widening the persona pool without FH
|
|
319
|
+
shipping every specialist.
|
|
320
|
+
|
|
321
|
+
> **Absence check — resolved (added above)**: the clean replication (fh-be RESULT9 Arm F: identical
|
|
322
|
+
> artifact, explicit omission prompt, ownership-only variable) found self ≈ isolated (~90% overlap) —
|
|
323
|
+
> **omission-detection is self-administrable when explicitly asked**, refuting the earlier "the author
|
|
324
|
+
> can't see their own omissions" (Arm E, a prompt/design-drift artifact). So the Absence check is a
|
|
325
|
+
> normal, valuable rubric item (it surfaces real undocumented-contract gaps), not a special isolation-only
|
|
326
|
+
> power. The pattern's value is rubric/standpoint *supply + routine enforcement* (copyable utility), not
|
|
327
|
+
> de-biasing — see `knowledge/shared/patterns/multi-persona-review.md`.
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
274
331
|
## Step 2 — Synthesis
|
|
275
332
|
|
|
276
333
|
| Tier | Criteria | Action |
|
|
@@ -144,10 +144,10 @@ Target Profile:
|
|
|
144
144
|
novelty: high (references recent paper)
|
|
145
145
|
|
|
146
146
|
Recommendation:
|
|
147
|
-
Areas: D-code +
|
|
147
|
+
Areas: D-code + phantom-quench (quantitative claims)
|
|
148
148
|
Persona composition: challenger (claim-evidence), domain-expert (arXiv validity)
|
|
149
149
|
Scale: Minimum (3)
|
|
150
|
-
Prerequisites:
|
|
150
|
+
Prerequisites: phantom-quench recommended (novelty + citations)
|
|
151
151
|
```
|
|
152
152
|
|
|
153
153
|
---
|