Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion skills/surface-plan/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ The conversation is the developer's, the plan folder is the repository's.
8. Cross-check. Launch a fresh `surface-checker` with the report path `checks/rev-NN-MM.md` and wait for its return. Check that the report exists and opens with the count returned, then `surface-status record <plan> check-done --report checks/rev-NN-MM.md --omissions <k> --json`.
9. Omissions. None: step 10. Otherwise, when `passes.planning` of `show` is more than `passes.ceiling`, stop at the ceiling (see "The agents"). Else read the report and choose: the blueprint must show more, then step 7 with the report's path; or the plan does more than the need, then take that out of `plan.md` yourself and step 7. Then step 8 again. A pass is a cross-check with omissions, which sends the blueprint or the plan back for rework; a clean check costs none. So the blueprint or the plan is reworked `passes.ceiling` times, and the check after them hands back.
10. Draft. `surface-status record <plan> plan-drafted --json`, then "Commit, push and pull request". Refused with the code `gate-list`: `plan.md` lacks its gates block or holds a malformed one; correct it, then step 8.
11. Hand over. Tell the developer where to read the blueprint: its path, and its link in the pull request. Say in one line how the body of the blueprint is cut, and why, as the extractor returned it. Name the gates the loop will run, `gates` of `show`, or say that the plan names none and the loop then has no objective check. Then stay in the conversation and ask: amend, or approve by launching `/surface-execute`, whose launch alone approves this revision.
11. Hand over. Tell the developer where to read the blueprint: its path, and its link in the pull request. At the first hand over of the plan, when `journal.jsonl` holds a single `plan-drafted` line, say in one line how the body of the blueprint is cut, and why, as the extractor returned it, and name the gates the loop will run, `gates` of `show`, or say that the plan names none and the loop then has no objective check. At a later one, say in one line which amendment or decision of `interview.md` the revision carries, and the cut or the gates again only when the revision changed them. The developer is about to read the blueprint: restate neither what it holds nor the plan. Then stay in the conversation and ask: amend, or approve by launching `/surface-execute`, whose launch alone approves this revision.
- A reply that asks for a change is an amendment: take it as "Taking an amendment" says, which writes it first, records it, draws and cross-checks the next revision, commits and pushes it. Then ask the same question again.
- A question, about the plan or the blueprint, is answered from the files, and nothing is recorded.
- In doubt, ask whether the reply is an amendment.
Expand Down
14 changes: 13 additions & 1 deletion tests/prompts/test_surface_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,19 @@ def _hand_over() -> str:
def test_the_hand_over_stays_in_the_conversation_and_asks_amend_or_approve() -> None:
hand_over = _hand_over()
assert "Then stop" not in hand_over
assert "Say in one line how the body of the blueprint is cut, and why" in hand_over
# The cut and the gates are said once, and again only when a revision changed them.
first, later, pointer = _positions(
hand_over,
[
"At the first hand over of the plan, when `journal.jsonl` holds a single",
"At a later one, say in one line which amendment or decision of `interview.md`",
"restate neither what it holds nor the plan",
],
)
assert first < later < pointer
assert "say in one line how the body of the blueprint is cut, and why" in hand_over
assert "and the cut or the gates again only when the revision changed them" in hand_over
assert "name the gates the loop will run, `gates` of `show`" in hand_over
assert (
"stay in the conversation and ask: amend, or approve by launching `/surface-execute`, whose"
" launch alone approves this revision" in hand_over
Expand Down
Loading