Amends 0001: the gate list gains the house rules and
code:check
(final pass, since 0001 is a platform page).Context
The conventions in 0128 can only hold if a tool checks them. The owner locked the enforcement path on 2026-10-20 (conv Q6 to Q8). The owner also asked for one command that product repositories can run, similar to a coding-standard package for a PHP framework.Decision
- The house rules ship as a local oxlint
jsPluginin@stackra/oxlint-config:no-enum,no-hash-private,hook-file-name,member-orderanddisable-needs-reason. isolatedDeclarationsis on for every package (conv Q6).- Type-aware linting comes from
oxlint-tsgolint(conv Q7). - The decorators presets stop turning
erasableSyntaxOnlyoff (mem L379). stackra code:checkandstackra code:fixrun oxlint with the house plugin, oxfmt, the validator and the boundary check. They ship as@stackra/coding-standard, which product repositories install. It contributes its commands to the CLI through the discovery rule of ADR 0144 (metadata registry and explorers, a later ADR in wave 1).
Consequences
- Lint is stricter, and existing code may fail until it is fixed. Fixes happen as code is touched.
- If
lintchanges meaning in the task vocabulary,.agents/rules/task-vocabulary.mdmust change too (docs-governance). - One more package to maintain, in the developer category (0127).
Enforcement
planned — the house plugin rules are built and run bypnpm verify (lint step) once @stackra/oxlint-config ships them.
Until then the conventions are not checked by any tool.
Alternatives
- ESLint with its plugins: rejected, ESLint and Prettier are rejected tools (0011).
- Rely on review: rejected by the owner’s conv Q8 (a rule with no check is a comment).
Supersedes and sources
Supersedes: none. Amends the gate list of 0001 (final pass). Sources: owner’s code-conventions lock (stackra-decisions-2026-10-19.md L379, L382, L566, L574, 2026-10-20); proposal Q6 to Q8 in
stackra-notes/code-conventions-proposal.md.