feat(planning): add questionnaire skill for person-held decisions (0.19.0) - #311
Conversation
New /planning:questionnaire (user-invoked only): turns a decision another person holds into a discovery questionnaire delivered async. Interviews the user about the send only — recipient and what's needed back — never the subject the recipient holds; questions target the knowledge gap. Output lands in the topic's memory slice so recipient PII never enters git history; delivery is out-of-band, and lifecycle tracking goes through the work-item-tracker seam when bound. Third routing bucket beside interview's facts-vs-decisions split; the interview-side pull-out lands separately. Adapted from Matt Pocock's to-questionnaire with the grill-to-interview vocabulary rename. Closes #284 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 3m 1s —— View job PR Review — feat(planning): add questionnaire skill (0.19.0)
SummaryWell-structured addition. The PII discipline (memory-slice routing, excluding recipient names from the tracker seam), the 🔴 Important
The plugin's This matters because other skills and the Fix: Add a row to the "What this plugin writes, per tier" table: | `questionnaire-<topic-slug>.md` (`/planning:questionnaire`) | Memory | `.work/<topic-slug>/` — never committed |🟡 Nit 1Filename All other memory-tier artifacts from planning skills use a type-only name within the topic directory — 🟡 Nit 2Self-answerable routing is only in the frontmatter description, not the skill body The routing redirect — "skip when the user can answer themselves (run Not reportedSecurity checks from REVIEW.md (authorization, injection, secrets, audit logging) are not applicable — this PR adds only Markdown skill files, a JSON evals file, and a JSON manifest update with no code execution, secrets, or data access. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 23fca8e8f2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…g filename The questionnaire artifact joins the binding's per-tier registry, the filename keys on the recipient role (questionnaire-<recipient-role-slug>.md) instead of repeating the topic slug — one topic can hand off to several people — and the self-answerable routing guard moves into the Stance body where the executing model reads it. Addresses claude-review IMPORTANT + 2 nits and Codex P2 on PR #311. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fde703c921
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude finished @kyle-sexton's task in 1m 25s —— View job PR Re-Review — feat(planning): add questionnaire skill (0.19.0)
Previous findings — all resolved ✅Fix 1 — The new artifact is correctly registered in the per-tier table, and the note that the memory tier's self-ignore is load-bearing because the document names a real person is exactly right. Clean fix. Fix 2 — filename convention (SKILL.md line 31)
Fix 3 — routing guard in Stance (SKILL.md lines 23–24) "Route away when no one else holds the answer" is well-placed as a named Stance principle alongside the core "interview the send" rule. The phrasing is tight and unambiguous. Aligns correctly with eval 3. Codex P2 — path collision on same-role repeat invocationFinding is valid; severity is nit-level for an initial skill. The design intent is explicit: the role slug is the primary key that distinguishes questionnaires when one topic has multiple recipients. The collision scenario requires the same role queried twice for the same topic — e.g., two separate The current skill is silent on what happens if the file already exists. A silent overwrite is the worst outcome because the user loses prior work without knowing. The fix is small: a one-line note in step 3 of The Loop instructing the model to check for an existing file and ask the user whether to overwrite, append, or use a disambiguating name (e.g., This is not a blocker for merging — the collision requires deliberate, unusual usage and the questionnaire is already a memory-tier artifact the user controls. Worth a follow-up issue or a one-line addition to The Loop before the skill reaches broad use. VerdictThe PR is in good shape. The three findings from the initial review are cleanly resolved, and the only open item is the edge-case silent-overwrite behaviour flagged by Codex — a nit, not a blocker. Merging as-is is reasonable with the expectation of a follow-up issue or small patch before broad rollout. |
An existing file at the target path (same topic, same role) gets a revise-or-new-with-suffix choice instead of a silent overwrite. Addresses Codex P2 on PR #311. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 22s —— View job PR Re-Review — feat(planning): add questionnaire skill (0.19.0)
All findings resolved ✅Fix 1 —
Fix 2 — Filename convention (SKILL.md line 31)
Fix 3 — Routing guard in Stance body (SKILL.md lines 23–24) "Route away when no one else holds the answer." is a named Stance principle alongside the core "interview the send" rule. Matches eval 3 ( Fix 4 — Path-collision guard (SKILL.md line 31) Step 3 of The Loop now reads: "If a file already exists at that path … never overwrite silently — ask whether to revise it (fold the new questions in) or write a new document with a short disambiguating suffix ( VerdictThe PR is clean and all four rounds of findings — three from the initial review, one Codex P2 path-collision guard — are fully resolved. No new findings at HEAD. Ready to merge. |
Summary
Adds
/planning:questionnaire— a user-invoked-only skill that turns a decision the user cannot answer, because another person holds the knowledge, into a Markdown discovery questionnaire handed off async. Adapted from Matt Pocock'sto-questionnaire(mattpocock/skills, in-progress) per the evaluation that greenlit the port, with the grill→interview vocabulary rename throughout.The defining move: interview the send, not the subject. The skill asks the user only what they can always answer — who the questionnaire goes to (role, expertise, relationship) and what they need back — then writes questions aimed at the gap between what the recipient knows and what the user needs. It never quizzes the user on the subject the recipient holds.
Decisions from the evaluation, all carried through:
questionnaire(theprdprecedent); keeps the future interview→questionnaire routing intra-plugin.disable-model-invocation: true(a side-effecting hand-off the user times, matching upstream)./planning:interview's facts-vs-decisions split — a person-arbitered deferral. Ships standalone; the interview-side one-line pull-out lands separately as an additive edit..work/, self-ignoring), so recipient names never enter git history. No egress — the skill authors a local file; delivery is out-of-band.ghcall./planning:interview, tracker-absent graceful degrade.Also fixes the planning README's stale "depth-first Q&A" phrasing in the interview row (missed residue from the frontier-rounds propagation).
Planning plugin bumped 0.18.0 → 0.19.0. Security review clears trivially: no hooks, scripts, MCP, network, secrets, or userConfig.
Related
Closes #284. Same upstream gap-analysis batch as #278/#282 (#294), #283 (#297), #285 (#298).
Verification
jq emptyonevals.jsonandplugin.jsonclaude plugin validate plugins/planning✔markdownlint-cli2on all new/touched markdown: 0 errorsnode scripts/generate-catalog.mjs: catalog in sync (plugin description unchanged)🤖 Generated with Claude Code