Skip to content

perf(session-flow): cut the handoff skill body through progressive disclosure #12657

Description

@kyle-sexton

Refs #12243

Outcome

The /session-flow:handoff body is cut through progressive disclosure: action-specific detail moves to reference files read on demand, and the hub keeps routing and gates. This is one of five slices under #12243; the first cut (/source-control:worktree) landed in #12387, whose recipe this follows.

Size at origin/main 3bd42cabfe: body 36,785 bytes (SKILL.md with frontmatter stripped, the method #12387 used); the skill directory holds 120,309 tracked bytes. The binding limit is the paired eval run each cut needs, so each skill is its own PR.

Done when

  • The hub's body bytes fall, measured the same way. Moved text sits verbatim in reference/, and every citation of it (tests, hooks, scripts, fixtures, README) is repointed.
  • /docs-hygiene:compress compare returns VERDICT PASS with no SEMANTIC LOSS.
  • The ho-* cases in plugins/session-flow/evals/ run on the before and after copies with /evals:plugin-eval --baseline <before.json> --margin <m>, on a round run-validity.py marks VALID on both arms, and the after arm is non-inferior (plugins/playbooks/skills/skill-authoring/reference/skill-criteria.md, "Cutting text"). Four cases cover this skill; if the moved text has no case that reads it, add one before the before-run.

Related

Activity

  1. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    on Nov 3, 2026
  2. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Medium
    Uncertainty: Knowable
    Flags: none
    Blocked by: none

    I read this as one slice of #12243. It cuts the /session-flow:handoff skill body by moving action-specific text verbatim into reference/ files, repointing every citation, and passing the compress compare and the paired ho-* eval non-inferiority check. The outcome and done-when items are exact, so I found nothing open. The paired eval run is not something an unattended lane can do, and the host-run label already covers it. I found no duplicate among the open issues.

    Automated triage, applied by the lanes App.

  3. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 3, 2026
  4. added
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 3, 2026
  5. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane: its done-when asks for what an unattended lane run cannot perform: item 3 (a model eval run: "The ho-* cases in plugins/session-flow/evals/ run on the before and after cop..."); recommended split: keep the other items here as the admissible issue and move these to a child issue for the host queue (host-run); it carries host-run. Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).

  6. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    The latest triage verdict holds nothing: admission moved the issue to status: confirmed; its comment says why.

  7. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor

    Claim. Backlog HITL host-run worker is taking this now.

  8. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor

    Negative control, preregistered before the first paid run.

    Per plugins/playbooks/skills/skill-authoring/reference/rewrite-a-plugin.md:22-24 and :60-66:

    • Suite: the five ho-* cases in plugins/session-flow/evals/, including the new ho-wip-commit-on-pause, which covers the moved WIP-commit text.
    • Arms, launched together on one model (claude-opus-5-5), same flags (--runs 2 -j 2 --scaffold --ablation none --allow-tools Bash Write Edit --keep-temp; ho-todowrite-renders-list runs in its own invocation with CLAUDE_CODE_ENABLE_TASKS=0, as its case requires):
      • before: the branch copy with origin/main's skills/handoff swapped in.
      • after: the branch copy.
      • degraded: the before copy with the handoff SKILL.md body deleted (frontmatter kept, one placeholder sentence).
    • Detection thresholds (degraded against before): the noise report calls a case drop, or the mean case score falls by 0.15 or more. --own-copy-search-warns on the degraded side only. If neither holds, the cut is unmeasurable and the before text ships.
    • Ship rule for the cut: both arms VALID under run-validity.py, after non-inferior to before at margin 0.05.
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

    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    Work status

    confirmed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions