| name | haipipe-probe |
| description | The shared probe model: a consumer-level Q/A map that binds a neutral Q-executor by PATH to a QA-bank file in the probe-unaware task/discovery bank. Consumer families own their persisted QA-probe record and local overlay; this skill owns stake stripping, the five-step loop, bank independence, and the QA evidence boundary. Trigger: probe, Q-executor, A-consumer, QA-probe, QA-bank, QA file, qa verb, state, evidence, /haipipe-probe. |
| allowed-tools | Bash, Read, Grep, Glob, Agent, Skill |
| metadata | {"version":"0.12.0","last_updated":"2026-08-06","summary":"Twin-QA vocabulary finalized (JL 260806): QA-bank is the original, QA-probe the consumer's stub; the persisted consumer surface is the QA-probe record, and the four slot words are capitals everywhere: Q-consumer, A-consumer, Q-executor, A-executor."} |
WHERE A QA-PROBE RECORD LIVES IS THE CONSUMER'S CHOICE, not this model's. This
skill owns the crossing: stake stripping, MATCH-before-DISPATCH, and the
bank's independent QA evidence. A consumer skill owns its record path, its
evidence-page divisions, QA-probe headings, and local state overlay. For Paper,
read paper/haipipe-paper/probe/topic-entry-contract.md before
authoring an evidence page or its QA-probes; it defines the S03 Literature and S04 Value runtime shape.
Canonical lifecycle vocabulary, ruled 260804 and renamed 260806: PROBE is
the Page phase, a lowercase probe is one question-and-answer exchange, and a
QA-probe record is its persisted consumer-side surface. One conversation, two
QAs: the QA-bank is the original, the file the executor writes in its own tree;
the QA-probe is the consumer's stub that points at it. The four slot words are
CAPITALS everywhere, including heading slots: Q-consumer, A-consumer,
Q-executor, A-executor; they name SLOTS, never files. The older word entry
still appears in checker names, paths, and executable schemas below. Read it as
the persisted QA-probe record, not as another Page Type, phase, or conceptual
layer.
Skill: haipipe-probe โ the probe layer
A probe maps a question your paper or application cannot answer itself to an answer in the bank.
It lives in the consumer as one topic folder containing one file per Q-executor, and binds each question by PATH to a QA file that the executor wrote.
A paper may instead record a terminal concern when no bank can close the doubt; that form is never dispatched.
A probe is COMMUNICATION between a consumer and an executor โ it carries a clean question out and a general answer back, while its ### Q-consumer copy remains review-only on the consumer side.
Spec and rationale (why it is built this way): ../../diagrams/01-probe-qa-260726/.
This file is the shared execution model and vocabulary source. A consumer-specific
contract wins for the storage path, page hierarchy, and entry headings it owns.
โ ๏ธ ONE SOURCE FOR THE VOCABULARY.
The task/discovery twins, the qa verbs, the probe workers, and check-probe-cards.sh COPY the canonical strings from here.
Change a state: value, a field name (state: / started: / by:), the TTL constant QA_WORKING_TTL_HOURS, the timestamp format YYYY-MM-DDTHH:MM, or the set -C idiom HERE, then propagate.
What a probe is
YOUR PAPER / APPLICATION THE BANK (task = discovery, probe-UNAWARE)
โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1-probes/PP03_welldoc/QX1_cycle.md tasks/A03_welldoc_cycle_check/01_column_scan/
## QX1 "cycle indicator?" โโโ workflow/plan.yaml ยท results/ (code)
### Q-executor โโโโโโโโโโโโโ โโโ QA/1-cycle-indicator.md (readable)
### bank binding ยท target โโผโโโโโโโโโโโโโโโโถ "none โ 40 tables scanned"
### A-executor: "โฆ" โโโโโโโโโโ the answer comes back as a FILE the executor wrote
The question crosses as a STRING in an agent's prompt (the Q-executor), never as a file on the bank side.
The bank never learns probes exist: no mailbox, no back-reference, no probe id under tasks/ or discoveries/.
The answer comes back as a QA file the executor wrote for its own reasons โ readable, general, with no consumer in it.
That asymmetry is the whole design: the same answer is reusable, because two consumers read the same file differently.
YOUR QUESTION AND THE EXECUTOR'S QUESTION ARE NOT THE SAME QUESTION.
Yours carries the STAKE โ "does WellDoc have a cycle column? (my claim C6 dies if it does)".
The executor must never see that stake, or it shapes the answer around your hypothesis.
So the probe writes a Q-EXECUTOR: the SAME question in plain, general language โ "scan the WellDoc tables for a cycle column; report present or absent" โ with the stake stripped out.
The Q-executor is the executor-facing question, and the ONLY thing that crosses to the bank.
Writing it โ your question โ the Q-executor โ is the probe's core act.
The probe does NOT judge.
It carries the answer (### A-executor, a copy of the QA answer) back to the consumer, which interprets it into its own A-consumer in the stage doc; whether that settles a claim is the consumer's own business, in its own 1-claims.md, and never the probe's.
THE FOUR FORMS โ a question and its answer, on each side of the wall:
CONSUMER (holds the stake) EXECUTOR (never sees it)
โโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ
QUESTION Q-consumer โโT1 stripโโโโโโโถ Q-executor = `### Q-executor`
(stage doc, per consumer) the ONLY thing sent to the bank
ANSWER A-consumer โโโT2 interpretโโ A-executor = `### A-executor`
(stage doc, per consumer) (a copy of the QA file's ## Answer)
The probe file holds the EXECUTOR side of both โ ### Q-executor (the question OUT) and ### A-executor (the answer BACK, copied in as the consumer-side single source of truth) โ plus a review-only ### Q-consumer map.
The AUTHORITATIVE CONSUMER side lives in the stage doc: the Q-consumer (the question, with its stake) and the A-consumer (the per-consumer interpretation, station โก).
One Q-executor may serve SEVERAL Q-consumers โ many consumer questions reduce to the same executor question โ so the probe entry copies each original under ### Q-consumer for audit.
That copy may preserve the stake; it never crosses the wall.
The two arrows are the two loop steps: T1 = โ ORGANIZE (write ### Q-executor), T2 = โค INTERPRET (write ### A-executor, a copy of the QA answer; each consumer then writes its own A-consumer in its stage doc).
Q-consumer is the logical collection where a stage RAISES its questions.
Its physical adapter belongs to the consumer family.
A Board-first paper S page stores each Q-consumer as a recognizable,
Content-linked Aim in ## Aims; an application that does not use Board may
keep a literal Q-consumer section.
There is one record per question, with an id, title, stake-bearing description,
reason, probe pointer, and answer (the answer lands later, at PROBE):
- A<section>.<n> ยท Q-<Stage>-<n> ยท <question title>
**Done when:** <the answer is interpreted into this stage's Content>
**Description:** <what this question wants to know>
**Reason:** <which Content assertion depends on it and what breaks>
**Probe:** not opened yet
**Answer:** <empty until PROBE>
## States
- โฌ A<section>.<n> ยท <current fact about Q-<Stage>-<n>>
The Q-consumer id is CONSUMER-LOCAL โ Q-Seed-1, Q-Claim-6 (paper); each family owns its own scheme and the ids never collide across consumers, because a Q-consumer id (like a PP number) never crosses the wall. Only the Q-executor is shared vocabulary. (The resource stage already numbers this way.)
DRAFT RAISES; PROBE PLANS AND RUNS. DRAFT writes the stage's prose and the Q-consumer questions it cannot answer โ and stops there. It authors no probe entry, chooses no route, judges no bank, and never opens 1-probes/. Everything probe-shaped, all five steps, belongs to PROBE.
โ ๏ธ โ โก USED TO RUN AT DRAFT. The stated reason was to let ONE human gate review draft + probe plan together. That gate is GONE โ stages now declare gates: [check] โ so the reason evaporated and the steps went back where they belong. A DRAFT that writes a ### Q-executor is doing PROBE's job.
For each Q-consumer, PROBE runs the loop in order:
- โ ORGANIZE โ turn the Q-consumer into a probe ENTRY (below): find-or-open its
## QX<n>, write its ### Q-executor (the stake stripped out, plus the Deliverable / Accepted lines), copy the Q-consumer's original wording under ### Q-consumer, and choose its route (task | discovery). If an existing Q-executor already asks it, just add a ### Q-consumer bullet โ no new entry. If no bank could in principle close the doubt, record the paper-only terminal form (route: none, state: concern) and stop before MATCH.
- โก MATCH โ for non-concern entries, root the question to a SPECIFIC readable QA answer or to the bank work that must produce one (a read-only grep of
QA/*.md is legal โ LAW 1 bans the pen and the run, not the eye): bank records the verdict (reuse | run | code | new). reuse points target at the existing QA file; run / code / new use NEW <path> until the executor returns an answering QA file.
route and the bank verdict are AUTHORITATIVE โ PROBE writes them after MATCH, and the executor executes that plan rather than re-deciding it.
PROBE self-reviews its entries in a FRESH context against The PROBE entry-review checklist below, fixes mechanical defects, then continues within the stage's declared phase sequence.
There is no DRAFTโPROBE gate.
The stage's declared CHECK gate reviews the draft, probe entries, answers, and any explicit deferred entries together.
PROBE owns the whole loop: after โ ORGANIZE and โก MATCH it โข DISPATCHes the authorized new/run/code entries, โฃ POINTs their target, and โค INTERPRETs the answer into ### A-executor.
Ids: three LOCAL layers, none crossing the wall โ Q-<Stage>-<n> in the stage doc (consumer-local), QX<n> in the probe file (topic-local), QA/<n>-<slug>.md in the bank (task-folder-local). They bind by PATH (target), never by a shared id. Each stage-doc Q-<Stage>-<n> gains a โ 1-probes/PPnn_<topic>/QXn_<slug>.md pointer, and its state is DERIVED โ that state, not an empty target, marks a planned-but-unrun entry, because PROBE writes target.
The PROBE entry-review checklist
The PROBE self-review reads and judges what check-probe-cards.sh cannot; the checker still runs at CHECK as the mechanical backstop, and the two are complementary. A review sub-agent (fresh context) runs it per question ENTRY, plus per file:
Per ENTRY:
Q-executor: is CLEAN (LAW 2) โ no claim ids, no "our / this paper", no stake, no hint of the wanted answer; a stranger could answer it.
- the question is ANSWERABLE + SPECIFIC โ a concrete check with a definite result, not broad or ambiguous.
route is set (task | discovery), except the explicit terminal concern form uses none.
bank is judged by READING a SPECIFIC candidate folder ON THE ANSWER (topic-similarity is not a hit): reuse/run/code names the folder; new says nothing exists. A terminal concern has no bank or target because no executor can close it.
target agrees with bank (an existing QA path for reuse, or NEW <path> for run / code / new).
- each
### Q-consumer bullet copies in a real stage-doc Q-consumer (id + its original question); comparing that review-only copy with ### Q-executor proves the strip lost no factual request while the dispatch leaked no stake.
Per FILE:
- stake may appear only in the review-only
### Q-consumer copy; it is forbidden in ### Q-executor, ### A-executor, collector payloads, targets, and every bank file.
The stage's DRAFT worker separately checks the draft prose and Q-consumer shape against its own artifact spec. PROBE issues โ the PROBE worker fixes โ re-review (bounded); both phase records ride to CHECK in the owning S page's ## Log.
The answer's three stations
An answer returns from the bank and lands in THREE places โ each a more integrated FORM of the same fact, each ANCHORED to the one before, so a copy can never drift or be fabricated:
๐ฆ QA file โโถ โ PROBE FILE โโถ โก Q-consumer Answer โโถ โข STAGE CONTENT
(bank) ### A-executor: "12.9โฆ" Q-Claim-6 Answer: 12.9โฆ "โฆprescribe 12.9 more
[โ target QA file] [source: PPnn] MME (N=766k)โฆ"
form: the copy = single truth the per-consumer Q&A the reader-facing prose
written at: โค INTERPRET (PROBE) PROBE/REVISE (beside โ ) REVISE (weave + discharge)
- โ probe file โ
### A-executor, a COPY of the QA answer, anchored to the target QA file: the consumer-side single source of truth, reusable by every Q-consumer this Q-executor serves.
- โก Q-consumer
Answer: in the stage doc, PER CONSUMER, carrying a [source: PPnn] anchor to โ : the answer recorded NEXT TO its question, so the stage doc is a self-contained Q&A. A copy, but ANCHORED โ the anchor points at โ , which points at the QA file, so nothing drifts or is fabricated.
- โข stage content โ the answer WOVEN into the sentence(s) that cite
[Q<n>], citation discharged.
Each hop is a copy anchored to the last, so the whole chain is self-contained AND traceable โ you can walk content โ A-consumer โ A-executor โ QA to see where any error entered. The STAKE never enters this chain; it stays in the stage-doc Q-consumer. Same three stations in paper and application.
The probe file
papers/<P>/1-probes/PPNN_<topic>/, or identically applications/<A>/1-probes/PPNN_<topic>/ โ a FOLDER per topic.
One FOLDER per TOPIC; one FILE QXn_<slug>.md per Q-EXECUTOR. Each file holds a single ## QX<n> entry, oriented around the Q-executor, with its consumers attached. A Q-executor is path-addressable, and check-probe-cards.sh globs PP*/*.md.
PP numbers are consumer-local footnote numbers โ two consumers may both carry a PP04, and nothing collides because no PP id ever crosses to the bank.
The authoritative stake lives in each stage-doc Q-consumer.
Its original wording may be copied under ### Q-consumer for review, but that subsection is never dispatched.
Fillable form + rules: ref/probe-template.md. An entry is ## QX<n> + four ### subsections; no markdown tables.
# PP03 โ WellDoc data feasibility
## QX1 โ cycle indicator โ topic-local Q-executor id (QX1, QX2 โฆ within this file)
### Q-executor โ the question in general language, FROZEN โ the dispatch payload
Scan all 40 WellDoc CSV tables for menstrual/cycle/hormone columns. Report which exist, or none.
Deliverable: QA digest + machine artifact. Accepted: present | absent.
### Q-consumer โ who needs it; each bullet copies in that consumer's ORIGINAL question
* Q-Claim-6 โ does WellDoc have a cycle column? (C6 dies if it does)
* Q-Seed-1 โ is menstrual-cycle-labelled external data obtainable?
### bank binding
**route**: task โ the dispatch door (AUTHORITATIVE), chosen at PROBE
**bank**: reuse โ reuse | run | code | new โ what the bank needs (the PROBE โก verdict)
**target**: tasks/A03_welldoc_cycle_check/01_column_scan/QA/1-cycle-indicator.md
**state**: read โ DERIVED from disk, never asserted
### A-executor โ a COPY of the QA file's answer, written at harvest
No cycle column in 40 tables.
An entry's parts (## QX<n> + four ### subsections), all but ### A-executor authored at PROBE:
### Q-executor โ the executor-facing question (plain, general, no stake), frozen once written; the ONLY thing dispatched, and the ONLY shared (cross-consumer) form. Carries its own Deliverable: and Accepted: a | b lines.
### Q-consumer โ one bullet per Q-consumer this Q-executor serves: the stage-doc id + that consumer's ORIGINAL question, copied in (review-only, never dispatched). One Q-executor may serve several โ that is reuse, structurally. A stage gate greps these ids for its stage token (Q-Seed-1 โ seed).
### bank binding โ four **field**: lines:
route โ the dispatch door, task | discovery, chosen at PROBE; AUTHORITATIVE (the executor executes it, not re-decides). The terminal concern form uses none.
bank โ the PROBE โก verdict, read-only-grep judged: reuse (a results folder already answers it), run (folder + code exist, needs a run), code (folder exists, code needs a change first), new (nothing exists, create a folder). The plan; state is where it is now.
target โ a PATH to the answering QA FILE; NEW <path> while it does not exist yet, NEW ? while even the folder is undecided. Point at the FILE, never the folder.
state โ planned | commissioned | answered | read | answered-local | deferred | failed | concern.
The bank-facing lifecycle states are derived from disk, never asserted.
concern is the one consumer-side terminal ruling: the neutral Q-executor records a construct-validity threat, design limitation, or other doubt that neither task nor discovery can close.
It requires route: none, omits bank and target, leaves ### A-executor empty, and at final delivery carries **discussed**: <where the manuscript bears the limitation>.
It still uses the same four subsections and still requires a real, stake-free ### Q-executor; terminal does not mean structurally incomplete.
This โ not an empty target โ marks a planned-but-unrun entry.
deferred is the landing state for the PROBE CEILING: the entry's bank verdict sits ABOVE probe_depth, so answering it would cost money nobody has authorized. It is a CORRECT outcome, not a failure, and it must be DECLARED, never inferred โ a entry additionally carries . Without that line it is a bare and FAILs as . The distinction is the whole point: "nobody has paid for this yet" and "PROBE was skipped" must not look the same on disk.
The STAKE may appear only in the review-only ### Q-consumer copy of the stage-doc question.
It never appears in ### Q-executor, ### A-executor, a collector payload, a bank binding, or a QA file.
(An entry may also carry optional **values**: / **sources**: / **displays**: pointers under ### bank binding. Those are HARVEST-LANE fields โ how the consumer later pulls a number, a citation, or a figure out of the answer โ and they belong to the probe WORKERS, not to this model. See the workers.)
BUILD-LANE FIELDS.
An ENTRY whose answer legitimately takes DAYS-TO-WEEKS additionally carries, and ONLY at state: commissioned:
**owner**: <who> ยท **eta**: YYYY-MM-DD ยท **blocks**: <the claim/demand ids it gates>
**cross-project**: <sibling-project path NAMED as a reuse candidate, or `none-found`>
An ENTRY still commissioned when a gate runs is build-lane by definition, so these four fields are unconditional there.
cross-project: is how a named sibling-source candidate reaches the one human gate that authorizes SPEND โ the MATCH may NAME it but never CONSUME it.
The five-step loop
โ ORGANIZE collect the stage doc's Q-consumer questions into probe files (grouped by TOPIC), and
write each one's `### Q-executor` โ translate your question into the executor-
facing form, stripping the stake out; copy the Q-consumer under `### Q-consumer`.
โก MATCH SCAN the bank's existing QA files FIRST (grep + READ each state line), and set
`bank` (reuse | run | code | new). If one already answers it, REUSE (point, skip โข).
Only a `new`/`run`/`code` entry goes on.
โข DISPATCH only for `new`/`run`/`code`: hand the `### Q-executor` VERBATIM to the executor
orchestrator โ it returns a QA-file PATH (a new answer, written by the executor).
โฃ POINT set the entry's `target` at the answering QA file
โค INTERPRET copy the QA answer into `### A-executor` (each consumer then writes its own
A-consumer in its stage doc)
The order is the point: โก always precedes โข, so an existing answer is REUSED and only a genuinely new question ever creates new bank work.
PHASE MAP: ALL FIVE STEPS RUN AT PROBE. DRAFT's only probe-facing output is the Q-consumer list in the stage doc โ plain questions in the consumer's own words, with the stake attached. PROBE turns each into a ### Q-executor (โ ), roots it against the bank with a read-only grep (โก, LAW 1: the eye is allowed, the pen and the run are not), dispatches only what its ceiling allows (โข), points (โฃ) and harvests (โค).
THE COST LADDER โ cheap doors first; only T3/T4 summon an agent.
T0 JOIN another Q-executor already asks this โ add a Q-consumer bullet ~0
T1 LOCAL my own registries answer it โ answered-local ~0
T2 REUSE an existing QA file answers it โ point the entry 1 grep + 1 read
T3 ENRICH the task-folder exists, never asked this โ new entry โ โข agent
T4 FRESH no task-folder โ new entry โ โข agent
MOST entries should land on T2: in a healthy project the bank fills on its own, so most answers already exist before anyone asks.
MATCH ON THE ANSWER, NEVER ON THE TOPIC: a HIT counts only if the QA file LITERALLY ANSWERS the question โ read it; topic similarity is not evidence.
THE COLLECTOR PAYLOAD โ copy this block; do not invent variants:
Agent(haipipe-probe-q-executor-agent, prompt="
project_root: <project_root>
probe_files: <the PPNN/QXn files touched this run>
dispatch: <the run|code|new entries still owed, each with its authoritative route>
")
The collector's isolated context hands each ### Q-executor VERBATIM to
Agent(haipipe-task-orchestrator-agent) or
Agent(haipipe-discovery-orchestrator-agent) according to route, and returns
the answering QA-file path.
The stage and family PROBE worker never call those executor orchestrators directly.
Phase rules โ the followable checklists
The sections above are the MODEL; these are the DO-THIS rules a phase worker follows. A stage's DRAFT / PROBE worker POINTS here and adds only its FAMILY-specific rules (paper registries, harvest lanes, โฆ). On any conflict, the model sections above win.
DRAFT phase โ author content and raise questions:
- Write the stage artifact per the STAGE's own spec (real content; the spec is the stage skill's, not this file's).
- FIND the questions a reader or later phase must settle. Each stage skill owns a Questions this stage typically raises section naming the kinds it is prone to. Walk the draft against it and add whatever the mechanical sweeps returned unowned.
- For each open question, raise a
## Q-<Stage>-<n> or a Board-native Content-linked Aim in the owning S page's Q-consumer, then give that Aim one matching State row. Write no probe entry, ### Q-executor, route, bank, or target; never open 1-probes/.
- SELF-REVIEW the draft content and Q-consumer shape against the stage artifact spec; fix and re-review, bounded.
- Record
[DRAFT] in the owning S page's ## Log, then continue to the next declared phase. DRAFT opens no human gate unless a future stage explicitly lists draft in gates:.
PROBE phase โ author entries, run the loop, harvest, verify:
- โ ORGANIZE every open Q-consumer into a probe ENTRY: find-or-open
## QX<n>, write ### Q-executor with the stake stripped, copy the Q-consumer under ### Q-consumer, and choose route.
- โก MATCH against a SPECIFIC bank QA file on the answer, then set
bank and target. route / bank become AUTHORITATIVE here.
- Apply the invocation's
--depth ceiling. Write a real deferred ENTRY with **deferred**: depth-<n> ยท <reason> when answering would exceed it.
- โข DISPATCH the authorized
run/code/new entries through haipipe-probe-q-executor-agent; an existing answered target skips dispatch.
- โฃ POINT
target at the answering QA file, then OPEN it and read its state: line.
- โค INTERPRET โ copy the QA answer into
### A-executor only against an answered, non-superseded target; each consumer then writes its A-consumer, followed by the family harvest.
- Run the PROBE entry review and
check-probe-cards.sh before the stage's CHECK gate.
The QA-bank file โ the bank's answer
Every executor task-folder MAY carry a QA/ folder (task and discovery, same shape); not every one does.
QA/<n>-<slug>.md, where n is creation order โ ls QA/ IS the index. Slug only, never a PP id.
This file is the QA-bank, the ORIGINAL of the twin pair: its # Q is the Q-executor and its ## Answer the A-executor; every consumer's QA-probe points at it by path.
A QA file is a TICKET that becomes a RECEIPT: exactly ONE mutable field, the state: line.
# Q โ <the question, restated by the EXECUTOR in its own words>
- state: working | answered | superseded-by: QA/<m>-<slug>.md
- started: 2026-07-14T09:12 โ MANDATORY while state: working
- by: <run id | agent | human> โ optional
## Answer empty while working; filled at the executor's Report. plain words + [โ results/<file>] anchors
## Caveats what this does NOT establish
## Not-done what was asked but not resolved, and why
ONE WRITER โ the EXECUTOR, for the whole life of the file.
It writes twice: the CLAIM (state: working + started:) when it starts, and the COMPLETION (state: answered + the body) at its Report.
โ A CONSUMER never creates, claims, edits, completes, or supersedes a QA file โ a probe that finds a stale target re-points its OWN entry, never the file.
THE CLAIM MUST EXPIRE.
QA_WORKING_TTL_HOURS = 24 โ a working file whose started: is older is STALE and restartable.
THE RACE GUARD โ set -C (noclobber), and nothing more.
Two runs may both pick QA/3-; the claim is created under noclobber, and the loser re-scans and defers.
SUPERSESSION.
A later run whose answer CHANGES writes a NEW file and appends superseded-by: QA/<m>-<slug>.md to the OLD file's state line; the body is never rewritten.
The executor-side flow that WRITES these files (the qa verb: scan โ digest โ run) lives in ../../task/haipipe-task/fn/qa.md and its discovery twin.
The two LAWS
LAW 1 โ A CONSUMER SESSION NEVER RUNS BANK WORK INLINE.
Dispatch means hand the ### Q-executor VERBATIM, and nothing else โ never the ### Q-consumer copies, never the probe file, never the paper.
It is broken the moment a consumer session runs bank work or writes a bank file (including a QA digest it thinks it is being helpful by authoring).
A read-only grep of {tasks,discoveries}/**/QA/*.md is LEGAL and REQUIRED โ that IS step โก MATCH. The wall bans the PEN and the RUN, not the EYE.
LAW 2 โ BACKSTOP LINT, ON TWO SURFACES.
Q-executor blocks carry no claim ids and no stake words ("rescue", "we want", "the hoped-for").
The bank's QA/*.md carry no consumer vocabulary (claim ids, "the paper" meaning our paper).
Section state
Bank-facing state is never a claim about an agent; it is checkable on disk, and the reader OPENS the file โ an ls is not enough.
concern is the declared terminal exception because its defining fact is that no bank route can settle it.
planned the entry exists; the target task-folder is missing (or `NEW โฆ`)
commissioned the task-folder exists with no answered QA file yet, OR the target QA file is `working`
answered the target QA file exists AND is `state: answered`
read the entry's `### A-executor` is non-empty โ LEGAL ONLY against an `answered`, non-superseded target
answered-local target points into the consumer's own registries; no dispatch
deferred the bank verdict is above the authorized probe depth; declaration required
failed a dead target ยท the task-folder was deleted ยท the executor REFUSED
concern no bank can close the doubt; route none; final delivery names where it is discussed
THE CHECKER โ check-probe-cards.sh enforces these (each FAILs, exit 1):
read-target-working ยท read-target-superseded ยท qa-working-no-started ยท qa-working-expired ยท qa-answered-empty ยท qa-no-state ยท commissioned-target-answered, plus the build-lane commissioned-no-owner / -no-eta / -no-blocks / -no-cross-project, and concern-with-route / final-only concern-not-discussed.
Verbs
/haipipe-probe โ this file, the operational contract
/haipipe-probe contract|anatomy โ the probe-file anatomy + the QA contract
/haipipe-probe status โ derive states from disk: ls the 1-probes/ files, resolve each
target:, ls the QA files. Never a stored state.
/haipipe-probe "<question>" โ ROUTE, do not execute. A question with no consumer behind it is not
a probe โ hand it to the executor's own door: task-shaped โ
/haipipe-task qa, discovery-shaped โ /haipipe-discovery qa.
Pointers
spec + rationale (why it is built this way) โ ../../diagrams/01-probe-qa-260726/
the paper family's probe tooling โ ../../paper/haipipe-paper/probe/
../../application/2-phase/1-probe/haipipe-application-probe/
the question-level collector agent (โกโขโฃ, โ ../agents/haipipe-probe-q-executor-agent.md
stake-free, shared, isolated context)
the executor-side qa verb (writes QA files) โ ../../task/haipipe-task/fn/qa.md ยท the discovery twin