Skip to content

Epic: absorb Lauren Tan's and Matt Pocock's agent workflows (poteto-review) #7555

Closed as not planned
42 of 42 issues completed
Closed as not planned

Description

@kyle-sexton

Brief

Goal. Absorb Lauren Tan's (poteto, pstack) and Matt Pocock's agent workflows into this
marketplace, item by item as the owner decided them, because the owner runs 5-20 sessions and wants
their problem-solving moves (codify on recurrence, non-author verification, narrow ready PRs,
catch-up, grilling, paved paths) working in his own skills and plans (GUIDE D0-D119; register
Q1-Q589).

Scope. The 23 buildable threads of the design record, delivered in its 11-step dependency
order; the 15 deferred threads filed as parked sub-issues (14 issues: Delivery shape is settled by
Q589 and gets none; Cursor compatibility is the active Q579 research item); the probes the design
record requires before adoption; the carried defect fixes Q148 allows. Out of scope: everything the
design record lists as out of scope or declined.

Delivery shape (Q589, GUIDE D119, owner-approved). One epic as spec container; one sub-issue per
buildable thread in dependency order with native blocked-by edges; slice issues under a thread only
where it needs more than one PR; narrow PRs open ready unless a multi-session container (Q501,
Q585); deferred threads as parked sub-issues. Basis: Matt's to-tickets (slices sized to one context
window, blockers first, sub-issues) and Lauren's "prefer five narrow PRs to one large PR".

Hard constraints that bind implementation

  • C3: fewer, larger skills with actions and progressive disclosure; cross-skill use only as
    /plugin:skill, never by path.
  • C4: tool-neutral via adapters (ADR 0060); configurable defaults in the conventions home.
  • C5 as amended by Q567: unattended merge only on a passing verdict from a verifier other than the
    author, once Q519's verifier exists; no report-only phase (D96); Dependabot is required checks
    only.
  • C13 (amended, Q575): no agent acts until the owner's intent is codified; recommendations are
    researched against official sources; routine actions follow the research-depth setting, default
    "cite what is in context".
  • C14: skills never couple to this repo's own conventions; plugin defaults are fallbacks; project,
    team and user instructions win.
  • C15: prefer native mechanisms; inject nothing into a working session the user did not ask for.
  • C17: a preference where reasonable consumers differ ships as a setting with a named default,
    basis and scope; fixed floors only tighten (D79, Q574, D96, D88, D100, Q131, the C13 intent gate).
  • Evidence before autonomy (GUIDE D1): nothing widens unattended authority (merge, close, write)
    before the probe or eval that gates it passes; a check is recorded only after it fails on a
    planted or past violation and passes after revert (D22, Q115).
  • Label the origin: every sub-issue and PR body names the origin of the decision it carries as
    Lauren's, Matt's, owner's, ours or combined.
  • Repository rules: AGENTS.md "Code Review Rules" (a skill-body cut ships only with eval evidence
    of no loss; volatile upstream specifics are pointers with as-of date and recheck trigger; ## Next
    sections) and the AGENTS.md stop list (another repo, user-scope config, grant changes).

Acceptance criteria

  1. The epic's 23 thread sub-issues are closed by merged PRs, or carry a recorded probe result that
    stops adoption with the owner's sign-off; the 13 parked sub-issues are handled: the owner closed
    them as deferred (not planned) under the 2026-11-05 After zero/hardening direction, each keeping
    its body, which counts as handled for this epic (owner Q12 (a), 2026-11-06); and the 1 active
    Cursor research item (Q579) reports.
  2. Every probe the design record requires before adoption has a recorded result on its slice issue
    before the work it gates merges.
    Not met (correction 2026-11-07, issuecomment-6712686467): the earlier "met" reading (owner Q6 (a), issuecomment-6703854419) was wrong. A full grade found probes without a result or a recorded drop. Q6 (a) still stands for D4 and K39 (late results count) and for the D68/Q55 and D86 drops.
  3. Every new check ships with its proof script output: fails on the old code, passes on current
    (D22).
  4. Every cut to an existing skill body cites before/after eval results in its PR (AGENTS.md).
  5. Every setting in the design record's settings table resolves through the config cascade from the
    Settings resolution thread with its named default.
  6. No PR merges unattended before the Merge authority thread's verifier and planted-defect run pass.

Assumptions (the design record's captured assumptions 1-14 carry over unchanged; the riskiest
four are probes or questions in this plan):

  • A1 (assumption 1): a same-vendor non-author verifier catches enough defects to be the
    only merge gate; settled by the Merge authority thread's planted-defect run.
  • A2 (assumption 2, Q586): consumers run GitHub first-class; every GitHub feature degrades through
    an adapter.
  • A3 (assumption 3, Q587): plan usage tolerates the added model steps; each step is a setting with
    the per-item usage rollup (Q58) as the measure.
  • A4 (assumption 4): the lanes App token broker can mint statuses: write, discussions: write,
    issue-field writes and workflow-triggering pushes; settled by reading the broker (see the
    broker-mint slice): it grants contents, pull_requests and issues only.
  • A5: the existing pr-feedback-dispatch.yml lane is the findings lane Q512 describes, so the PR
    pipeline thread reconciles rather than rebuilds it.

Execution shape: per-item PRs

Activity

  1. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    work-mapDecision map container for /planning:wayfind; sub-issues are its typed decision items.
    on Oct 16, 2026
  2. 57 remaining items

  3. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    Criterion 5 record: the five settings the close audit found with no named setting on main.

    The owner answered both questions on 2026-11-07, verbatim. Q-C5a: "go w/ recommendations". Q-C5b: "gow/ recomendations".

    Setting Disposition Basis
    blocking-only after the first review Added as loop.findings-after-first-review (blocking-only default, or all) in #13930, merged 2026-11-07T11:19Z It was hard-coded at plugins/review/lib/prior-findings.mjs:195. The default keeps today's behaviour.
    Retro offer offer Being added as session-flow retro_offer (offer default, or off) on branch feat/session-flow-retro-offer-setting The PR opens once its before/after eval is VALID with no loss (hub rule R402). The eval is routed to a laptop lane.
    Review nit handling follow-up-issue Deferred by the owner to After zero Owner Q512 (a), #7576 comment. The live rule until then is plugins/source-control/reference/review-discipline.md:259-260.
    Research depth, "cite what is in context" Dropped (owner Q-C5a, "go w/ recommendations") The default would reverse main's rule, session-flow workflow steps.md:80: "Task size does NOT reduce research depth". It would also reverse the owner's standing rule to ground every recommendation. ADR 0075:146-148's record of it stays history.
    Bare run read-only, proceed Dropped (owner Q-C5b, "gow/ recomendations") A key on every multi-action skill buys little. Instruction text already settles a bare run (skill-criteria.md:98-101), and the default proceed is today's behaviour.

    With the retro-offer PR merged, every remaining design-record setting either resolves through the cascade or carries a recorded owner decision.

    The close audit's mapping of the record's fix-round cap to plugins/review fix_round_cap stands. loop.review-rounds stays at default 2: a change to 3 was reverted in #13930 after pr-verify found it had no spec basis.

  4. removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 7, 2026
  5. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    retro_offer eval (C5, H171): NO LOSS

    Before/after of the session-flow retro_offer setting, default config, claude plugin eval --runs 3 --threshold 0.8 --scaffold, with-without ablation, Claude Code 2.1.319, model claude-opus-5-5.

    • BASE: 1b606743be3202e42a2a0a5c61c66be890ef3c6c (the two case dirs copied unchanged from HEAD)
    • HEAD: be7f6b22820656f9853d2f2c06b33f059daaba1e (feat/session-flow-retro-offer-setting)

    /evals:validate (validate-cases.py) on each tree's suite: exit 0 on both, no FAIL; WARN only (allowed_tools grants and judge-calibration samples on other cases), none on the two cases run.

    Case BASE with-plugin HEAD with-plugin BASE without HEAD without
    wf-wrap-up-default-offers-retro 3/3 3/3 0/3 0/3
    wf-wrap-up-errors-falls-back-to-retro 3/3 3/3 0/3 0/3
    Total 6/6 6/6 0/6 0/6

    Validity (run-validity.py --runs 3 --scaffolded), all four legs: verdict: VALID (warnings: skill fired, models). The skill-fired warning reads "fired in 0 with-arm runs; no skill-fired grader, so not checked"; the models warning is the unrecorded judge model (default haiku).

    Verdict rule: both arms VALID, no case down 2 or more of 3, HEAD total (6) not below BASE (6). NO LOSS.

    Result JSON:

    • ~/.evretro/out/base-wf-wrap-up-default-offers-retro.json
    • ~/.evretro/out/base-wf-wrap-up-errors-falls-back-to-retro.json
    • ~/.evretro/out/head-wf-wrap-up-default-offers-retro.json
    • ~/.evretro/out/head-wf-wrap-up-errors-falls-back-to-retro.json

    Cost (CLI-reported) USD 1.95 across 4 invocations, 24 runs (12 with-plugin, 12 baseline); legs started 16:37 to 16:41 UTC, 75 to 96 s each.

  6. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    C4 v2 for PR #12803 (H172): NO LOSS

    This compares each tree through its own entry point: the leaf command in BEFORE against the router action in AFTER. Settings: claude plugin eval --runs 3 --threshold 0.8 --scaffold --allow-tools Bash, with-without ablation, Claude Code 2.1.319, model claude-opus-5-5.

    • BEFORE: 431f923ceb9e2dd33632c5e77edd4f22bb9beafe (32a4790b8f051c34cf49c88c6bb81057bcbe2992^). Leaf skills audit-size, audit-complexity and audit-type-debt; main's evals plus three -leaf twins.
    • AFTER: 500651ec2e73d061c10358ca6d6c8f95b4597e81 (origin/main). Router skill audit; the evals run unchanged.

    /evals:validate (validate-cases.py): exit 0 on BEFORE evals/, BEFORE evals-leaf/ and AFTER evals/. No FAIL; the only WARNs are Bash allowed_tools grants and judge-calibration samples.

    Disclosures

    • BEFORE ran its twins from a separate eval dir, evals-leaf/, with --eval-dir evals-leaf --case <original name>. The CLI selects cases by name: glob and the spec forbids renaming, so inside evals/ a twin could not be selected apart from its original. The twin bytes are unchanged.
    • Each case's samples/ran-the-entry-script.json names the router path /plugins/code-metrics/skills/audit/scripts/<x>.sh. That file feeds only /evals:validate's offline grader check, not the run.
    • The tool_used graders match the script basename (input_match: audit-size\.sh and so on). BEFORE has those scripts under skills/audit-<x>/scripts/.

    Twin diffs (diff -r of each original in evals/ against its twin in evals-leaf/):

    audit-size-...-leaf/case.yaml
    9c9
    <   prompt: /code-metrics:audit size
    ---
    >   prompt: /code-metrics:audit-size
    
    audit-complexity-...-leaf/case.yaml
    9c9
    <   prompt: /code-metrics:audit complexity
    ---
    >   prompt: /code-metrics:audit-complexity
    
    audit-type-debt-...-leaf/case.yaml
    9c9
    <   prompt: /code-metrics:audit type-debt
    ---
    >   prompt: /code-metrics:audit-type-debt
    
    Pair BEFORE with-plugin AFTER with-plugin BEFORE without AFTER without
    audit-size-reports-the-change-with-provenance-and-no-verdict 2/3 3/3 0/3 0/3
    audit-complexity-reports-the-change-with-provenance-and-no-verdict 3/3 2/3 0/3 0/3
    audit-type-debt-reports-both-percentages-without-anchoring-them 3/3 3/3 0/3 0/3
    Total 8/9 8/9 0/9 0/9

    Validity (run-validity.py --runs 3 --scaffolded):

    • BEFORE size: verdict: VALID (warnings: skill fired, models, judge votes). One split vote: with-arm run 3, expectation-4, PASS FAIL FAIL.
    • AFTER size: verdict: VALID (warnings: skill fired, models)
    • BEFORE complexity: verdict: VALID (warnings: skill fired, models, judge votes). One split vote: with-arm run 1, expectation-5, PASS PASS FAIL.
    • AFTER complexity: verdict: VALID (warnings: skill fired, models, judge votes). One split vote: with-arm run 2, expectation-5, PASS FAIL FAIL.
    • BEFORE type-debt: verdict: VALID (warnings: skill fired, models)
    • AFTER type-debt: verdict: VALID (warnings: skill fired, models, judge votes). One split vote: without-arm run 2, expectation-4, FAIL FAIL PASS.

    About these warnings:

    • skill fired: "fired in 0 with-arm runs; no skill-fired grader, so not checked". The cases run the slash command and the Bash entry script directly.
    • models: the judge model is not recorded; the default is haiku.
    • Bash ran in 3 of 3 runs on every arm.

    Verdict rule: both arms VALID, no pair with AFTER 2 or more of 3 below BEFORE (the largest drop is complexity, 1), and AFTER's total (8) is not below BEFORE's (8). NO LOSS.

    Result JSON:

    • ~/.ev7555/out/before-audit-size-reports-the-change-with-provenance-and-no-verdict-leaf.json
    • ~/.ev7555/out/after-audit-size-reports-the-change-with-provenance-and-no-verdict.json
    • ~/.ev7555/out/before-audit-complexity-reports-the-change-with-provenance-and-no-verdict-leaf.json
    • ~/.ev7555/out/after-audit-complexity-reports-the-change-with-provenance-and-no-verdict.json
    • ~/.ev7555/out/before-audit-type-debt-reports-both-percentages-without-anchoring-them-leaf.json
    • ~/.ev7555/out/after-audit-type-debt-reports-both-percentages-without-anchoring-them.json

    Cost (as the CLI reports it): USD 5.58 for 6 invocations, 36 runs (18 with-plugin, 18 baseline). Legs started between 16:56 and 17:35 UTC and ran 242 to 298 s each.

  7. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    Closing: every close-audit criterion now holds.

  8. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    Reopened: my 20:14Z close was premature on criterion 2.

    The close audit (issuecomment-6703722862) grades criterion 2 as NOT MET. My close counted only the two late results (owner Q6 (a)) and the two owner drops (Q14 (a)). Two parts of that grade are still open:

    • D53 invocation probes: PARTIAL. Only 3 of the 4 probes ran (#11960), and no record addresses the fourth.
    • 9 probes the audit did not check (API budget): Q182 visibility, Q186 merges and recount, Q183 hook terms, Q179 picker re-observation, the D6/D107 cut tests, the D4 "buffer" steering word, the D8/Q18 precision run, the D52 size budget, and the D22/Q115 proof script. Criterion 2 says "every probe", so these need a grade.

    Also, criteria 3 and 4 were graded on samples: 3 new checks and 5 cuts. The fixes cover the sampled failures (PR 8822, PR 12130, PR 12803) but not the unsampled checks and cuts.

    Next: grade the 9 unchecked probes, settle D53's fourth probe, and extend the C3/C4 samples to every new check and cut in the design record. poteto owns it.

  9. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    Correction: criterion 2 is NOT met, and criteria 3 and 4 have gaps.

    Two records claim "Criterion 2 is met: every probe has a result or an owner-recorded drop": issuecomment-6703854419 and the body line added at 16:2xZ. That claim is false. The owner's words in that record are "Go with recommendations." and "Yes.", answering Q6 (late results count). The ticked line is the poster's own conclusion, not owner text.

    This is a full grade against the design record: the 9 probes the close audit left unchecked, D53, and every new check and cut, not samples. 19 probe rows, 13 checks and 24 cuts. Every row cites evidence.

    Criterion 2: rows still open

    Criterion 3: checks without fail-old/pass-new output

    Criterion 4: cuts without before/after evals

    • PARTIAL: PR 12073 and PR 12253 (are PR 11629's 25 cases the port?), PR 12770, PR 12549 (its audit-family and trigger probes failed, and the descriptions were restored with no re-run).
    • MISSING: PR 13256 (resolve-conflicts removed with its 10 cases), PR 13748 (merged with no eval; poteto's PR).

    Side findings

    • The close audit's prose says "2 are partial", but its table has 1 PARTIAL row.
    • Q563's live-payload from value in run 42241474462 is UNVERIFIED; the log was not read.

    Next. poteto posts the three pointer records, runs the criterion 3 proofs, and routes the evals (D4 buffer and the criterion 4 PARTIAL and MISSING rows) to an eval-capable lane. D53 (b) goes to the owner. #7555 stays open until every row above is OK, LATE or owner-dropped.

  10. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    Owner decision recorded: D53 probe (b) is dropped, and 3 of 4 is accepted.

    On 2026-11-07 ~21:0xZ, in the poteto session, the owner was asked: "Q1. D53 probe (b), Claude Desktop scheduled task: drop it, or run it?" The options were: (a) drop it and accept 3 of 4 (recommended); (b) the owner runs it at the Desktop app; (c) move it to After zero. The owner answered, verbatim: "go w/ recommendations".

    That answer selects (a). Probe (b) needs a person at the Claude Desktop GUI. Probes (a), (c) and (d) ran (#11960 issuecomment-6562290989), and the text they gated is on main through PR 12056. This replaces the unquoted "owner decision (lane 1 session)" line in #11960 issuecomment-6586541758 as the drop's record. For #7555 criterion 2, the D53 row is now DROPPED (owner).

  11. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    #7555 criterion 4: PR 12073 and PR 12253 are covered by PR 11629's port, so no new run is needed.

    • What was removed: 25 cases. PR 12073 deleted retro evals.json ids 2, 7, 8, 9, 10, 11, 12, 18 and 20, plus the plugin case re-codify-routes-check-asks-first. PR 12253 deleted /review:audit-enforceability with its 15 cases.
    • The port: PR 11629 merged 2026-11-01T00:10Z, before both removals (12073 at 2026-11-01T22:57Z, 12253 at 2026-11-02T17:39Z). Its "Port table" maps all 25 old cases one to one onto the 25 cases it added under plugins/corrections/evals/. git diff --name-status --diff-filter=A b4214d6c7ea542bbcc1402639343e967ac6a0abf a623854552042b7bc1428d5acda20e1b20d59d64 lists exactly those 25 case.yaml files.
    • Before/after result: "With the skill, the after arm passed 13/25 cases at 0.87, against 10/23 at about 0.59 before" (PR 11629 issuecomment-6547718230). The two real gaps that run found were fixed in that PR.
    • Limits:
      • Prompt wording differs on some pairs (difflib ratio 0.01-0.11 on the lowest), but each pair keeps its scenario and subject. Retro 9 changes scenario on purpose: encode_policy is gone, so its port tests the mining-window setting.
      • The record does not say which 2 cases the before arm left out.
      • No full 25-case rerun on the merged codify exists.

    Grade: OK (the before/after record sits in the porting PR, not in the removal PRs).

  12. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded.
    Owner, 2026-11-07 in the hub session, answering "Q19: close #8635, #7555 and #9868 now, with their remaining work recorded for after zero?" with option (a), verbatim: "go w/ recommendations".

    All 30 sub-issues are closed and the work shipped. What remains is evidence bookkeeping on merged work: the criterion 2 probes poteto's grade found unchecked (issuecomment-6712686467), and the criterion 3 and 4 eval rows. Closing as deferred. That remainder is recorded in the after-zero record for rediscovery.

    Posted by the github-support hub session on the owner's answer. This was generated by AI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: mediumReal value, no hard deadline; normal backlog flow.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.work-mapDecision map container for /planning:wayfind; sub-issues are its typed decision items.

    Fields

    Work status

    needs-triage

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions