Glass Box Terrarium, explained from the inside

Last updated · Latest source on GitHub ↗

House rulesLesson

Out-of-scope records

A rejected idea comes back. A closed issue hides why it was turned down, so the next person or agent to ask for the same thing starts the argument from scratch. An out-of-scope record writes the no down once, where the next request will meet it.

Know out-of-scope records already? Skip to In Terrarium.

Outside the box · General

The concept

Keep one short file per rejected idea in a folder of the repository. Each file says what the project won't do, why, in reasons that will still hold next year, and which requests asked for it. A file is about a concept, not an issue: every later request for the same thing joins the same file.

Whoever triages a new request reads the folder first and matches by meaning, not by keyword: "night theme" matches a file about dark mode. On a match, the old reasons go to the person deciding, who confirms the no, changes their mind, or judges the new request related but distinct and triages it as usual. Changing your mind means deleting or rewriting the file.

Only a rejected idea gets a file. A request closed because the feature already exists is not a rejection, and a file for it would make the next triage turn down something the project has.

Looking inside

In Terrarium

The records live in .out-of-scope/. The format and the triage steps come from the pack's triage Skill, whose .agents/skills/triage/OUT-OF-SCOPE.md describes them; Terrarium keeps it as installed (Skill packs). A record opens with the decision in one sentence:

.out-of-scope/ci-enforced-doc-invariants.md ↗1–5as of
1# CI-Enforced Documentation Invariants
2
3This project does not add gate/CI checks that block a change because a
4documentation or metadata invariant is unsatisfied — a doc mentioning a retired
5term, a commit missing its authorship stamp, and their relatives.

triage reads every record before it recommends anything for a request, and writes one when a maintainer rejects an enhancement, as an issue or a pull request, as wontfix, the label for a request that will not be actioned (Issue triage labels explains the labels). Terrarium's own unattended sweep, .agents/skills/auto-triage/SKILL.md, is one pass a user starts that triages every open issue without asking about each. Its closing rule sends a rejection to ready-for-human, the label for an issue that waits for a person:

.agents/skills/auto-triage/SKILL.md ↗58–62as of
58Auto-close as `wontfix` only the two **objective, repo-verifiable** kinds:
59**already-implemented** (point to where it lives; `state_reason: completed`) and
60**duplicate** (point to the canonical issue). A reject-as-out-of-scope is a
61judgment call → `ready-for-human`; write `.out-of-scope/` only on a Trusted user's
62confirm (see `OUT-OF-SCOPE.md`).

Which issues the sweep may close on its own: ADR-0022 (docs/adr/0022-autonomous-triage-sweep.md).

Why it's built this way

  • A rejection waits for a person. Whether an idea is out of scope is a judgement call, and a wrong close hides a request. The sweep closes only what the repo proves and hands every rejection to a person. ADR-0022 (docs/adr/0022-autonomous-triage-sweep.md).
  • The pack's format, as installed. The record format and triage steps belong to the outside pack's triage Skill, which Terrarium never edits (Skill packs says why). The cost: a step that doesn't fit Terrarium can't be changed in place. .agents/skills/triage/OUT-OF-SCOPE.md
  • Audits skip records. A record is written for a human to apply once, at triage, not for agents to read as instructions, so the Skills that audit or prune instructions leave the folder out. The cost: a record can go stale with no check noticing. .agents/skills/prune-trial/SKILL.md

What to watch for

  • Reread a record before you lean on it. Its reasons are as of when it was written (Audits skip records, above).
  • A record is not an ADR. A record only says no to one idea, for whoever triages the next request for it; what an ADR records instead: Decision records.

Try it in your project

Next time you close a feature request as "won't do", create .out-of-scope/<idea>.md with the decision in one sentence, the reasons, and a link to the request. Before you triage the next one, read the folder.

Where next

Last updated · Latest source on GitHub ↗

Something went wrong

This content couldn’t be loaded. Reloading the page usually fixes it.

Technical details
route: /t/glassbox/guide/terrarium-practice/out-of-scope-records