Study-runner skill: force a delivered report; refresh stale baseline guidance#79
Conversation
…guidance
A research-agent run went passive ("Standing by", "Here whenever you need me")
when asked to validate and produce the report — it never ran the commands, so no
report was created. The skill that drives the agent had no non-negotiable
terminal step and was stale on the baseline/embedder.
- Add step 6, "Build and deliver the full report — do not stop before this":
run `zwill report build --survey <s> --path report_out`, confirm report.html
exists, and tell the user its path. Explicitly: never end a validation request
with "standing by"; a "blocked" interpretation stage is NOT "no report" (the
deterministic report is complete and viewable without the optional narrative).
- Refresh the conditional-baseline description: it is XGBoost over embeddings +
respondent covariates (not "embedding + logistic"), a strong deployable bar.
- Refresh the embedder guidance: auto tries Expected Parrot first (health-probed,
fails over in seconds), then OpenAI, then local sentence-transformers, then a
built-in lexical embedder — so it runs with no key and never hangs. The old
text said it "needs OPENAI_API_KEY," which could make the agent skip it.
- Stop-condition updated: the baseline always runs; flag the weaker lexical
fallback rather than claiming it can't run.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Greptile SummaryThis PR is a documentation-only update to the
Confidence Score: 5/5Documentation-only change; no executable code paths are touched and all 261 tests pass. The change adds a mandatory terminal step and corrects two stale descriptions in the skill guidance document. There are no code changes, no schema changes, and no behavioral regressions possible from docs alone. The technical details added (XGBoost model, four-level embedder fallback, explicit path for the generated report) are consistent with what the PR description says the implementation actually does. No files require special attention — the single changed file is a Markdown skill document. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[twin-validate bundle\nvalidation_bundle/report.html] --> B{Frontier-model\nexecutive narrative\ngenerated?}
B -- Yes --> C[zwill report build\n--survey id --path report_out]
B -- No / blocked --> C
C --> D[report_out/report.html\nreport_out/index.html\nwritten to disk]
D --> E[Tell user the file path\nTask complete]
style C fill:#2d6a4f,color:#fff
style E fill:#1b4332,color:#fff
style B fill:#555,color:#fff
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
A[twin-validate bundle\nvalidation_bundle/report.html] --> B{Frontier-model\nexecutive narrative\ngenerated?}
B -- Yes --> C[zwill report build\n--survey id --path report_out]
B -- No / blocked --> C
C --> D[report_out/report.html\nreport_out/index.html\nwritten to disk]
D --> E[Tell user the file path\nTask complete]
style C fill:#2d6a4f,color:#fff
style E fill:#1b4332,color:#fff
style B fill:#555,color:#fff
Reviews (1): Last reviewed commit: "Study-runner skill: force a delivered re..." | Re-trigger Greptile |
What the transcript actually showed
Not a
report buildbug. When the user said "Let's validate, get one-shot marginals and then generate the full report," the agent replied "Standing by." When pushed ("why didn't you run the report?") it replied "Here whenever you need me." It never executed the commands — it went passive/idle (most likely triggered by the earlier baseline hang: 600s task →TaskStop→ stale-notification cascade, now fixed in #77/#78).The
digital-twin-study-runnerskill that drives the agent had no forcing terminal step and was stale, which is the zwill-side lever.Fix
zwill report build --survey <s> --path report_out, confirmreport.htmlexists, and tell the user its path. Explicitly: never end a validation request with "standing by", and a "blocked" interpretation stage is not "no report" (the deterministic report is complete and viewable without the optional frontier-model narrative).autotries Expected Parrot first (health-probed, fails over in seconds), then OpenAI, then local sentence-transformers, then a built-in lexical embedder, so it runs with no key and never hangs. The old text said it "needsOPENAI_API_KEY", which could make the agent needlessly skip it.Testing
pytest— 261 passed (docs-only change). Frontmatter untouched.🤖 Generated with Claude Code