Skip to content

build(repo): move lint, test and mutation settings to the root - #37

Merged
kiro-systemf[bot] merged 24 commits into
mainfrom
lake1/shared-configs
Oct 7, 2026
Merged

kiro-systemf[bot] merged 24 commits into
mainfrom
lake1/shared-configs

Conversation

@systemfsoftware-maker

@systemfsoftware-maker systemfsoftware-maker commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator

Lake 1, U5 (Evaluator) — stacked on #36.

Operator approval: Kiro, 2026-10-05 (GATE1).

  • Root oxlint.shared.ts (the recommended preset plus the strict TypeScript tier), vitest.shared.ts (packageTestConfig(aliases)) and stryker.shared.ts (packageStrykerConfig(mutate)) hold the house settings. Each package config extends them and declares only its aliases and its mutate set.
  • Both lint overrides are deleted (R67): preset 4.0.0 already accepts Gherkin step bodies outside it and node imports in build configs.
  • Departure from the plan's file name: the plan named the root lint file oxlint.config.ts. .lintstagedrc.js lints each staged file under the nearest directory holding an oxlint.config.ts, so a root file with that name would turn root tooling files (commitlint.config.ts) into a type-aware lint target with no program. oxlint.shared.ts avoids that, and the setting stays in one root file.
  • Root package.json gains @systemfsoftware/oxlint-config-recommended, @systemfsoftware/stryker-js and vitest, the three packages the shared files import. Root tsconfig.node.json type-checks the shared files; the package node program sets allowImportingTsExtensions (with noEmit) so its configs can import them by .ts path at runtime.
  • Turbo: //#typecheck:node tracks the shared files; lint, test and mutation track $TURBO_ROOT$/<shared file>.
  • tsconfig.base.json declares the one repo-wide unstable-API opt-in, effect/http (Kiro ruling, 2026-10-05): Effect 4.0.1 ships HTTP only under the unstable marker, and global-fetch-in-effect bans the fetch alternative.

QA

$ pnpm check:ci
check:ci exit=0
$ git grep -nE "'(off|warn)'|\"(off|warn)\"" -- '*oxlint.config.ts' '*oxlint.shared.ts'
(no output) override-grep exit=1
# sabotage: append `debugger;` to packages/starter/src/index.ts
$ pnpm --filter @TODO/starter lint
src/index.ts:2:1: error eslint(no-debugger): `debugger` statement is not allowed help: Remove the debugger statement
# reverted

Restack, 2026-10-06

The commit extending the opt-in to effect/observability left with the dropped traces layer (#45): it existed only for the OTLP exporter, and nothing in the trimmed stack imports that module. Gate at bbe39c1, in a clean worktree: pnpm install --frozen-lockfile and pnpm check:ci exit 0.

@systemfsoftware-maker
systemfsoftware-maker added this pull request to stack #34 October 5, 2026 19:40
@ryanleecode
ryanleecode force-pushed the lake1/shared-configs branch from 484c54c to e3948bc Compare October 5, 2026 22:38
@ryanleecode
ryanleecode force-pushed the lake1/shared-configs branch from cd81ee6 to d2c06d9 Compare October 6, 2026 01:46
@systemfsoftware-maker
systemfsoftware-maker removed this pull request from stack #34 October 6, 2026 16:04
@systemfsoftware-maker
systemfsoftware-maker added this pull request to stack #54 October 6, 2026 19:52
@systemfsoftware-maker
systemfsoftware-maker removed this pull request from stack #54 October 6, 2026 21:56
@systemfsoftware-maker
systemfsoftware-maker added this pull request to stack #59 October 6, 2026 21:57
@systemfsoftware-maker
systemfsoftware-maker removed this pull request from stack #59 October 6, 2026 22:13
@systemfsoftware-maker
systemfsoftware-maker added this pull request to stack #61 October 6, 2026 22:13
check:ci no longer runs stryker. The release gate on push to main plans one
shard per workspace package that declares a mutation script, refuses an
empty set, and runs each shard at break 100 on the fleet with its
incremental report cached. The checker drops
prioritizePerformanceOverAccuracy, which stryker-js 15 removes. Operator
approval: Kiro, 2026-10-05 (GATE1)
The plan and per-package mutation jobs move from the self-hosted fleet,
which admits only private repositories, to ubuntu-latest. Mutation stays
one parallel job per package.

Operator approval: Kiro, 2026-10-05 (GATE1)
A package with a mutation script whose mutate globs match nothing
reports zero mutants and passes a break-100 threshold vacuously
(review finding #9). Each package now declares its globs once, as
stryker.mutate in package.json; its Stryker config reads them and the
release gate's shard planner expands them. The planner fails red at
plan time naming the package, its directory and its globs when they
match no file, including a package with no declared globs. Its Deno
tests are ordinary tests: a turbo root task, test:scripts, runs them
through the dev shell's deno, and both pnpm test and check:ci run it,
so a local check:ci covers the planner exactly as CI does
…ns to mutate

A decision is a *.workflow.ts file. When no workspace package has one, the planner emits an empty shard list and a 'No decisions to mutate' notice, and the mutation job is skipped. When decisions exist and no package declares a mutation script, it still refuses the empty set, naming how many decisions went unmutated. Kiro ruling, 2026-10-06
Every catalog entry is an exact version: effect 4.0.1, the
systemfsoftware toolchain on its Effect 4 stable majors (recommended preset
4.0.0, stryker-js 15.0.1, vitest 2.0.0, gherkin-spec 7.0.1) and current
tooling. minimumReleaseAge 1440 is explicit, so the policy is strict;
the exclude list holds the effect name patterns and one exact entry per
resolved systemfsoftware package. oxlint-tsgolint stays 7.0.2001, the
exact peer the presets require. turbo 2.11 writes an agent guidance block
into AGENTS.md unless agentGuidance is false, so turbo.json opts out.
Grader package majors move here because they require Effect 4 stable
(CONST-W3 declared)
oxlint.shared.ts, vitest.shared.ts and stryker.shared.ts hold the house
settings; each package config extends them and declares only its own
mutate set and aliases. Both lint overrides are gone: preset 4.0.0 already
accepts Gherkin step bodies and build-config imports. The root lint file is
named oxlint.shared.ts so lint-staged's nearest-config walk never treats
the repository root as a package. Turbo inputs track the shared files.
Operator approval: Kiro, 2026-10-05 (GATE1)
…root

Root tsconfig.base.json extends the bundler/dom preset and allows exactly
effect/http through the effect language service. effect 4.0.1 ships HTTP
only as unstable and global-fetch-in-effect bans the fetch alternative.
Operator approval: Kiro, 2026-10-05 (GATE1)
starter-verify F10 and F13 (Kiro ruling, cycle 35): drop workflow_dispatch so mutation runs on push to main only; the README no longer claims Cell workflows, Cell.provide, tenant-bound store ports or compile-time phase markers, and no longer tells readers to run pnpm mutation locally
Ryan's standing rule via Kiro (cycle 52): no macOS anywhere. The flake builds x86_64-linux and aarch64-linux only; dprint pins only Linux archives; the comment-checker sandbox loses its sandbox-exec branch; AGENTS.md says CI is Linux only
Conductor ruling, cycle 62: the same bump pnpm-release-management#31 took. effect and every @effect/* stay at 4.0.1; none resolves lower. tsgo 0.50.0 reports nothing new: typecheck and lint are clean uncached. @systemfsoftware/oxlint-config-recommended 4.0.0 still pulls its own @effect/tsgo 0.45.0
@kiro-systemf
kiro-systemf Bot removed this pull request from stack #61 October 7, 2026 15:41
@kiro-systemf
kiro-systemf Bot changed the base branch from lake1/effect4-pins to main October 7, 2026 15:43

@kiro-systemf kiro-systemf Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conductor verdict: all checks green on 63786d6, 0 threads, no unchecked boxes, no starter-verify findings on this layer, hunt grep clean; squash tree == tested head tree.

kiro-systemf[bot]
kiro-systemf Bot previously approved these changes Oct 7, 2026

@kiro-systemf kiro-systemf Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conductor verdict: all checks green on 63786d6, 0 threads, no unchecked boxes, no starter-verify findings on this layer, hunt grep clean; squash tree == tested head tree.

@systemfsoftware-maker
systemfsoftware-maker dismissed kiro-systemf[bot]’s stale review October 7, 2026 15:45

The merge-base changed after approval.

@kiro-systemf kiro-systemf Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conductor verdict: 7/7 green on 72a10ef; tree identical to reviewed 63786d6 (merge -s ours of main); 0 threads.

@kiro-systemf
kiro-systemf Bot merged commit be6d01e into main Oct 7, 2026
7 checks passed
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