Skip to content

HarnessStack: add Lane Tiering (fast/full doc-set axis) + full-lane load reduction to cut per-task doc volume #4

Description

@JasonJarvan

Context

Running the HarnessStack recipe (openspec-superpowers-repomem-ecc) on EverClaw, per-task documentation cost is fixed regardless of how small the change is. The slowness root is doc-authoring VOLUME on the small-task long tail -- not gate count (already cut in the 2026-05-13 auto-judge change) and not genuine duplication. RepoMem coverage is bimodal: of 16 archived tasks only 2 hold real RepoMem volume, 7/16 have empty temp dirs, and much of the rest is 00-INDEX boundary-policing boilerplate. A one-file-fits-all template makes a single-file typo pay nearly the same authoring tax as a cross-cutting dependency change.

Proposals

  1. Add a per-task Lane: <fast|full> field (default fast), declared in temporary-<task>.md Task Meta beneath Skip Bias. Lane is the STRUCTURAL axis (which documents must exist); Skip Bias is the PROCEDURAL axis (how readily to skip an auto-judge step). They are orthogonal -- all four combinations valid -- and Lane changes only which document artifacts a step produces, never a step's policy. Selection at task open: pick full if the change touches dependencies, is cross-cutting (>= 2 subpackages or crosses the Python <-> Node boundary), produces a durable RepoMem/persist/ asset, or adds net-new reusable public contract surface; otherwise fast.

  2. fast-lane document set + template collapse. fast lane requires only proposal.md + tasks.md + a ~20-line temporary-<task>.md (Scope / Risk one line each; no Pipeline-state table, no Long-term-knowledge-impact, no Code-Review-Triage unless a review yields deferred findings). It skips temp/<slug>/ and its 00-INDEX entirely; a real promote-candidate lesson lands in a single flat memory.md (no <slug>, no INDEX). design.md and specs/ are optional-by-default (omission noted in one line in proposal.md).

  3. full-lane load reduction (heavy tasks also get relief). Even on full: (a) drop the 00-INDEX out-of-scope self-attestation table (the per-task table asserting which OpenSpec content the temp does NOT duplicate); non-duplication is enforced by the RepoMem.merge HITL reviewer instead of each task writing a proof table; (b) design.md is collapsible to its ### Dn decision list when the decision count is small (no forced long-form), with the Pairing Rules still applying to whatever decisions remain.

  4. grill-with-docs as an auto-judge full-lane design-gate -- not a fixed checkpoint and not mandatory on full. A full-lane task MAY run the grill-with-docs skill to stress-test the draft design.md against the domain model and sharpen terminology before it becomes an execution plan. Modeled on the recipe's existing auto-judge tier: the agent judges whether there is a non-trivial design worth grilling, runs it when so, and logs a one-line Auto-Skip Log when skipping (a mechanically-full task such as a dependency bump skips it). Eligibility is full-lane-only (fast lane has no design tree); the window is after a draft design.md exists (Pipeline step 4 OpenSpec.propose) and before writing-plans (step 6). Its two DDD write-sinks are redirected into the existing doc sets: domain terms -> OpenSpec spec.md; ADR-worthy decisions -> design.md ### Dn. It does NOT create CONTEXT.md or docs/adr/.

  5. Promote-time codegraph de-dup rule. Do not promote to RepoMem (capture or merge) structural facts that codegraph can answer from current code (symbol locations, call graphs, impact sets). codegraph is the live map; persist/architecture/ holds only what codegraph cannot derive -- decisions, constraints, rejected alternatives, the WHY. This is the promote-time counterpart of the existing read-time rule in Pipeline step 2 ("codegraph is the map, RepoMem the why").

Invariants preserved

  • NO data migration: Lane governs NEW tasks only; archived tasks keep their existing docs.
  • NO layer removed: persist/ is untouched; Pipeline ordering, Merge Gates, and Verification Topology are unchanged.
  • Three-identifier invariant (<task> = change-id = <slug>) holds: a fast-lane task produces no temp/<slug>/, so the invariant collapses to <task> = change-id and is vacuously satisfied. Absence of <slug> is NOT a divergence and needs no Recipe Invariant Exception; temporary-<task>.md itself is still required on both lanes.
  • Skip Mechanism untouched: a document absent because the lane does not require it is absence-by-lane-definition, not a Skip-Mechanism skip -- no Auto-Skip Log and no exception. Steps with external side effects keep their policy on both lanes.
  • Reversible: fast -> full mid-flight promotion is cheap (flip the field, expand the template, create temp/<slug>/, back-fill). Residual risk is under-classification, mitigated by the fast default, the cheap promotion path, and the RepoMem.merge HITL reviewer as a checkpoint.

Local-overlay note (downstream instantiation)

In EverClaw the HarnessStack overlay (docs/) is kept machine-local via .git/info/exclude, out of the product repo history. This proposal targets the RECIPE TEMPLATE (the longterm small-team template + the openspec-superpowers-repomem-ecc recipe); each consuming repo instantiates it locally. If rejected upstream, it stays an EverClaw-local convention in its local longterm.md.

Validation / landing

  • The field, selection rule, Lane -> document-set mapping, full-lane load reduction, grill-with-docs design-gate, and the codegraph de-dup rule land in the recipe template (harness-stack/assets/templates/longterm/small-team.md + the recipe openspec-superpowers-repomem-ecc.md).
  • Already instantiated in the EverClaw-local docs/HarnessStack/longterm.md: new ## Lane Tiering section, Skip Bias disambiguation, Single Task Identifier vacuous-satisfaction clause, Hard Rules codegraph bullet, and the Temporary Contractor set Lane discretion. Verified by two independent review passes (cross-reference integrity, no semantic contradiction with the Skip Mechanism / Pairing Rules / step policies, markdown structure).

Deferred (Phase 2 -- gated, not started)

The real heavy-task conceptual-load win is flattening the RepoMem temp STRUCTURE for full lane too: collapse temp/<slug>/{requirements,architecture,memory} + 00-INDEX + the Pairing Rules ceremony into a single flat memory.md, while KEEPING the temp -> persist HITL merge gate. The capture layer's function (staging for curated promotion to persist/) is preserved; only the folder structure and the per-side bookkeeping go away. Two alternatives were considered and rejected:

  • Merge OpenSpec + RepoMem temp into one transient layer -- rejected: fights OpenSpec's third-party archive lifecycle (archive freezes the change record, stranding learnings that should flow to persist/).
  • Delete the RepoMem temp layer entirely (no transient capture) -- rejected: persist/memory/ (implementation-time tacit lessons) has no other source. OpenSpec is normative and frozen; Superpowers produces no durable normative artifact; ECC.session-state is explicitly excluded from RepoMem; code comments are discouraged. Deleting the capture surface forces lossy retroactive mining from session transcripts at merge time, concentrating risk on the highest-value persist category. Planning-time architecture decisions DO promote directly from design.md (the contract already requires persist/architecture/ to cite the OpenSpec archive link), so only the implementation-time tacit note is irreducible.

Phase 2 is gated on the recipe owner; no data migration; deferred.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions