Skip to content

feat: walk a human through what procoder cannot do for them - #228

Merged
piwi3910 merged 8 commits into
mainfrom
feat/wizard
Aug 27, 2026
Merged

piwi3910 merged 8 commits into
mainfrom
feat/wizard

Conversation

@piwi3910

Copy link
Copy Markdown
Contributor

Closes #192.

The issue asked for a generated bash script that wizard run executes.
Reading the steps it targets settles the design differently: #66-#73 are
'create an account', 'generate a token', 'submit form Y' — not shell
commands. Nothing needed executing, so nothing executes. A wizard is
declarative markdown, and run walks it a step at a time so none is
skipped by reading past it.

That also keeps the shape AGENTS.md names: display it, require a separate
step a human invokes. show is the default and prompts for nothing;
run is the human's own invocation; new PRINTS a wizard to write
rather than writing one, like adr new and context add.

A captured value is shape-checked and never echoed — not in the accepting
message, not in the rejecting one, not in the summary, which names TOKEN
and never what it held. Wizards exist partly to walk somebody through
generating credentials, and a token printed back is a token in the
scrollback. Two mutations were applied and watched to fail: echoing the
value back, and swapping Compile for MustCompile so a bad pattern panics
instead of reporting NOT checked.

An unreadable wizard directory reports and exits 1 rather than saying there
are no wizards. Nothing found and nothing readable are different answers.

Closes #192.

The issue asked for a generated bash script that `wizard run` executes.
Reading the steps it targets settles the design differently: #66-#73 are
'create an account', 'generate a token', 'submit form Y' — not shell
commands. Nothing needed executing, so nothing executes. A wizard is
declarative markdown, and `run` walks it a step at a time so none is
skipped by reading past it.

That also keeps the shape AGENTS.md names: display it, require a separate
step a human invokes. `show` is the default and prompts for nothing;
`run` is the human's own invocation; `new` PRINTS a wizard to write
rather than writing one, like `adr new` and `context add`.

A captured value is shape-checked and never echoed — not in the accepting
message, not in the rejecting one, not in the summary, which names TOKEN
and never what it held. Wizards exist partly to walk somebody through
generating credentials, and a token printed back is a token in the
scrollback. Two mutations were applied and watched to fail: echoing the
value back, and swapping Compile for MustCompile so a bad pattern panics
instead of reporting NOT checked.

An unreadable wizard directory reports and exits 1 rather than saying there
are no wizards. Nothing found and nothing readable are different answers.
Copilot AI lite review requested due to automatic review settings August 27, 2026 10:25

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Windows CI found a real defect, not a test artifact. os.ReadDir on a path
that is a FILE reports 'cannot find the path specified' there, and that
satisfies os.IsNotExist — so List took the absent branch and answered 'no
wizards' for a directory it could not read. Unknown reported as none, which
is the one thing this codebase says it never does.

Stat first and let the kind of the thing decide: absent is 0 and the
empty-state line, not-a-directory and unreadable are 1 and NOT listed.

The test now fails on Unix too rather than waiting for Windows to catch it:
the mutation that swallows the error trips both of its assertions locally.
piwi3910 added a commit that referenced this pull request Aug 27, 2026
#228's gate ran 10m09s against timeout-minutes: 10 and was reported
CANCELLED. I first blamed my own branch pushes for cancelling it through
the concurrency group; that was wrong, and the timestamps say so.

The two most recent merges ran this job for 8m53s and 9m10s — 89% and 92%
of its budget. That is not a flaky run, it is a budget with no room in it,
and the next slow semgrep crosses the line whatever the change was.

A timeout surfaces as "cancelled", which at the merge gate is
indistinguishable from a real failure. Worse than a red build: a red that
sends somebody hunting a defect that does not exist, in a repository whose
rule is that a check which could not run is never reported as one that
passed. The inverse deserves the same care.

Twenty minutes, with the measurement written next to the number so the next
person changing it knows what it was set from.
piwi3910 added a commit that referenced this pull request Aug 27, 2026
)

#228's gate ran 10m09s against timeout-minutes: 10 and was reported
CANCELLED. I first blamed my own branch pushes for cancelling it through
the concurrency group; that was wrong, and the timestamps say so.

The two most recent merges ran this job for 8m53s and 9m10s — 89% and 92%
of its budget. That is not a flaky run, it is a budget with no room in it,
and the next slow semgrep crosses the line whatever the change was.

A timeout surfaces as "cancelled", which at the merge gate is
indistinguishable from a real failure. Worse than a red build: a red that
sends somebody hunting a defect that does not exist, in a repository whose
rule is that a check which could not run is never reported as one that
passed. The inverse deserves the same care.

Twenty minutes, with the measurement written next to the number so the next
person changing it knows what it was set from.
@piwi3910
piwi3910 merged commit 9286a82 into main Aug 27, 2026
11 checks passed
@piwi3910
piwi3910 deleted the feat/wizard branch August 27, 2026 12:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

procoder wizard: generate interactive walkthroughs for human-only setup steps

2 participants