phase_config::DECLARED_BUT_UNREAD lists four keys the recipes set and nothing reads. security_hardening.toml already carried a "what is real here and what is decoration" section and annotated its own dead keys inline; the other five did not, so `produces = ["md"]` and `loop = "until_no_more_int_items"` read like settings. The risk was never the dead keys themselves — it is a reader taking `loop = "until_no_more_int_items"` for a loop. Each now says it is inert and points at the registry. They stay because they state the intent. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01WZb5A2kfVfjpdwSochkuHz
58 lines
3.4 KiB
TOML
58 lines
3.4 KiB
TOML
key = "research_only"
|
|
title = "Research only"
|
|
blurb = "Answer a question and deliver a sourced markdown report. One-shot or scheduled."
|
|
requires_repo = false
|
|
|
|
# Phases run in order. Each entry gets a `mission_phases` row on
|
|
# mission create; the orchestrator dispatches per-kind executors.
|
|
#
|
|
# `rust_sdlc` until 2026-08-21, which staffed this repo-less markdown mission
|
|
# with a planner, a coder, a tester, a reviewer and a committer — four of whom
|
|
# had nothing to do, each carrying the code-and-commit skills its role is bound
|
|
# to. Measured: 9 distinct skills across 5 role prompts, ~50KB, one applicable.
|
|
# See docs/SKILL-USE-BASELINE.md finding 7.
|
|
default_team_template = "topic_research"
|
|
|
|
[[phases]]
|
|
kind = "research"
|
|
order_idx = 0
|
|
# Phase-scoped config, merged into mission_phases.config on insert.
|
|
[phases.config]
|
|
# `pdf` dropped — PDF rendering was removed from the delivery path and
|
|
# artifacts are served as Markdown, so asking for it named a format nothing
|
|
# generates. `security_hardening` was corrected for this; this recipe was not.
|
|
# INERT. `produces` is listed in phase_config::DECLARED_BUT_UNREAD —
|
|
# artifact rendering is not driven by it. Kept because it states the
|
|
# intent, annotated because a reader should not take it for a setting.
|
|
produces = ["md"]
|
|
default_topology = "hub_spoke"
|
|
# This recipe had NEITHER of the two keys below, which is the same defect
|
|
# `benchmark`, `security_hardening` and `research_and_code` were each fixed
|
|
# for: a phase with no `done_when` never enters `evaluating`, is never judged,
|
|
# and reports `completed` whatever it did. The empty-delivery rule still caught
|
|
# a phase that wrote nothing at all (`research` is in PRODUCING_KINDS), so the
|
|
# gap was narrower here — a mission that wrote one junk file went green.
|
|
task = """
|
|
Answer the mission brief and deliver a sourced report.
|
|
|
|
There is no repository on this mission. `/mission/repo` is your workspace, everything you leave there is collected and published as the mission's artifact, and anything written anywhere else is not delivered.
|
|
|
|
Work in three passes and leave the trail behind: research/questions.md (what actually has to be answered), research/evidence.md (the sources, quoted, with the URL and the date fetched), and research/REPORT.md (the answer).
|
|
|
|
Cite every claim to a source you actually fetched. A claim you believe but cannot source belongs in the report's open-questions section, named as open — not hedged into the body, and not dropped silently.
|
|
|
|
If the brief is too vague to answer, say so in research/REPORT.md and say what you would need. That is a real result. A report written against a guess about what was wanted is worse than one sentence saying the brief was unusable.
|
|
"""
|
|
# Wording follows the measured rule: say what the file must CONTAIN. Positional
|
|
# phrasing, or "and nothing else", makes the judge invent requirements it was
|
|
# never given.
|
|
done_when = "research/REPORT.md exists and answers the mission brief, with each claim in it carrying the URL of a source, and a section naming what could not be established"
|
|
max_iterations = 2
|
|
# Nothing is compiled here, so `on_green_tests` would gate on a suite that does
|
|
# not exist. There is also usually nothing to commit — a repo-less mission
|
|
# delivers by collection, not by diff.
|
|
commit_policy = "always"
|
|
|
|
# Which team template is the "sensible default" for the picker when
|
|
# the user hasn't explicitly picked one. UI honors this.
|