Skip to content

docs(method): formalize leash files as a backlog lane for temporary scaffolds#386

Merged
flyingrobots merged 2 commits into
mainfrom
docs/method-leash-files
May 31, 2026
Merged

docs(method): formalize leash files as a backlog lane for temporary scaffolds#386
flyingrobots merged 2 commits into
mainfrom
docs/method-leash-files

Conversation

@flyingrobots
Copy link
Copy Markdown
Owner

Summary

Promotes the prototype pattern from jedit PR #33's session-port scaffold ("temporary thing tied to a deletion trigger") into an explicit METHOD lane: `docs/method/backlog/leash/`. Companion concrete leash for `JeditWorldlineSessionPort` lands separately in the jedit repo.

What lands

  • `docs/method/backlog/cool-ideas/METHOD_leash-files.md` — defines the lane, required frontmatter (`scaffold`, `repo`, `introduced_by`, `reason`, `deletion_trigger`, `symbols`, `status`), the four-state lifecycle (`active` → `triggered` → `deleted`, with `escalated` as the failure mode), and the future `xtask leash-audit` shape.

Why

Cross-repo / cross-cycle work routinely produces deliberate temporary scaffolds. The failure mode is forgetting to delete them when their reason expires. Prose backlog cards rely on humans nagging themselves. Leash files make the machine the nag.

The 2026-05-30 jedit PR #33 review-resolution session ended with exactly this watchout: "Temporary things love to buy furniture. Don't let it." This is the smallest possible mechanism that prevents the furniture-buying.

Composes with existing lanes

  • `asap/` keeps prose, structural record lives in `leash/`; the `companion_cards` field cross-references.
  • `graveyard/` receives completed leashes with their deletion SHA — historical proof of "we said this was temporary, here is the SHA that proved it."

Test plan

  • Markdownlint clean (0 errors).
  • Reviewer: confirm the frontmatter schema is acceptable before the first concrete leash lands in jedit. If schema needs tweaking, easier to fix here than to migrate two repos.
  • `xtask leash-audit` implementation is explicitly out of scope; defer until the second leash file gets created (the "you only need a Tool when you have two of the thing" rule).

Cross-repo

Companion PR will follow in jedit creating `jedit/docs/method/backlog/leash/jedit-session-port.md` using this schema.

…caffolds

Promotes the prototype pattern used on jedit PR #33's session-port
scaffold ("temporary thing tied to a deletion trigger") into an
explicit METHOD lane: docs/method/backlog/leash/.

Each leash file declares: scaffold name, owning repo, introduction
provenance (PR + SHA), reason, deletion_trigger (repo/cycle/phase),
the concrete symbols whose disappearance is the deletion proof, and
status (active | triggered | deleted | escalated).

Lifecycle:
  active     - scaffold in production, trigger not fired
  triggered  - trigger cycle/phase closed; surface on cycle-close
  deleted    - symbols grep clean; move to graveyard with SHA
  escalated  - triggered + still present past grace window; promote
               to asap/ for the next cycle

Tooling intent (not in this card):
  xtask leash-audit parses every leash, checks the trigger cycle's
  retro/, greps the named symbols, transitions status, surfaces
  warnings. Dumb script on purpose; the hard work is the records.

The pattern composes with existing lanes (asap/, bad-code/, cool-
ideas/, graveyard/) rather than replacing any of them. A prose
asap/ card and a structural leash/ record can co-exist via the
companion_cards field; the prose lives in asap/, the structural
record lives in leash/.

Companion: the first concrete leash file
(jedit/docs/method/backlog/leash/jedit-session-port.md) lands
separately in the jedit repo and references this card as the
convention it follows.

Motivation: the 2026-05-30 merge session ended with the explicit
watchout that the jedit session-port scaffold could become permanent
furniture. Humans are goldfish with keyboards; the machine is the
nag. This is the smallest possible mechanism that makes the machine
the nag.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 31, 2026

Warning

Review limit reached

@flyingrobots, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 28 minutes and 57 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: a09a49be-556a-40f9-9cc3-a85d2cb513df

📥 Commits

Reviewing files that changed from the base of the PR and between d3b5ffe and ce1957c.

📒 Files selected for processing (5)
  • crates/method/src/graph.rs
  • crates/method/src/workspace.rs
  • crates/method/tests/graph_tests.rs
  • crates/method/tests/status_tests.rs
  • docs/method/backlog/cool-ideas/METHOD_leash-files.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/method-leash-files

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 038c17e4e6

ℹ️ 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".

Comment thread docs/method/backlog/cool-ideas/METHOD_leash-files.md
Codex P2 review note on PR #386 surfaced the gap: defining the
leash convention card alone left the lane invisible to existing
tooling. `cargo xtask method status` iterates a fixed lane list
in crates/method/src/workspace.rs LANES; until that list included
"leash", any file dropped in docs/method/backlog/leash/ would
silently fail to appear in status output. The convention would
have shipped as half-real.

This commit closes the gap:

- workspace.rs LANES adds "leash" with a doc comment pointing at
  the convention card.
- graph.rs GRAPH_LANES adds "leash" so it shows up in
  `xtask method graph` output too.
- graph.rs lane_colors() gets an amber + dark-orange palette for
  leash, deliberately distinct from asap's soft yellow: leash is
  "tied, on a clock" (structurally committed to deletion), while
  asap is "urgent but open-ended."
- tests/graph_tests.rs and tests/status_tests.rs both add "leash"
  to their scaffold() helpers so the lane exists in every test
  workspace going forward.
- tests/status_tests.rs status_counts_lane_files now also
  asserts report.lanes.get("leash") == Some(&0) on the empty
  scaffold case, so a future refactor that drops the lane from
  LANES would fail this baseline.
- tests/status_tests.rs status_counts_leash_lane_files is a new
  positive regression: place two leash files, assert the lane
  count is 2 and total_items is 2. This is the RED that proves
  the registration actually works end-to-end, not just at the
  constant-list level.

The deeper `xtask leash-audit` machinery (transition active →
triggered → deleted/escalated, grep symbols, walk retro/) stays
out of scope per the "you only need a Tool when you have two of
the thing" rule. The convention card's "Not in scope here"
section is updated to reflect that the lane registration shipped
here while the audit is still future work.

Convention card updated to:
- Replace the "single script will do everything" framing with a
  two-tier description: lane registration (now) vs audit
  machinery (later).
- Explicitly cite the workspace.rs / graph.rs / status_tests.rs
  hookups so future readers know where to look.
@flyingrobots flyingrobots merged commit 8017ccc into main May 31, 2026
36 checks passed
@flyingrobots flyingrobots deleted the docs/method-leash-files branch May 31, 2026 03:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant