Skip to content

feat(bootstrap): optional INBOX.md for what is handed to the project from outside - #33

Merged
lozit merged 2 commits into
mainfrom
feat/project-inbox
Sep 29, 2026
Merged

lozit merged 2 commits into
mainfrom
feat/project-inbox

Conversation

@lozit

@lozit lozit commented Sep 29, 2026

Copy link
Copy Markdown
Owner

Work reaches a project from outside — a colleague, a ticket, another repository, a note made away from the desk — before anyone in it has looked at it. The generated CLAUDE.md had no named place for that, so it landed in a chat message, a commit body, or nowhere.

What ships

An optional INBOX.md at the repository root, offered by bootstrap and adopt, unchecked by default. One dated line per subject, verbatim. Triage marks a line — → ADR 0012, → PLAN.md, → dropped — rather than deleting it: the file is a record of what arrived, not a queue that empties.

It is named first in the generated CLAUDE.md's session-start list, before PLAN.md, because what arrived can change what the rest of the list means. No conditional was needed — the list already marks optional entries (if present), so one line serves both cases and nothing is dropped at generation time.

The plugin never fills it. How lines get there is the caller's business and is described nowhere here.

The request was refused first, and that is the part worth reading

It asked for a SessionStart hook shipped by the bootstrap, resolving a project slug and reading 01-projects/<slug>/inbox.md from a private store through VAULT_ROOT.

  • It would have been the first executable this plugin ever generates. Verified: no .sh, no hook, nothing runtime in any template today. ADR 0025 refused that class in its own words — a runtime hook is machinery against groundrules' nature… pure Markdown + JSON, no runtime — and eight days ago the same line was applied against this repository's own convenience, when the ADR-index check went to CI rather than to a PostToolUse hook. A line that holds only when it costs someone else is not a line.
  • It would have put one estate's private layout into a public plugin. VAULT_ROOT makes the root configurable; 01-projects/<slug>/inbox.md is still a shape that exists in exactly one person's store. That is the September lesson — an ADR rebuilt from scratch and a brief neutralised to remove exactly this — returning in a new form.

The refusal held, the requester accepted both points, and the brief was rewritten to the counter-proposal. Its header records the refusal, which is why it is worth reading before the ADR.

The principle, which outlasts inboxes

The plugin ships the convention; the caller ships the transport. General and portable here; particular and executable there. That is ADR 0048's actual subject — the file is just the first instance.

Second version. The first asked for a SessionStart hook shipped by the
bootstrap, reading a private layout through VAULT_ROOT; refused on ADR
0025 (the plugin ships no runtime) and on the rule that it never
describes one estate's layout.

Rewritten to the counter-proposal: groundrules ships the convention, the
estate ships the transport.
…from outside

Work reaches a project before anyone in it has looked at it, and the
generated CLAUDE.md had no named place for that. INBOX.md is offered by
bootstrap and adopt, unchecked by default: one dated line per subject,
verbatim, triage marks a line rather than deleting it. Named first in
the session-start list, before PLAN.md — what arrived can change what
the rest of the list means. No conditional needed: the list already
marks optional entries as (if present).

The plugin never fills it. How lines arrive is the caller's business.

The request behind this asked for a SessionStart hook reading a private
store's layout through VAULT_ROOT. Refused: it would have been the first
executable this plugin generates, reopening ADR 0025 eight days after
the same line was applied against this repo's own convenience, and it
would have put one estate's layout into a public plugin. ADR 0048
records the refusal and the split it produced — the convention here, the
transport elsewhere.

See CHANGELOG [Unreleased] > Added.
@lozit
lozit merged commit 8e012df into main Sep 29, 2026
2 checks passed
@lozit
lozit deleted the feat/project-inbox branch September 29, 2026 21:06
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