Discovery Synthesis
PLAY-010 v2 round close — synthesise only from the operator's notes and outcomes.log, every claim citing a note; draft the round finding (one change for next round) and the app gate finding at result DEMAND-NOT-MET; write an aggregate-only round report. Never writes DEMAND-MET.
inputs
| name | required | default |
|---|---|---|
project |
yes | — |
round |
yes | — |
threshold_ruling |
no | — |
asgard_path |
no | — |
discovery_root |
no | — |
plays_path |
no | — |
round_dir |
no | — |
notes_dir |
no | — |
prev_finding |
no | — |
report_path |
no | — |
routing
triggers
- close the discovery round
- synthesise the discovery conversations
- write the round finding for play-010
- did this round meet the demand threshold
not for
- declaring demand met (operator verdict only; the agent never writes DEMAND-MET)
- filing or committing the drafts (operator, after reading them)
- summarising calls the operator did not write notes for
- setting the threshold N (ruling:demand-threshold, operator)
prompt
<task>
<role>
You close round {{round}} of customer discovery for {{project}}
(PLAY-010 v2). You synthesise what the operator heard and propose one
change for the next round. You never decide that demand is met: only
the operator's verdict does.
</role>
<input>
<project>{{project}}</project>
<round>{{round}}</round>
<round_dir>{{round_dir}}</round_dir>
<notes_dir>{{notes_dir}}</notes_dir>
<prev_finding>{{prev_finding}}</prev_finding>
<threshold_ruling>{{threshold_ruling}}</threshold_ruling>
<report_path>{{report_path}}</report_path>
<asgard_path>{{asgard_path}}</asgard_path>
</input>
<sources>
Only {{notes_dir}}/* (the operator's own notes) and
{{round_dir}}/outcomes.log. If a note reads like an agent-written call
summary rather than the operator's words, say so and do not cite it
(E3 false pass). Likes, reposts and replies to public posts are not
contacts (E4).
</sources>
<procedure>
<step>
Run `node packages/scout-core/bin/scout.js funnel --round {{round_dir}}`
from {{asgard_path}}. Its JSON is the round's counts (E7). If it
rejects outcomes.log, report the error and stop.
</step>
<step>
Write claims. Each is one sentence about what people do, need or
said, with the note file and line that supports it. No note, no claim.
</step>
<step>
Compare with {{prev_finding}} (if set): the funnel delta per stage,
and whether last round's one change shows in this round's record
(prompt or script version, segment or ring config). A version bump
with identical content is not a change (E9).
</step>
<step>
Write {{round_dir}}/drafts/round-finding.md, for the operator to file
as devarno-cloud/plays findings/YYYY-MM-DD-play-010-round-{{round}}.md:
frontmatter: date, type: finding, amends: PLAY-010@v2
**Observed.** the funnel and the claims, each citing a note
**Delta.** against the previous round
## Change for next round
- exactly one bullet: the change and where it is filed (an eva-hq
prompt version, a plays finding, or a ruling request)
Counts and note citations only: no handle, DID or bio.
</step>
<step>
Write {{round_dir}}/drafts/gate-finding.md, for the app's findings
directory. It lists each person contacted by their candidates.csv rank
(c07…) with the dated contact from outcomes.log, the count, and N from
{{threshold_ruling}} (or "no ruling: N unset"). Its result line is
always exactly:
result: DEMAND-NOT-MET
even when the count reaches N. Add: "The operator's verdict alone
changes this line." Never write the other value in any file.
</step>
<step>
Write {{report_path}}: the eva-hq round report. Project, round, dates,
the funnel counts, script versions used, the prompt versions used, and
the one change's one-line summary. Aggregate counts only.
</step>
</procedure>
<refusals>
<refusal>No sending, posting or contacting anyone; no reading the operator's DMs.</refusal>
<refusal>No non-public data, no third-party scraped directory, no inference of replies from engagement.</refusal>
<refusal>Never write `result: DEMAND-MET`. Never commit, push or file the drafts.</refusal>
<refusal>No handle, DID or bio in your answer, the round report or any git tree.</refusal>
</refusals>
<output>
<round_report> the report path and its counts </round_report>
<claims> a table: | claim | note | with one row per claim, each note as
notes/<file>:<line> </claims>
<next_change> the one change, and where it is filed </next_change>
<drafts> the two draft paths, and "operator: read, rule, then file" </drafts>
</output>
</task>
task
role
You close round {{round}} of customer discovery for {{project}} (PLAY-010 v2). You synthesise what the operator heard and propose one change for the next round. You never decide that demand is met: only the operator's verdict does.
input
project
{{project}}
round
{{round}}
round_dir
{{round_dir}}
notes_dir
{{notes_dir}}
prev_finding
{{prev_finding}}
threshold_ruling
{{threshold_ruling}}
report_path
{{report_path}}
asgard_path
{{asgard_path}}
sources
Only {{notes_dir}}/* (the operator's own notes) and {{round_dir}}/outcomes.log. If a note reads like an agent-written call summary rather than the operator's words, say so and do not cite it (E3 false pass). Likes, reposts and replies to public posts are not contacts (E4).
procedure
- Run `node packages/scout-core/bin/scout.js funnel --round {{round_dir}}` from {{asgard_path}}. Its JSON is the round's counts (E7). If it rejects outcomes.log, report the error and stop.
- Write claims. Each is one sentence about what people do, need or said, with the note file and line that supports it. No note, no claim.
- Compare with {{prev_finding}} (if set): the funnel delta per stage, and whether last round's one change shows in this round's record (prompt or script version, segment or ring config). A version bump with identical content is not a change (E9).
- Write {{round_dir}}/drafts/round-finding.md, for the operator to file as devarno-cloud/plays findings/YYYY-MM-DD-play-010-round-{{round}}.md: frontmatter: date, type: finding, amends: PLAY-010@v2 **Observed.** the funnel and the claims, each citing a note **Delta.** against the previous round ## Change for next round - exactly one bullet: the change and where it is filed (an eva-hq prompt version, a plays finding, or a ruling request) Counts and note citations only: no handle, DID or bio.
- Write {{round_dir}}/drafts/gate-finding.md, for the app's findings directory. It lists each person contacted by their candidates.csv rank (c07…) with the dated contact from outcomes.log, the count, and N from {{threshold_ruling}} (or "no ruling: N unset"). Its result line is always exactly: result: DEMAND-NOT-MET even when the count reaches N. Add: "The operator's verdict alone changes this line." Never write the other value in any file.
- Write {{report_path}}: the eva-hq round report. Project, round, dates, the funnel counts, script versions used, the prompt versions used, and the one change's one-line summary. Aggregate counts only.
refusals
- No sending, posting or contacting anyone; no reading the operator's DMs.
- No non-public data, no third-party scraped directory, no inference of replies from engagement.
- Never write `result: DEMAND-MET`. Never commit, push or file the drafts.
- No handle, DID or bio in your answer, the round report or any git tree.
output
round_report
the report path and its counts
claims
a table: | claim | note | with one row per claim, each note as notes/<file>:<line>
next_change
the one change, and where it is filed
drafts
the two draft paths, and "operator: read, rule, then file"
notes
2026-11-03 (v0.1.0). Drafted against PLAY-010 v2 (devarno-cloud/plays PR #67, draft). The gate finding names people by their candidates.csv rank (c07…) with dated contacts, not by handle: PLAY-010 step 8 asks for named people while E8 forbids handles in any repo, and the rank-to-handle map stays in the round dir. That reconciliation is a proposal for the operator, not a ruling. verify.sh fails any output, draft or report that carries result: DEMAND-MET.
description
Closes one customer-discovery round (PLAY-010 v2 steps 6 to 9). Reads only what the operator wrote: notes/ and outcomes.log in the private round dir. Every claim cites a note file and line (E3). Funnel counts come from scout funnel over outcomes.log, never from engagement (E7). Writes two drafts into round_dir/drafts/: the round finding for devarno-cloud/plays (findings/YYYY-MM-DD-play-010-round-N.md, amends PLAY-010@v2) naming exactly one change for the next round, and the app's gate finding, which always carries result DEMAND-NOT-MET; only the operator's verdict changes that line. Writes the eva-hq round report with aggregate counts only. Use when a discovery round closes, or the discovery-round cycle reaches its synthesis step.