Harness Intelligence Wiki
Grilling

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.

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 idPrerequisitesDecisionState
Q1noneWhat must issue 224 make consistent?answered
Q2Q1Who decides which directories are real software?answered
Q3Q2What is the settings representation and validation boundary?answered
Q4Q2, Q3How are wiki, fixtures, ordinary tests, and broad workspace globs separated?answered
Q5Q3, Q4How do root and nested selected owners divide files?answered
Q6Q3, Q4, Q5What happens on first use or upgrade when the scope setting is absent?answered
Q7Q6How does scope selection change as a repository evolves?answered
Q8Q2What justifies a framework lint asset inside a selected scope?answered
Q9Q8What configuration is authoritative for a Software Scope?answered
Q10Q9Where do project-specific rules live after adoption?answered
Q11Q10What does preserving project policy mean during composition?answered
Q12Q5, Q9, Q11How do all managed entrypoints reach the same policy?answered
Q13Q4, Q5, Q12How are staged files, renames, deletions, and root aggregation handled?answered
Q14Q12, Q13Which warning, formatting, and commit-gate semantics remain unchanged?answered
Q15Q12, Q14What happens to existing custom scripts, aliases, repository checks, or CI commands?answered
Q16Q6, Q11, Q15When is the new policy safe to activate?answered
Q17Q16How are obsolete wiki/fixture/legacy lint artifacts retired?answered
Q18Q12, Q16What invalidates validation and cached lint proof?answered
Q19Q7, Q15, Q18What must the operator be able to inspect and recover from?answered
Q20Q1, Q12, Q19Which surfaces own the change and which existing guidance must be reconciled?answered
Q21Q4, Q8, Q11, Q13, Q14, Q17, Q18What evidence must demonstrate the fix?answered
Q22Q20, Q21What is the branch, release, and delivery scope for this work?answered
Q23Q1, Q2, Q9, Q12, Q16Which canonical terms and relationships prevent the original ambiguity?answered
Q24Q1–Q23Which choices are settled now and what remains before delivery planning?answered

Branch dashboard

BranchCompletionLocked directionStill open
System and ownership100%Managed quality scope; local CLI and existing shared boundaries; Q1, Q20Closed
Scope selection and topology100%Explicit settings; conventional/declared candidate inputs; root/nested ownership; Q2–Q5, Q7Closed
Settings and adoption lifecycle100%Missing versus empty, agent authoring, coherent activation, safe retirement; Q6, Q16–Q17Closed
Framework assets and project policy100%Local evidence, canonical config, preserved inherited overrides; Q8–Q11Closed
Runtime and gates100%One route, scoped staging, unchanged thresholds, custom conflicts; Q12–Q15Closed
Feedback and proof identity100%Inspectable route and existing exact-input cache discipline; Q18–Q19Closed
Behavioral verification100%Real entrypoint parity, ownership/recovery, exclusions and lifecycle; Q21Closed
Delivery constraints and language100%Existing stack, no inferred gate bypass, stable domain terms; Q22–Q24Closed

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 check reports 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. --yes does 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/changeRequired outcomeDecisions
Selected apps/web/src/page.tsxWeb owner's route and locally evidenced rulesQ4, Q8, Q12
Selected app's ordinary src/a.test.ts or test/setup.tsLinted normallyQ4
Embedded test/fixtures/example-repo/package.jsonNo software enrollment; its source is excludedQ4
Agent-identified fixture data/code without a manifestPersist explicit exclusion; do not infer all tests are fixturesQ4
Declared and selected app/backend/coreSupported custom layout; React email may justify React, not Next/TanStack/VitestQ2, Q8
apps/wiki, app/wiki, or wiki, even if declaredExcluded from generated lint setup and managed executionQ4, Q17
Root-only app with scopes ["."]Root is one valid Software ScopeQ3, Q5
Rootless repo with selected supported packageUse the actual package/install owner; no invented root manifestQ3
Missing lint.scopesSelection needed; no guessed broad/empty successQ3, Q6
Explicit lint.scopes: []Intentionally no managed software lint; preserve unrelated checksQ3, Q13
New selected-owner source fileCovered without editing the scope listQ7
New application packageCandidate for deliberate selection, not automatic enrollmentQ7
Missing/moved selected packageActionable drift; no recursive fallbackQ7
Parent policy explicitly allows no-explicit-anyPreserve choice through canonical composition and migrationQ10–Q11
Incompatible custom lint:ox/root scriptPreserve command; report exact authority conflict and unresolved adoptionQ15–Q16
Staged excluded-only changeSuccess without managed quality toolsQ13
Shared policy/settings/toolchain input changesValidate affected selected consumers even when the input lies outside their source foldersQ13, Q18
Rename across selected owners/exclusion boundaryUse both endpoints for affected ownership; run only eligible checksQ13
Modified/unowned obsolete configPreserve content and report the ownership conflictQ17
Equivalent file checked through script and edited-file verificationSame policy diagnostics and success thresholdQ12, Q14, Q21
Baseline receipt says current but route selects another configHealth reports unresolved policy authority; version alone is insufficientQ19

Technical grounding

E1–E4 are defined in the decision log.

BranchEvidence anchorsApplicable dimensions and dispositionOpen technical decisionsGrounding
Selection/topologyE1; repository-detector.ts; E3 settings schema/readerTopology, ownership, persistence and input validation resolved Q2–Q7; database/remote API N/Anonegrounded
Settings lifecycleE3 init/ensure/scaffold/update/check call pathsPersistence, bootstrap, mutation authority, missing/empty state and drift resolved Q3, Q6–Q7nonegrounded
Asset applicabilityE2 compiler and consumer manifests/importsLocal evidence, guidance versus execution seam, dependency direction resolved Q8nonegrounded
Policy compositionE2 runtime 0/25 witness; output.ts policy read/mergeInput ownership, inheritance, precedence, path semantics, preservation resolved Q9–Q11nonegrounded
Runtime/gatesE4 quality contract, staged runner, edit hookResolver seam, cwd/tool context, staged coverage, per-kind authority, thresholds resolved Q12–Q15; new remote runtime N/Anonegrounded
Adoption/recoveryE1 updater safe removal; E2 legacy split; E3 lifecycleCandidate validation, coherent activation, receipts, rollback/retry and retirement boundaries resolved Q16–Q17nonegrounded
Cache/feedbackIssue-215 contract; existing check/update resultsRelevant-input identity, local/cold fallback, diagnostic ownership and handoff resolved Q18–Q19nonegrounded
Delivery/proofRoot ownership rules; public scaffold/runner/hook/update testsSurface ownership, shared-skill source, public proof and parent/base constraints resolved Q20–Q22nonegrounded

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

  1. A selected Software Scope has one authoritative Effective Lint Policy.
  2. An eligible source file has exactly one selected owner; Excluded Paths have none for managed quality execution.
  3. Settings records scope intent. Project Lint Policy records project choices. Lint Routes and canonical configs are derived outputs, not competing intent.
  4. Equivalent managed verification selects the same policy, toolchain, file set, and failure semantics.
  5. Ordinary tests are software; fixture/example projects are not implicitly software owners.
  6. Discovery, ignored status, a baseline version, and cached proof do not establish current ownership or completed Lint Adoption.
  7. Preserving arbitrary custom execution is compatible with parity only after verification or explicit unresolved adoption.
  8. 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 authorityDisposition under this grill
Scaffold lint baseline's nearest-config behaviorSuperseded for managed routes by explicit scope-local policy routing; keep historical evidence intact
Issue-181 edit-hook config lookupSuperseded by shared Lint Route; retain controlled file mutation, native feedback, typed settings and bounded retries
Issue-203 generation/policy-preservation fixRetained and extended to inherited/renamed inputs and executable parity; no claim the previous fix was reverted
Context-plan broad guidance packsRetain useful guidance; separate lint-asset applicability from broad pack membership
Lefthook/portable gate ownership and modesRetain disabled policy, coexistence, each-owner/per-kind execution; apply accepted exclusions before coverage
Issue-215 update validation/cache/receipt rulesRetain safe candidate, operational failure, finding-preview, exact-input reuse and truthful partial progress semantics
Existing wiki lint producers/check obligationsMust retire excluded output coherently during implementation
hi-cli operator skillMust add scope/policy inventory and conflict handoff through canonical shared-skills source
Current docs/runbookStill 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.md index; 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 health

This 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.

On this page