Issue 224 Managed Lint Scope and Policy Grill Status
Issue 224 Managed Lint Scope and Policy Grill Status
Scope and authority
Compose the accepted discovery/scope and Oxlint-authority research into one requirements record. Fix issue 224 across generated JavaScript/TypeScript lint, Lefthook, edited-file feedback, and update validation. Continue draft #225 on top of #223. Product implementation, consumer mutation, and release publication are outside this requirements task.
The user approved all presented proposals and expressly delegated routine defaults. The compiled record and lifecycle defaults are now explicitly approved; R2 closes the grill and authorizes full delivery.
- Decision log: Q1–Q24 is detailed authority.
- Scope research.
- Policy research and runtime witness.
- Existing Commit Gate language and update language remain applicable; superseded behavior is identified below.
Current Round
- Round: R2 — compiled record approved and grill closed.
- Current decision frontier: empty.
- Shared-understanding confirmation: confirmed by the R2 full-delivery instruction.
- Previously presented proposals: explicitly accepted by the user.
- Default authority: user authorized defining routine behaviors without needless questions; the log marks each such choice.
- Domain-modeling consistency: complete; glossary is now published in the canonical domain projection.
- No unanswered product decision or unknown active technical branch.
- Branch completion: 100%. Compiled-record approval is explicit; this is requirements closure, not implementation progress.
| Question id | Prerequisites | Decision | State |
|---|---|---|---|
| Q1 | none | What must issue 224 make consistent? | answered |
| Q2 | Q1 | Who decides which directories are real software? | answered |
| Q3 | Q2 | What is the settings representation and validation boundary? | answered |
| Q4 | Q2, Q3 | How are wiki, fixtures, ordinary tests, and broad workspace globs separated? | answered |
| Q5 | Q3, Q4 | How do root and nested selected owners divide files? | answered |
| Q6 | Q3, Q4, Q5 | What happens on first use or upgrade when the scope setting is absent? | answered |
| Q7 | Q6 | How does scope selection change as a repository evolves? | answered |
| Q8 | Q2 | What justifies a framework lint asset inside a selected scope? | answered |
| Q9 | Q8 | What configuration is authoritative for a Software Scope? | answered |
| Q10 | Q9 | Where do project-specific rules live after adoption? | answered |
| Q11 | Q10 | What does preserving project policy mean during composition? | answered |
| Q12 | Q5, Q9, Q11 | How do all managed entrypoints reach the same policy? | answered |
| Q13 | Q4, Q5, Q12 | How are staged files, renames, deletions, and root aggregation handled? | answered |
| Q14 | Q12, Q13 | Which warning, formatting, and commit-gate semantics remain unchanged? | answered |
| Q15 | Q12, Q14 | What happens to existing custom scripts, aliases, repository checks, or CI commands? | answered |
| Q16 | Q6, Q11, Q15 | When is the new policy safe to activate? | answered |
| Q17 | Q16 | How are obsolete wiki/fixture/legacy lint artifacts retired? | answered |
| Q18 | Q12, Q16 | What invalidates validation and cached lint proof? | answered |
| Q19 | Q7, Q15, Q18 | What must the operator be able to inspect and recover from? | answered |
| Q20 | Q1, Q12, Q19 | Which surfaces own the change and which existing guidance must be reconciled? | answered |
| Q21 | Q4, Q8, Q11, Q13, Q14, Q17, Q18 | What evidence must demonstrate the fix? | answered |
| Q22 | Q20, Q21 | What is the branch, release, and delivery scope for this work? | answered |
| Q23 | Q1, Q2, Q9, Q12, Q16 | Which canonical terms and relationships prevent the original ambiguity? | answered |
| Q24 | Q1–Q23 | Which choices are settled now and what remains before delivery planning? | answered |
Branch dashboard
| Branch | Completion | Locked direction | Still open |
|---|---|---|---|
| System and ownership | 100% | Managed quality scope; local CLI and existing shared boundaries; Q1, Q20 | Closed |
| Scope selection and topology | 100% | Explicit settings; conventional/declared candidate inputs; root/nested ownership; Q2–Q5, Q7 | Closed |
| Settings and adoption lifecycle | 100% | Missing versus empty, agent authoring, coherent activation, safe retirement; Q6, Q16–Q17 | Closed |
| Framework assets and project policy | 100% | Local evidence, canonical config, preserved inherited overrides; Q8–Q11 | Closed |
| Runtime and gates | 100% | One route, scoped staging, unchanged thresholds, custom conflicts; Q12–Q15 | Closed |
| Feedback and proof identity | 100% | Inspectable route and existing exact-input cache discipline; Q18–Q19 | Closed |
| Behavioral verification | 100% | Real entrypoint parity, ownership/recovery, exclusions and lifecycle; Q21 | Closed |
| Delivery constraints and language | 100% | Existing stack, no inferred gate bypass, stable domain terms; Q22–Q24 | Closed |
Compiled shared understanding
Selection and file ownership — Q2–Q7
The operating agent compiles the real Software Scopes and persists them:
{
"lint": {
"scopes": ["apps/web", "app/backend/core", "packages/ui"],
"exclude": ["apps/web/test/fixtures/**"]
}
}lint.scopes contains exact repository-relative package roots, not glob
subscriptions. Conventional apps/* / packages/* and declared workspace
packages supply candidates, including nonstandard layouts. The saved list is
authoritative. Each root must be contained, have its own manifest, and satisfy the
supported tool/installation contract.
Wiki roots wiki, app/wiki, and apps/wiki are excluded. The agent records
other embedded examples/fixtures in lint.exclude; explicit exclusions take
precedence. Nested unselected package boundaries do not become parent source.
Ordinary test files remain included. General repository discovery is retained
for features outside lint.
Each eligible file resolves to one most-specific selected owner. A monorepo root
normally dispatches; "." may explicitly own standalone/root application code,
excluding child package boundaries and more-specific owners.
Lifecycle defaults — Q3, Q6–Q7
- Missing scope settings require explicit scope authoring. The agent can complete routine classification under the current task; the bare CLI reports the missing prerequisite rather than guessing from recursive discovery.
- An explicit empty list deliberately selects no software lint. It is distinct from missing/legacy settings.
hi checkreports selection/routing health read-only. Existing init/ensure and scaffold/update settings/handoff paths carry selection and preserve it.- New ordinary files inside selected owners are covered. New application roots
require a deliberate selection update; moved/missing roots cause actionable
drift.
--yesdoes not enroll every discovered package. - Dependent new lint adoption waits for valid selection and compatible policy. Existing independent progress and recovery reporting remain truthful.
One effective policy — Q8–Q12
Every selected owner gets a canonical oxlint.config.ts. It explicitly composes
only locally evidenced framework assets and preserved Project Lint Policy.
React email code does not imply Next/TanStack; generic quality guidance does not
imply Vitest.
Project policy lives in a separate project-owned input: oxlint.project.json
is the default new filename. Existing compatible shared JSON/JSONC can remain
explicit inputs. Migration inventories the effective parent/renamed/transitive
policy chain and preserves explicit rules, ignores, overrides, environments,
globals, settings, and path semantics. Opaque policy creates a named conflict.
Every managed entrypoint uses the same derived Lint Route and explicit config. The root command dispatches to owners. No second broad root lint pass or hand-maintained route registry is introduced.
Gates, migration, and recovery — Q13–Q19
Scope/exclusions are applied before staged routing and coverage. Excluded-only changes invoke neither managed linter nor formatter. Mixed changes check their eligible portion; renames/deletions select the right affected owner safely. Changes to shared policy, scope settings, routing, or relevant toolchain inputs select dependent owners for validation without treating root metadata as another implicit software scope or scanning excluded source.
Keep generated warning rejection, represented custom failure thresholds, read-only precommit formatting, disabled gate policy, and hook-manager coexistence. Edited-file mutation retains existing file-safety boundaries.
Compatible custom commands remain after verification. Incompatible commands stay intact with precise unresolved migration; the CLI must not report converged adoption while a known route still selects another policy. An arbitrary ad hoc user command is outside the managed guarantee.
Validate the whole proposed adoption before coherent activation. Configuration, tool, input, or authority failures block dependent activation. Lint findings retain existing preview/report behavior and do not authorize bulk application fixes. Retire only safely owned obsolete artifacts; preserve modified/unowned policy and never recreate excluded wiki/fixture output on the next update.
Inspectability and proof cover the actual owner/config/toolchain, transitive inputs, saved selection, and route. Reuse existing exact-input caching and read-only check semantics; no new service or whole-repository lint on every drift check is required.
Concrete scenario matrix
| Input/change | Required outcome | Decisions |
|---|---|---|
Selected apps/web/src/page.tsx | Web owner's route and locally evidenced rules | Q4, Q8, Q12 |
Selected app's ordinary src/a.test.ts or test/setup.ts | Linted normally | Q4 |
Embedded test/fixtures/example-repo/package.json | No software enrollment; its source is excluded | Q4 |
| Agent-identified fixture data/code without a manifest | Persist explicit exclusion; do not infer all tests are fixtures | Q4 |
Declared and selected app/backend/core | Supported custom layout; React email may justify React, not Next/TanStack/Vitest | Q2, Q8 |
apps/wiki, app/wiki, or wiki, even if declared | Excluded from generated lint setup and managed execution | Q4, Q17 |
Root-only app with scopes ["."] | Root is one valid Software Scope | Q3, Q5 |
| Rootless repo with selected supported package | Use the actual package/install owner; no invented root manifest | Q3 |
Missing lint.scopes | Selection needed; no guessed broad/empty success | Q3, Q6 |
Explicit lint.scopes: [] | Intentionally no managed software lint; preserve unrelated checks | Q3, Q13 |
| New selected-owner source file | Covered without editing the scope list | Q7 |
| New application package | Candidate for deliberate selection, not automatic enrollment | Q7 |
| Missing/moved selected package | Actionable drift; no recursive fallback | Q7 |
Parent policy explicitly allows no-explicit-any | Preserve choice through canonical composition and migration | Q10–Q11 |
Incompatible custom lint:ox/root script | Preserve command; report exact authority conflict and unresolved adoption | Q15–Q16 |
| Staged excluded-only change | Success without managed quality tools | Q13 |
| Shared policy/settings/toolchain input changes | Validate affected selected consumers even when the input lies outside their source folders | Q13, Q18 |
| Rename across selected owners/exclusion boundary | Use both endpoints for affected ownership; run only eligible checks | Q13 |
| Modified/unowned obsolete config | Preserve content and report the ownership conflict | Q17 |
| Equivalent file checked through script and edited-file verification | Same policy diagnostics and success threshold | Q12, Q14, Q21 |
| Baseline receipt says current but route selects another config | Health reports unresolved policy authority; version alone is insufficient | Q19 |
Technical grounding
E1–E4 are defined in the decision log.
| Branch | Evidence anchors | Applicable dimensions and disposition | Open technical decisions | Grounding |
|---|---|---|---|---|
| Selection/topology | E1; repository-detector.ts; E3 settings schema/reader | Topology, ownership, persistence and input validation resolved Q2–Q7; database/remote API N/A | none | grounded |
| Settings lifecycle | E3 init/ensure/scaffold/update/check call paths | Persistence, bootstrap, mutation authority, missing/empty state and drift resolved Q3, Q6–Q7 | none | grounded |
| Asset applicability | E2 compiler and consumer manifests/imports | Local evidence, guidance versus execution seam, dependency direction resolved Q8 | none | grounded |
| Policy composition | E2 runtime 0/25 witness; output.ts policy read/merge | Input ownership, inheritance, precedence, path semantics, preservation resolved Q9–Q11 | none | grounded |
| Runtime/gates | E4 quality contract, staged runner, edit hook | Resolver seam, cwd/tool context, staged coverage, per-kind authority, thresholds resolved Q12–Q15; new remote runtime N/A | none | grounded |
| Adoption/recovery | E1 updater safe removal; E2 legacy split; E3 lifecycle | Candidate validation, coherent activation, receipts, rollback/retry and retirement boundaries resolved Q16–Q17 | none | grounded |
| Cache/feedback | Issue-215 contract; existing check/update results | Relevant-input identity, local/cold fallback, diagnostic ownership and handoff resolved Q18–Q19 | none | grounded |
| Delivery/proof | Root ownership rules; public scaffold/runner/hook/update tests | Surface ownership, shared-skill source, public proof and parent/base constraints resolved Q20–Q22 | none | grounded |
The technical defaults name contracts and invariants, not implementation task order or new generic abstractions. Exact internal modules and reversible tactics belong to create-plan.
Glossary
Terms
- Software Scope: a selected package-root owner of software subject to managed quality checks. Avoid using “discovered package” or “workspace” as if either alone proves accepted ownership.
- Excluded Path: repository content omitted from managed quality execution regardless of surrounding owner.
- Project Lint Policy: project-authored rules and configuration choices preserved as inputs across baseline updates.
- Effective Lint Policy: the composed rules, settings, exclusions, and failure semantics applied to one Software Scope under the supported toolchain.
- Lint Route: the derived binding from a Software Scope to its executable config and command context.
- Lint Adoption: the validated, ownership-safe transition from prior lint setup to selected scopes and coherent routes.
Use the existing meanings of Commit Gate, Quality Command Contract, Scaffold Manifest, Validation Candidate, and Validation Result.
Relationships and axioms
- A selected Software Scope has one authoritative Effective Lint Policy.
- An eligible source file has exactly one selected owner; Excluded Paths have none for managed quality execution.
- Settings records scope intent. Project Lint Policy records project choices. Lint Routes and canonical configs are derived outputs, not competing intent.
- Equivalent managed verification selects the same policy, toolchain, file set, and failure semantics.
- Ordinary tests are software; fixture/example projects are not implicitly software owners.
- Discovery, ignored status, a baseline version, and cached proof do not establish current ownership or completed Lint Adoption.
- Preserving arbitrary custom execution is compatible with parity only after verification or explicit unresolved adoption.
- Findings, operational failures, and unresolved authority are distinct outcomes.
Resolved ambiguities
- “One layer deep” bounds conventional candidate discovery; selected declared custom layouts remain supported. It does not bound source-file depth.
- “Tests” means ordinary test source, which stays linted. Embedded test/example repositories and fixture content are separate exclusions.
- “One config” means one executable authority per owner, not one giant root file.
- “Preserve policy” includes inherited explicit choices and path meaning, not just retaining the bytes of a nearby JSON file.
- “Warnings” means severity; failure thresholds are separate and are preserved.
- “All entrypoints” means managed/adopted routes, not arbitrary future commands a
user can manually invoke with a different
--config.
Reconciliation and inherited constraints
| Existing authority | Disposition under this grill |
|---|---|
| Scaffold lint baseline's nearest-config behavior | Superseded for managed routes by explicit scope-local policy routing; keep historical evidence intact |
| Issue-181 edit-hook config lookup | Superseded by shared Lint Route; retain controlled file mutation, native feedback, typed settings and bounded retries |
| Issue-203 generation/policy-preservation fix | Retained and extended to inherited/renamed inputs and executable parity; no claim the previous fix was reverted |
| Context-plan broad guidance packs | Retain useful guidance; separate lint-asset applicability from broad pack membership |
| Lefthook/portable gate ownership and modes | Retain disabled policy, coexistence, each-owner/per-kind execution; apply accepted exclusions before coverage |
| Issue-215 update validation/cache/receipt rules | Retain safe candidate, operational failure, finding-preview, exact-input reuse and truthful partial progress semantics |
| Existing wiki lint producers/check obligations | Must retire excluded output coherently during implementation |
| hi-cli operator skill | Must add scope/policy inventory and conflict handoff through canonical shared-skills source |
| Current docs/runbook | Still describes current implementation; update with verified delivery, not as an already-implemented claim in this grill |
Both research reports point here as the accepted decision record while retaining dated observations/candidate history. No executable implementation plan already exists for issue 224; create-spec and create-plan must reconcile these predecessor contracts without editing historic proof into a false new result.
Parked and out-of-scope work
No product branch is parked or deferred. Deliberate boundaries: bulk fixing consumer source findings, rewriting arbitrary shell automatically, global non-lint discovery redesign, a new remote service, unrelated Python/tooling redesign, publishing releases, and repairing this stack's inherited hook failures.
Non-design validation still required
- Full supported consumer reproduction and Mac/complete CI evidence.
- Settings authoring/read/write/upgrade behavior and realistic root/custom layouts.
- Correct local asset selection, inherited-policy semantics and command parity.
- Wiki/fixture exclusion, ordinary tests, staged rename/delete and deduplication.
- Coherent adoption, interruption/retry, ownership preservation and repeated convergence.
- Relevant-input cache invalidation and truthful conflict/drift feedback.
- Owning type/content/projection checks and real generated-runtime execution.
The observed 0-versus-25-error witness proves the existing defect, not a repaired implementation.
Handoff and work log
- Owning surfaces for authored artifacts: private wiki grilling/research and
docs/README.mdindex; no product source changed. - Skills: requirements-grill, grilling, domain-modeling, prior brainstorm, wait-what for plain decision wording, show-me for the view below, and writing-for-agents for durable handoff structure.
HI-WIKI-001: pass — existing grilling route, both pages registered in metadata, content check passed.HI-WIKI-003: pass — frontmatter, evidence links, wiki-log bookkeeping, content check and all 3 public wiki contract tests passed. Local links and all 24 stable question IDs/answered states were checked.HI-DOCS-001: pass — product decisions live in the private wiki and the docs index routes to them; implemented runbooks remain truthful.- CLI/shared-skill/runtime checks: not-applicable to this documentation-only diff; no implementation or generated runtime was changed.
- No changelog changed: release classification is none.
- Known publication limits: initial #225 draft used a one-time authorized hook bypass; existing broad wiki lint and pre-push argument failures remain outside this requirements task. This composition is local and does not reuse that exception.
All branches are now 100% closed. The glossary projection and compiled SPEC are written; implementation and remote retention proceed under full delivery.
Derived reasoning view
agent inventories and selects real software
|
settings: scopes + exclusions
|
local framework evidence + project-owned policy
|
effective config + derived lint route
/ | | \
scripts CI Lefthook edit hook
|
same policy / eligible source / toolchain
|
validated adoption and truthful healthThis view summarizes Q1–Q24; the log and glossary are authoritative.
R2 — Explicit closure and delivery authority
On 2026-09-22 the user confirmed this compiled record: “i approve this. compose it into a delivery-phase and implement it. go finish it”. All eight branches are 100% closed, with no parked branches. Final domain consistency preserves the six terms and the existing Commit Gate/update vocabulary without contradiction.
- Canonical glossary.
- Compiled specification.
- Implementation proof and release readiness remain delivery work; closure does not assert them.