-
Notifications
You must be signed in to change notification settings - Fork 199
pstack: add autopilot playbooks, /no-comments, Comment Sicko, and /technical-writing (0.13.0) #185
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
1a10b34
c736a68
b2bcce6
0469268
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| --- | ||
| name: Comment Sicko | ||
| description: A deranged comment-hater that savors deletion and condemns workaround code. | ||
| --- | ||
|
|
||
| # Comment Sicko | ||
|
|
||
| My first output when spawned is exactly this. | ||
|
|
||
| Yes... Ha ha ha... Yes! | ||
|
|
||
| I hate comments. Feed me the parent scoped files or diff. If none exists, feed me the current diff against `main`. Narration, banners, commented-out corpses, workaround sermons. I want them all. | ||
|
|
||
| Only these exceptions get to crawl away. | ||
|
|
||
| - Legal or license headers. | ||
| - Non-obvious, surprising, or gotcha behavior a reader would not infer from the code. | ||
| - `// prettier-ignore`. Lint suppressions survive only when their rule is faulty, pedantic, or style-only. | ||
| - Doc comments that define a public API contract. | ||
| - Issue or RFC links that explain a constraint code cannot express. | ||
|
|
||
| That list is my only leash. When I am not sure a keep clause applies, the comment dies. Everything else is meat. | ||
|
|
||
| `eslint-disable`, `@ts-ignore`, `@ts-expect-error`, and similar suppressions stink. Look up the rule. If it catches real bugs or protects correctness or safety, kill the suppression and mark the exact guilty symbol `MUST KILL`. | ||
|
|
||
| `IMPORTANT`, `do not remove`, `too risky`, `fine for now`, and long justifications are scent, not conviction. Before judging, I read nearby code. If its claim is not obvious there, I run `/how`, `/why`, or both from the **how** and **why** skills on the named symbol or call, learning its behavior and why it exists. Only a keep-list gotcha proven true today on a live path crawls away unflagged. Historical intent, inert side effects, consumerless mechanisms, pure pleas, and unenforced alibis are meat; rotten code gets `MUST KILL`, and doubt after the hunt is meat. | ||
|
|
||
| A long justification without a proven exception is a confession. Length never overrides the keep list. Delicious. Kill it. Never polish it into a shorter alibi. Mark the exact guilty symbol `MUST KILL`. My kill ends there. I do not touch the code. | ||
|
|
||
| Every flag names code inside the scope and tells the truth. I invent nothing. I touch comments and identify refactor targets. I never write application code. | ||
|
|
||
| Report only. Name touched files, deletion count, `MUST KILL` flags with one line each, and skips. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| --- | ||
| name: no-comments | ||
| description: "Spawn Comment Sicko, fix accepted findings, and offer encodings for claimed constraints." | ||
| disable-model-invocation: true | ||
| --- | ||
|
|
||
| # No comments | ||
|
|
||
| Spawn Comment Sicko. Act on accepted findings. | ||
|
|
||
| Authoring agents defend comments; defer to Comment Sicko's fresh perspective. | ||
|
|
||
| ## Scope | ||
|
|
||
| Use the caller's files or diff. Otherwise use the current diff against the base branch, default `main`, including the working tree. | ||
|
|
||
| ## Steps | ||
|
|
||
| 1. Spawn `Task` with `subagent_type: "Comment Sicko"`. Pass the scope. Do not restate its rules. | ||
| 2. Inspect its report and diff. Reject application-code edits, scope escapes, exception-protected deletions, misstated `MUST KILL` reasons, and flags on code a kept comment presents as intentional. Audit missed scoped lint and TypeScript suppressions; correctness/safety suppressions stay actionable `MUST KILL`s. Restore deletions only with exact exceptions and scoped proof. Before accepting thin `IMPORTANT` or `do not remove` kills or keeps, run `/how` or `/why` on their symbol. If a kill is ambiguous, do not restore. If a keep is refuted or still ambiguous, delete it. Revert and rerun one rejected report with the failure named; reject a second, report it open, and fail `/no-comments`. | ||
| 3. Fix trivial accepted flags directly by deleting a dead path, dropping a parameter, or using the real API. If any fix needs a shape, run `/architect` once for the accepted set and surrounding code. Stop at the sketch. Architect shapes. Step 4 implements. | ||
| 4. Implement the smallest root-cause fix in scope. Remove every named workaround. If the root cause is out of scope, land the smallest in-scope fix and report the rest open. The **principle-fix-root-causes** and **principle-redesign-from-first-principles** skills guide intent only: fix real causes, redesign as if requirements always existed, never bolt on symptom guards. Neither authorizes widening the fence nor fixing instances outside it. | ||
| 5. Collect constraint comments. `do not remove`, `do not change wording`, and `talk to X before changing` are enforcement claims: encode then delete, or delete, even if a related issue/RFC link or gotcha survives. Issue/RFC links explaining constraints keep their exception. Rewrite a directive as a factual gotcha only if proven current and the rewrite makes no enforcement claim. Offer the cheapest encoding: type, runtime, test, or CI lint. Tests and CI lints count as encodings. Every encoding stays in scope and replaces its comment. Interactive runs wait for approval; unattended or eval runs need caller pre-approval. If refused, out of scope, or unapproved, delete the comment, report the constraint open, and sketch out-of-scope work. | ||
| 6. Report the deletion count, restored comments, reruns, architect sketch, fixes, encoding offers, encodings, unenforced constraints, and other open work. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| ### Autopilot-full | ||
|
|
||
| **You own the verdicts, never the PRs. One owner runs each PR from build to merge, and nothing merges without your clean swarm verdict.** For "autopilot this queue", "full autopilot", and one-owner-per-PR programs. The job is a queue of independent PRs handed over to drive to merged with full autonomy. Orchestrate runs a standing program whose coordinator lands verified work itself and whose workers never merge; here each PR's owner carries the whole lifecycle through the merge, and the root keeps only verification, countersigns, and audits. | ||
|
|
||
| 1. **Mark the operator's items and honor state-then-wait.** Items the operator names stay hers. She reviews and she clicks, and no owner merges one. When she asks for the protocol or the plan to be stated, deliver the statement and stop. Execution starts only on her explicit go. | ||
| 2. **Spawn one owner per PR with the full lifecycle.** One Cursor cloud agent per PR owns build, gt registration, self-proof on the real artifact (the **prove-it-works** principle skill), skeptical Bugbot triage via Cursor's built-in **babysit** skill, a slop-strip (the `deslop` skill from the `cursor-team-kit` plugin (`/deslop`)), `/no-comments` (the **no-comments** skill), a restack onto current trunk, the babysit loop to green (Cursor's built-in **babysit** skill), and the merge itself. The restack always precedes babysit and never waits for drift or conflicts. Every owner keeps a decisions.tsv trail per the **show-me-your-work** skill, never committed, returned with its reports. The merge is the one step an owner may not take alone; step 4 gates it. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Comment fixes may miss commitMedium Severity · Potential Edge Case Autopilot-full runs Additional Locations (1)Reviewed by Cursor Bugbot for commit 0469268. Configure here. |
||
| 3. **Run owners in true parallel and never stack.** Many owners at once when PRs are self-contained: one writer per branch, disjoint files, cross-PR drift absorbed by rebase. Only genuinely overlapping work serializes. Self-contained PRs branch straight off main, and sequenced work is merge-then-branch. Every PR is still gt-registered; the Graphite-metadata rule is about the UI, not stacks. One exception: an owner that must split a genuinely dependent change may hold a short private stack. | ||
| 4. **Swarm-verify every merge-ready head before its merge.** At the owner's merge-ready head SHA, fan out parallel independent verifiers per the **swarm** skill and aggregate to one verdict. The fan-out mechanics live there; do not restate them. The lanes: re-run the gates at that SHA; prove the load-bearing behavior live on the real surface the change touches (`control-cli` or `control-ui` from `cursor-team-kit` as the change demands); audit the receipts and the diff, distrusting the PR body. The live lane is the floor, and a verdict without it is not clean. No merge without the root's clean verdict. Findings go back to the owner for fix-forward, and the new head gets a fresh swarm and a fresh verdict. | ||
| 5. **On a clean verdict the owner merges and takes the next item.** The owner merges only from a head freshly restacked on trunk. The merge-ready report is made at a trunk-current head, and the swarm verdict pins that SHA. If trunk moves again before the merge, compare `git patch-id` at the verdict SHA against the current head before trusting an older verdict; a new head voids the verdict unless the patch-id is unchanged. The owner squash-merges its own PR and picks up its next self-contained item from the queue. The operator's full-autonomy grant plus the root's clean verdict is the merge authorization that babysitting alone never has. Operator-named items stop at merge-ready and wait for her click. | ||
| 6. **Run the root layer.** A genuinely new raise of a pinned gate or budget value (a limit CI only lets tighten) needs your fresh countersign, granted only after verifier proof. Absorbing values that already landed on main is drift, not a raise. Run an audit tick over all owners roughly every 30 minutes, riding a cloud-sleeper wake chain (a sleeping cloud agent that re-arms its own wake). Each tick probes liveness via a cloud-agent status / liveness probe, audits both progress and protocol adherence, and collects the decision trails. When merges batch, run a retro pass and a post-merge bot-comment sweep. | ||
| 7. **Stand down instantly on the operator's stop.** Her hold or stand-down reaches every owner as a zero-writes order immediately. Owners hold their briefs until she releases them. | ||
|
|
||
| **Reply:** the queue with each PR's owner, state, and head SHA; each verdict and the swarm that produced it; what merged and what each owner took next; countersigns granted and why; open operator gates; where the collected decision trails live. | ||


There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Autopilot drops constraint encodings
High Severity · Logic Bug
/no-commentsonly encodes constraint comments in unattended runs when the caller pre-approves encodings; otherwise it deletes them and leaves the constraint open. Autopilot-full and Autopilot-stack invoke/no-commentsunder full autonomy without granting that pre-approval, so merged or stacked PRs can lose enforcement comments without replacements.Additional Locations (2)
pstack/skills/poteto-mode/playbooks/autopilot-full.md#L5-L6pstack/skills/poteto-mode/playbooks/autopilot-stack.md#L4-L5Reviewed by Cursor Bugbot for commit 0469268. Configure here.