mjolnir-qa 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -9,6 +9,12 @@ Rule behavior changes (new rules, FP-rate changes against the corpus,
9
9
  severity changes) are first-class entries here — rule IDs are immutable
10
10
  once shipped, so this file is the record of what changed between versions.
11
11
 
12
+ ## [1.0.2] — 2026-09-09
13
+
14
+ ### Changes since 1
15
+
16
+ - P8: depth adjudication — no unexplained depth (all 89 LEXICAL rules + matrix completion + migration deferral) (#70)
17
+
12
18
  ## [1.0.1] — 2026-09-09
13
19
 
14
20
  ### Changes since 0
package/dist/cli.d.mts CHANGED
@@ -400,6 +400,51 @@ interface Workspace {
400
400
  * Phase 6).
401
401
  */
402
402
  type DetectionStrategy = "LEXICAL" | "AST" | "SEMANTIC" | "QA_MODEL" | "FRAMEWORK" | "RUNTIME";
403
+ /**
404
+ * Closed reason-code set for `strategyJustification` (master plan P8,
405
+ * plan 1788853205786 — flag 6, decision 9: "no unexplained depth").
406
+ * A LEXICAL rule ships only when its lexical form is JUSTIFIED by one
407
+ * of these codes; the depth-adjudication doc renders them.
408
+ */
409
+ type StrategyReasonCode =
410
+ /** The detection target is a config/workflow surface whose statements
411
+ * ARE string literals (shell in YAML, key=value) — a syntax tree adds
412
+ * nothing the text does not already carry. */
413
+ "shell-string-in-config" |
414
+ /** The detection is an exact, unambiguous runner-API token (`.only`,
415
+ * `test.skip`, `fit`) — lexical precision equals structural precision. */
416
+ "exact-key-match" |
417
+ /** The defect IS the lexical artifact (commented-out test code, a
418
+ * recorder's default title left committed) — the text is the finding. */
419
+ "lexical-artifact" |
420
+ /** The semantics live in runner behavior (retries, report generation,
421
+ * fixture lifecycle) that no language syntax tree represents. */
422
+ "runner-semantic" |
423
+ /** The defect lives in string content (selector, URL) that the
424
+ * code-text masking deliberately excludes from structural analysis. */
425
+ "string-content-defect" |
426
+ /** Absence detection over a suite/directory — there is no single
427
+ * syntax node; the evidence is the aggregate shape of the tree. */
428
+ "absence-aggregate" |
429
+ /** The variant must stay in lockstep with its family's §13.2 mandatory
430
+ * regex fallback — the family's structural path already carries the
431
+ * depth, and the lexical path is the deterministic degraded mode. */
432
+ "family-fallback-lockstep" |
433
+ /** Migration to AST/QA_MODEL is plausible but UNPROVEN: no measurement
434
+ * yet demonstrates an FP reduction. Deferred to the next measurement
435
+ * round by owner directive (2026-09-09); the lexical detector ships
436
+ * with its measured tier in the meantime. */
437
+ "migration-deferred-next-measurement";
438
+ interface StrategyJustification {
439
+ /** One of the closed codes above — the machine-readable verdict. */
440
+ reasonCode: StrategyReasonCode;
441
+ /**
442
+ * The human-readable derivation: WHY this code applies to THIS rule,
443
+ * citing the detector's actual shape. Rendered by the rule docs and
444
+ * the depth-adjudication doc; vague boilerplate is a review rejection.
445
+ */
446
+ detail: string;
447
+ }
403
448
  interface RuleMeta {
404
449
  /** Frozen public API — never reused (§18.4). */
405
450
  id: string;
@@ -482,6 +527,15 @@ interface RuleMeta {
482
527
  * findings that merely weaken a single test.
483
528
  */
484
529
  suiteInvalidating?: boolean;
530
+ /**
531
+ * Depth-adjudication record (master plan P8, plan 1788853205786 —
532
+ * flag 6, decision 9: "no unexplained depth"). REQUIRED for every
533
+ * rule whose `detectionStrategy` is LEXICAL (enforced by the doctor's
534
+ * registry-sanity check): the reason the lexical form is the honest
535
+ * shipped detector, with a closed reason code and a derivation that
536
+ * cites the detector's actual shape. Non-LEXICAL rules may omit it.
537
+ */
538
+ strategyJustification?: StrategyJustification;
485
539
  }
486
540
  interface SourceFileContext {
487
541
  /** Repo-relative path, forward slashes. */
@@ -826,7 +880,7 @@ declare const runScan: typeof runScan$1, buildUniversalRules: typeof buildUniver
826
880
  * `scripts/sync-sarif-version.cjs` on release and guarded by
827
881
  * `tests/version-consistency.spec.ts` locally.
828
882
  */
829
- declare const CLI_VERSION = "1.0.1";
883
+ declare const CLI_VERSION = "1.0.2";
830
884
  /** A usage-error detail: the offending token, when one exists. */
831
885
  interface UsageErrorDetail {
832
886
  /** The unknown flag or rejected value (e.g. `--nope`, `loud`). */