@dzhechkov/harness-core 0.8.48 → 0.8.49

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/.dz-manifest.json CHANGED
@@ -9,7 +9,7 @@
9
9
  },
10
10
  {
11
11
  "path": "README.md",
12
- "sha256": "faf67370cf01c0c49213407591983100a97e6509b4cdcce4aec0d9ff70d977d1"
12
+ "sha256": "f21bb94bff3cdda978c5309a39f76c280ac699c21fa231490192c6b9dcde1ba6"
13
13
  },
14
14
  {
15
15
  "path": "dist/__tests__/golden-baseline.test.d.ts",
@@ -1917,15 +1917,15 @@
1917
1917
  },
1918
1918
  {
1919
1919
  "path": "dist/publish.d.ts",
1920
- "sha256": "0e3777cdc50daa72fe229e3d50ca8461a41db5ea42969f9561c7487a45a6cd6b"
1920
+ "sha256": "40975c8defdaf041e61135a2bd85b05ff45c95441cc6a6807d1ae6b1e455b6a5"
1921
1921
  },
1922
1922
  {
1923
1923
  "path": "dist/publish.d.ts.map",
1924
- "sha256": "997a853664455c7afec96ed3548067a8f8ab69068e051018a55e8d1823eeb44f"
1924
+ "sha256": "1fd51135dbd973f5958177d1c1e2f44e8c7c5331af8bab3eb87ed83e0d7326f2"
1925
1925
  },
1926
1926
  {
1927
1927
  "path": "dist/publish.js",
1928
- "sha256": "10415ffc127a23ba52aa8d295e10859cd9d2fe72a5103186fc73017a406af496"
1928
+ "sha256": "9d6820cb54a7dc7355901c7c4efe0acbe694fa86c6cd8c2f3d529e35ceba2975"
1929
1929
  },
1930
1930
  {
1931
1931
  "path": "dist/publish.js.map",
@@ -2109,19 +2109,19 @@
2109
2109
  },
2110
2110
  {
2111
2111
  "path": "dist/release-line.d.ts",
2112
- "sha256": "a015a9f318640511606c2f3f8debba215c9c2189877ebf1a18f2ff3b0766d2c2"
2112
+ "sha256": "adab2e7a85dd1e745e2b20bd3574e64025a2d1946dc5124f59ac367f051cd677"
2113
2113
  },
2114
2114
  {
2115
2115
  "path": "dist/release-line.d.ts.map",
2116
- "sha256": "4b2eaa030c836ebb7884e4c6b90e6f8fe317cfe92b463ddb246f71132cdaaff0"
2116
+ "sha256": "a4607f5d06ee27c02f0167f202a4a81c11a61e1773ff2ab4914700575f5087cf"
2117
2117
  },
2118
2118
  {
2119
2119
  "path": "dist/release-line.js",
2120
- "sha256": "94bf10ad7df83b07b65c0ba15ccb75f00ec6310a4f321d3654bd0f7b0a719d3b"
2120
+ "sha256": "f62708bb4eecba718eea02eaa5d78553bf2c8b9ecb93fd0858dff19ca94c1dd0"
2121
2121
  },
2122
2122
  {
2123
2123
  "path": "dist/release-line.js.map",
2124
- "sha256": "0a87ae82e71a5b7448869459891fdc35f2cefe22948e3939721c989b621dbfaf"
2124
+ "sha256": "46215c2e0b6f6ce4762a1682f8db867752309640681470ab227776667e475e87"
2125
2125
  },
2126
2126
  {
2127
2127
  "path": "dist/release-package-audit.d.ts",
@@ -2909,19 +2909,19 @@
2909
2909
  },
2910
2910
  {
2911
2911
  "path": "dist/test-receipt.d.ts",
2912
- "sha256": "6bb2aba8860e19b09a3dc650e2d474a4c719c342de0105c850e3b73e3f0c4cb2"
2912
+ "sha256": "c71f53acd6db19925e99d580dd9e90a082173a7fd0882cb8fce5202bbb63ce6a"
2913
2913
  },
2914
2914
  {
2915
2915
  "path": "dist/test-receipt.d.ts.map",
2916
- "sha256": "563549dc76299043e9626af802e713e5924b922484b17ab48cd3393fef232d08"
2916
+ "sha256": "a4a21c19d297256e4170c43f499df322ae25d633de0d11b19ef3e382accc2e4d"
2917
2917
  },
2918
2918
  {
2919
2919
  "path": "dist/test-receipt.js",
2920
- "sha256": "08b6be3e5e9f57a5772a4d8000fef179927a572c8e65a2b8a00a475bcee91bbe"
2920
+ "sha256": "1d16db0711bfb03c89bf04a1ca87c3f19620554ff56df6bb6c1797814d919b81"
2921
2921
  },
2922
2922
  {
2923
2923
  "path": "dist/test-receipt.js.map",
2924
- "sha256": "a29a1d484ca33e47fb3be756634cc19b84fbeae562da55355eb512fad71c0f88"
2924
+ "sha256": "fafeab618345a308eb1c32643bf6a740e122e281a69c4fa97d1040fcd6ad8396"
2925
2925
  },
2926
2926
  {
2927
2927
  "path": "dist/text-mangling.d.ts",
@@ -3117,7 +3117,7 @@
3117
3117
  },
3118
3118
  {
3119
3119
  "path": "package.json",
3120
- "sha256": "5462248e6ad249291f443700ff06fb7535f485d4f8e4ec1558220d9c83359843"
3120
+ "sha256": "c4f5afb2d6c68fe4fd7ba0cfec67e61ed72f39967fcccee82c16a9c1aac4f88a"
3121
3121
  },
3122
3122
  {
3123
3123
  "path": "src/__tests__/golden-baseline.test.ts",
@@ -3605,7 +3605,7 @@
3605
3605
  },
3606
3606
  {
3607
3607
  "path": "src/publish.ts",
3608
- "sha256": "65662c369cc20c75ff6645bcf834c0336e3c3f6caa875d38d8bf44c0facc06ba"
3608
+ "sha256": "4903437dd0411b2379dff11823124a07001100334b986908c91f19b6671e5308"
3609
3609
  },
3610
3610
  {
3611
3611
  "path": "src/qe-bridge.ts",
@@ -3657,7 +3657,7 @@
3657
3657
  },
3658
3658
  {
3659
3659
  "path": "src/release-line.ts",
3660
- "sha256": "07ee047f3fd9904fd13ddea2e95e0a0ff9a6544a754fbd19f3da6cbfff6ea087"
3660
+ "sha256": "b4fa02f244f59bfc02f69d3b9894e48b080bca5e30ae8dda6d695a09fb45705b"
3661
3661
  },
3662
3662
  {
3663
3663
  "path": "src/release-package-audit.ts",
@@ -3865,7 +3865,7 @@
3865
3865
  },
3866
3866
  {
3867
3867
  "path": "src/test-receipt.ts",
3868
- "sha256": "564306fcbbf6a53216000637f239e98688f6a6cd4150ad5390cd44dda92a5d9e"
3868
+ "sha256": "31b8bc15d0783461fb9d6d0ec9bb6f971f30dc830690410fa1cf0ee09c236222"
3869
3869
  },
3870
3870
  {
3871
3871
  "path": "src/text-mangling.ts",
@@ -3917,5 +3917,5 @@
3917
3917
  }
3918
3918
  ]
3919
3919
  },
3920
- "signature": "uU+G6KY3wfOfO9JdbTZGrB28iPYkK4Drafgjrz+RSU78n7aBOiTJy88UBIY4BdSCeXB3tPcJXT+XypIpDo1lAw=="
3920
+ "signature": "f2em3wSYmL8OLEyKBIuxdUFrB5x0hjGIJQR0If36v1LLkVaZqwA2vRKw3PNiDlivh6NFDCoUVkfjkFrv7kQfDw=="
3921
3921
  }
package/README.md CHANGED
@@ -1,6 +1,25 @@
1
1
  # @dzhechkov/harness-core
2
2
 
3
- Current package version: `0.8.48`. <!-- dz:version -->
3
+ Scoped test receipts now require valid v2 `observed-test-execution-1` evidence. The pure
4
+ `decideTestReceipt` validates every segment, file and sibling scope before accepting matching
5
+ content. Legacy/unsupported/invalid history is `unobserved`; valid changed content is
6
+ `changed`. Historical ledger bytes remain preserved and need a real observed rerun.
7
+
8
+ From this package directory:
9
+
10
+ ```bash
11
+ ../../../scripts/with-test-receipt.sh packages/@dzhechkov/harness-core -- npx vitest run test/test-receipt.test.ts
12
+ ```
13
+
14
+ Exact `npm test` can observe this package's serial then parallel project script; both segments
15
+ must execute passing cases. Package-manager forwarded filters refuse with direct project
16
+ commands. Use `node --test <file>` through the same wrapper for Node tests. Focused execution
17
+ is supported; it does not prove a complete suite, meaningful tests or authenticated evidence.
18
+ See the repository `.githooks/README.md` for bounds, supported commands and reasoned overrides.
19
+
20
+ Current package version: `0.8.49`. <!-- dz:version -->
21
+
22
+ Joint current metadata requires `<!-- dz:version -->` on a dedicated undated core/CLI line. Both README writers preserve unmarked historical joint pairs; the guard and release-line report skip them. Fenced examples cannot become current joint metadata. `parseReleaseLine` remains structural, while selection requires this explicit opt-in. The marker still forces per-package rewriting of every matching version on its line, even inside history; keep it off historical records.
4
23
 
5
24
  Site: https://aicoding.space · Source: https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/harness-core
6
25
 
@@ -2293,9 +2312,9 @@ documented it as an "allowlist" while the code rewrote by default — a cross-mo
2293
2312
  rewrites ONLY when `isAllowlistedRewriteContext` recognises one of six shapes — the lock-step feature
2294
2313
  this sync exists for, and nothing beyond it:
2295
2314
 
2296
- 1. a release-line token — `` `harness-core vX` · `harness-cli vY` `` and any generalised
2297
- `` `<name> vX` `` on the same line, including a trailing `` · `memory vZ` `` segment
2298
- (`release-line.ts`: `isReleaseLineToken` now delegates to `parseReleaseLine`, which uses
2315
+ 1. an explicitly marked current release-line token — `` `harness-core vX` · `harness-cli vY` `` and any generalised
2316
+ `` `<name> vX` `` in its contiguous chain, including a trailing `` · `memory vZ` `` segment
2317
+ (`release-line.ts`: `isReleaseLineToken` selects marked metadata via `findReleaseLine` and `parseReleaseLine`, which uses
2299
2318
  `GENERIC_RELEASE_TOKEN_RE` and preserves the same accepted boundary: the joint pair plus its
2300
2319
  contiguous token chain on one physical line; prose ends the chain).
2301
2320
  2. a current-release FOOTER prefix — `Status:`/`Version:`/`Current release:`/`Current status:`/
package/dist/publish.d.ts CHANGED
@@ -151,7 +151,7 @@ export interface PublishReport {
151
151
  readonly skipped: number;
152
152
  readonly errors: number;
153
153
  readonly dryRun: boolean;
154
- /** Repo-relative README paths whose first joint core/CLI release line was rewritten. */
154
+ /** Repo-relative README paths whose first explicitly marked joint core/CLI release line was rewritten. */
155
155
  readonly releaseLineSynced: readonly string[];
156
156
  readonly releaseLineReport: readonly ReleaseLineReport[];
157
157
  /** Post-publication sync failures are warnings: registry-confirmed packages cannot be unpublished. */
@@ -1 +1 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,KAAK,iCAAiC,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAW7G,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAElE,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,2FAA2F;IAC3F,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,gGAAgG;IAChG,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;IACxD;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACvF;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;KAC1C,GAAG,SAAS,CAAC;IACd;;;;;;;;;OASG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACrD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,gBAAgB,CAAC;IAC5E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrG,QAAQ,CAAC,IAAI,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,0GAA0G;IAC1G,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,iBAAiB,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACzD,sGAAsG;IACtG,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAClD,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CAC9C;AAQD,0CAA0C;AAC1C,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAcjD;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,KAAK,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iCAAiC,KAAK,MAAM,CAAC;AAE3F,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CASpF;AA8CD;;;GAGG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACnD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC1D,gGAAgG;IAChG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC/D,mGAAmG;IACnG,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5D,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAsBtC;AAED,gGAAgG;AAChG,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,WAAsB,GAC3B,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAe/B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQvD;AAYD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AAEnD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAO5E;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,kBAAkB,CAiBjG;AAED,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAGhF;AAED,iGAAiG;AACjG,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACtC,QAAQ,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACpC,IAAI,CAWN;AAED,kGAAkG;AAClG,wBAAgB,oBAAoB,CAClC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAClC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAYT;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAavG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAuD9D;AAiBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAmB3F;AAED,oGAAoG;AACpG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,qGAAqG;AACrG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACjD;kEAC8D;IAC9D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC;;sGAEkG;IAClG,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AA4FD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,qBAAqB,CAoCvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYzG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAG3E;AAiCD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAsBrE;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE;IACJ,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,8FAA8F;IAC9F,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAClE;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;IAC/G;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACjD,+FAA+F;IAC/F,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACtE,kFAAkF;IAClF,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,mFAAmF;IACnF,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;IACjG,iGAAiG;IACjG,KAAK,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrD;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,EAAE;QAChB,8FAA8F;QAC9F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,+FAA+F;QAC/F,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,qBAAqB,EAAE,KAAK,2BAA2B,CAAC;KAC9F,GAAG,SAAS,CAAC;CACV,GACL,aAAa,CA6nBf"}
package/dist/publish.js CHANGED
@@ -464,8 +464,8 @@ function isInstallPinContext(line, tokenStart) {
464
464
  * bare "X" in a sentence) rewrote by default until someone thought to deny it too. An allowlist has
465
465
  * no such gap: an unrecognised shape is history by default, not by enumeration.
466
466
  *
467
- * 1. a release-line token — `` `harness-core vX` · `harness-cli vY` `` and any generalised
468
- * `` `<name> vX` `` on the same line, including a trailing `` · `memory vZ` `` segment
467
+ * 1. an explicitly marked current release-line token — `` `harness-core vX` · `harness-cli vY` `` and any generalised
468
+ * `` `<name> vX` `` in its contiguous chain, including a trailing `` · `memory vZ` `` segment
469
469
  * (release-line.ts `isReleaseLineToken`/`GENERIC_RELEASE_TOKEN_RE`).
470
470
  * 2. a current-release FOOTER prefix (`FOOTER_STAMP_PREFIX_RE`) — position-aware, so only the
471
471
  * token immediately after the label is allowed.
@@ -30,11 +30,6 @@ export declare function shortPackageName(name: string): string;
30
30
  */
31
31
  export declare const GENERIC_RELEASE_TOKEN_RE: RegExp;
32
32
  export declare function parseReleaseLine(line: string): ReleaseLineParse | null;
33
- /**
34
- * Is the OLD-VERSION occurrence at `[start, end)` in `line` sitting inside a `` `<name> vX` ``
35
- * backtick token? A POSITIVE override for `planReadmeVersionSync`'s citation heuristic: a token
36
- * this shape matches is a release-line stamp, never a historical citation, even where it sits next
37
- * to punctuation ("/", "on ") the citation heuristic would otherwise read as a citation cue.
38
- */
33
+ /** A marked current joint chain grants token permission only through its structural boundary. */
39
34
  export declare function isReleaseLineToken(line: string, start: number, end: number): boolean;
40
35
  //# sourceMappingURL=release-line.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"release-line.d.ts","sourceRoot":"","sources":["../src/release-line.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,QAAqE,CAAC;AAElG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAUrE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;AAC5G,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAwB3F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,QAA6D,CAAC;AAEnG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAgBtE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CASpF"}
1
+ {"version":3,"file":"release-line.d.ts","sourceRoot":"","sources":["../src/release-line.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,QAAqE,CAAC;AAElG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAiBrE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;AAC5G,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAwB3F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,QAA6D,CAAC;AAEnG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAgBtE;AAED,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAGpF"}
@@ -1,8 +1,17 @@
1
+ import { maskMarkdown } from './markdown-masker.js';
1
2
  export const RELEASE_LINE_RE = /`harness-core v(\d+\.\d+\.\d+)` · `harness-cli v(\d+\.\d+\.\d+)`/;
2
3
  export function findReleaseLine(text) {
3
4
  const lines = text.split('\n');
5
+ // A closed leading opt-in is metadata, not an HTML example block. Blank only
6
+ // that exact marker before masking, retaining offsets and all enclosing blocks.
7
+ const maskInput = text.replace(/^ {0,3}<!-- dz:version -->/gm, (marker) => ' '.repeat(marker.length));
8
+ const visible = String(maskMarkdown(maskInput, { unclosed: 'hide' })).split('\n');
4
9
  for (let index = 0; index < lines.length; index++) {
5
10
  const line = lines[index];
11
+ // A joint pair is structural history until the author opts this physical line in.
12
+ // Masked examples cannot supply current metadata to the writer, report, or guard.
13
+ if (!line.includes('<!-- dz:version -->') || !RELEASE_LINE_RE.test(visible[index]))
14
+ continue;
6
15
  const parsed = parseReleaseLine(line);
7
16
  if (parsed !== null) {
8
17
  return { index, line, core: parsed.tokens[0].version, cli: parsed.tokens[1].version, ...parsed };
@@ -60,20 +69,9 @@ export function parseReleaseLine(line) {
60
69
  }
61
70
  return { tokens, chainEnd, wrapped: /\s*·\s*$/.test(line.slice(chainEnd)) };
62
71
  }
63
- /**
64
- * Is the OLD-VERSION occurrence at `[start, end)` in `line` sitting inside a `` `<name> vX` ``
65
- * backtick token? A POSITIVE override for `planReadmeVersionSync`'s citation heuristic: a token
66
- * this shape matches is a release-line stamp, never a historical citation, even where it sits next
67
- * to punctuation ("/", "on ") the citation heuristic would otherwise read as a citation cue.
68
- */
72
+ /** A marked current joint chain grants token permission only through its structural boundary. */
69
73
  export function isReleaseLineToken(line, start, end) {
70
- // Codex r2 HIGH (lead): a `` `<name> vX` `` token is a release-line stamp ONLY on a line that carries
71
- // the JOINT release-line shape (`RELEASE_LINE_RE`); an isolated `` `memory v0.8.25` `` in a
72
- // historical sentence is history and must not move.
73
- // Codex r3 HIGH (lead): the permission is the joint pair PLUS the CONTIGUOUS ` · `<name> vX``
74
- // chain that follows it — not the whole line. `` `harness-core vX` · `harness-cli vY` — historically
75
- // `memory vZ` `` moves the first two and keeps the third (prose broke the chain).
76
- const p = parseReleaseLine(line);
74
+ const p = findReleaseLine(line);
77
75
  return p !== null && p.tokens[0].start <= start && end <= p.chainEnd;
78
76
  }
79
77
  //# sourceMappingURL=release-line.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"release-line.js","sourceRoot":"","sources":["../src/release-line.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"release-line.js","sourceRoot":"","sources":["../src/release-line.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@
20
20
  */
21
21
  /** Одна запись журнала квитанций. Пишется ТОЛЬКО наблюдателем, видевшим код возврата 0. */
22
22
  export interface TestReceipt {
23
- readonly v: 1;
23
+ readonly v: 1 | 2;
24
24
  /** Когда прогон закончился, ISO-8601. */
25
25
  readonly ts: string;
26
26
  /** Что именно было запущено — для сообщения об отказе, чтобы читатель мог повторить. */
@@ -37,7 +37,8 @@ export interface TestReceiptScopeState {
37
37
  * `never` — область не встречается ни в одной квитанции: прогона не было вовсе.
38
38
  * `changed` — квитанции есть, но ни одна не покрывает текущее содержимое.
39
39
  */
40
- readonly why: 'never' | 'changed';
40
+ readonly why: 'never' | 'changed' | 'unobserved';
41
+ readonly unobservedReasons?: readonly string[];
41
42
  /** Время самой свежей квитанции, покрывавшей эту область в ЛЮБОМ виде; null при `never`. */
42
43
  readonly lastGreenAt: string | null;
43
44
  }
@@ -51,6 +52,7 @@ export type TestReceiptVerdict = {
51
52
  readonly state: 'not-established';
52
53
  readonly reason: string;
53
54
  };
55
+ export declare function receiptTestPathMatchesScope(scope: string, path: string): boolean;
54
56
  /**
55
57
  * Чистое решение. Ничего не читает и не запускает — отпечатки и журнал подаёт вызывающий.
56
58
  *
@@ -1 +1 @@
1
- {"version":3,"file":"test-receipt.d.ts","sourceRoot":"","sources":["../src/test-receipt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACd,yCAAyC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAED,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,4FAA4F;IAC5F,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,qBAAqB,EAAE,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;CAC3C,GAAG,kBAAkB,CA+BrB;AAED,iGAAiG;AACjG,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAW5E"}
1
+ {"version":3,"file":"test-receipt.d.ts","sourceRoot":"","sources":["../src/test-receipt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAClB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAED,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;IACjD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,4FAA4F;IAC5F,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,qBAAqB,EAAE,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAUnE,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKhF;AAyDD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;CAC3C,GAAG,kBAAkB,CAqCrB;AAED,iGAAiG;AACjG,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAoB5E"}
@@ -18,6 +18,85 @@
18
18
  * · она ничего не говорит о коммитах, которые никогда не пушат;
19
19
  * · зелёный прогон ДРУГОЙ области не покрывает изменённую — это и есть смысл разбиения.
20
20
  */
21
+ const canonicalPath = (path) => typeof path === 'string' &&
22
+ !/^[A-Za-z]:|[\\\x00-\x1f\x7f-\x9f]/.test(path) && path.split('/').every((p) => p !== '' && p !== '.' && p !== '..');
23
+ const canonicalScope = (scope) => ['tests', 'scripts', '.githooks'].includes(scope) ||
24
+ (canonicalPath(scope) && /^packages\/[^/]+(?:\/[^/]+)?$/.test(scope));
25
+ const rootAssociations = {
26
+ scripts: ['tests/test-receipt-script.test.mjs', 'tests/prepush-receipt-gate.test.mjs'],
27
+ '.githooks': ['tests/prepush-receipt-gate.test.mjs', 'tests/prepush-drift-gate.test.mjs'],
28
+ };
29
+ export function receiptTestPathMatchesScope(scope, path) {
30
+ if (!canonicalScope(scope) || !canonicalPath(path))
31
+ return false;
32
+ if (scope === 'tests')
33
+ return path.startsWith('tests/');
34
+ if (rootAssociations[scope])
35
+ return rootAssociations[scope].includes(path);
36
+ return ['src', 'test', 'tests'].some((dir) => path.startsWith(`${scope}/${dir}/`));
37
+ }
38
+ const positive = (n) => Number.isSafeInteger(n) && n > 0;
39
+ const object = (v) => v !== null && typeof v === 'object' &&
40
+ [Object.prototype, null].includes(Object.getPrototypeOf(v)) && Reflect.ownKeys(v).every((k) => typeof k === 'string' && Object.getOwnPropertyDescriptor(v, k)?.enumerable === true);
41
+ const keys = (v, expected) => object(v) &&
42
+ Object.keys(v).length === expected.length && expected.every((k) => Object.hasOwn(v, k));
43
+ const array = (v) => Array.isArray(v) &&
44
+ Reflect.ownKeys(v).length === v.length + 1 && Object.keys(v).length === v.length && Object.keys(v).every((k, i) => k === String(i));
45
+ function observed(receipt) {
46
+ if (!keys(receipt, ['v', 'ts', 'command', 'observationId', 'schema', 'scopes', 'segments', 'evidence']) ||
47
+ receipt.v !== 2 || receipt.schema !== 'observed-test-execution-1' ||
48
+ typeof receipt.ts !== 'string' || !Number.isFinite(Date.parse(receipt.ts)) ||
49
+ new Date(receipt.ts).toISOString() !== receipt.ts || typeof receipt.command !== 'string' || !receipt.command ||
50
+ typeof receipt.observationId !== 'string' || !/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(receipt.observationId) ||
51
+ !object(receipt.scopes) || !object(receipt.evidence))
52
+ return false;
53
+ const scopes = Object.keys(receipt.scopes);
54
+ if (!scopes.length || !keys(receipt.evidence, scopes) || !scopes.every((scope) => canonicalScope(scope) && typeof receipt.scopes[scope] === 'string' && receipt.scopes[scope] !== ''))
55
+ return false;
56
+ if (!array(receipt.segments) || !receipt.segments.length)
57
+ return false;
58
+ const files = [];
59
+ for (const segment of receipt.segments) {
60
+ if (!keys(segment, ['runner', 'complete', 'failed', 'files']) ||
61
+ !['node-test', 'vitest'].includes(segment.runner) || segment.complete !== true || segment.failed !== 0 ||
62
+ !array(segment.files) || !segment.files.length)
63
+ return false;
64
+ const counts = new Map();
65
+ let total = 0;
66
+ for (const file of segment.files) {
67
+ if (!keys(file, ['path', 'executed']) || !canonicalPath(file.path) || !positive(file.executed) || counts.has(file.path))
68
+ return false;
69
+ counts.set(file.path, file.executed);
70
+ total += file.executed;
71
+ if (!Number.isSafeInteger(total))
72
+ return false;
73
+ }
74
+ files.push(counts);
75
+ }
76
+ return scopes.every((scope) => {
77
+ const evidence = receipt.evidence[scope];
78
+ if (!keys(evidence, ['executed', 'segments']) || !positive(evidence.executed) ||
79
+ !array(evidence.segments) || !evidence.segments.length)
80
+ return false;
81
+ const indices = new Set();
82
+ let total = 0;
83
+ for (const contribution of evidence.segments) {
84
+ if (!keys(contribution, ['index', 'paths']) || !Number.isSafeInteger(contribution.index) ||
85
+ contribution.index < 0 || contribution.index >= files.length || indices.has(contribution.index) ||
86
+ !array(contribution.paths) || !contribution.paths.length || new Set(contribution.paths).size !== contribution.paths.length)
87
+ return false;
88
+ indices.add(contribution.index);
89
+ for (const path of contribution.paths) {
90
+ if (!canonicalPath(path) || !receiptTestPathMatchesScope(scope, path) || !files[contribution.index].has(path))
91
+ return false;
92
+ total += files[contribution.index].get(path);
93
+ if (!Number.isSafeInteger(total))
94
+ return false;
95
+ }
96
+ }
97
+ return total === evidence.executed;
98
+ });
99
+ }
21
100
  /**
22
101
  * Чистое решение. Ничего не читает и не запускает — отпечатки и журнал подаёт вызывающий.
23
102
  *
@@ -41,10 +120,15 @@ export function decideTestReceipt(input) {
41
120
  const digest = current[scope];
42
121
  let seenAt = null;
43
122
  let covered = false;
123
+ const unobservedReasons = new Set();
44
124
  for (const receipt of receipts) {
45
125
  const recorded = receipt.scopes[scope];
46
126
  if (typeof recorded !== 'string')
47
127
  continue;
128
+ if (!observed(receipt)) {
129
+ unobservedReasons.add(receipt.v === 1 ? 'legacy' : receipt.v !== 2 ? 'unsupported-version' : 'invalid-v2');
130
+ continue;
131
+ }
48
132
  if (typeof receipt.ts === 'string' && (seenAt === null || receipt.ts > seenAt))
49
133
  seenAt = receipt.ts;
50
134
  if (recorded === digest) {
@@ -53,7 +137,8 @@ export function decideTestReceipt(input) {
53
137
  }
54
138
  }
55
139
  if (!covered)
56
- uncovered.push({ scope, digest, why: seenAt === null ? 'never' : 'changed', lastGreenAt: seenAt });
140
+ uncovered.push({ scope, digest, why: seenAt !== null ? 'changed' : unobservedReasons.size ? 'unobserved' : 'never',
141
+ lastGreenAt: seenAt, ...(seenAt === null && unobservedReasons.size ? { unobservedReasons: [...unobservedReasons].sort() } : {}) });
57
142
  }
58
143
  return uncovered.length === 0 ? { state: 'covered', scopes } : { state: 'stale', uncovered };
59
144
  }
@@ -67,7 +152,16 @@ export function renderTestReceiptVerdict(verdict) {
67
152
  }
68
153
  const lines = verdict.uncovered.map((item) => item.why === 'never'
69
154
  ? ` · ${item.scope}: зелёного прогона не было НИ РАЗУ`
70
- : ` · ${item.scope}: изменилась после последнего зелёного прогона (${item.lastGreenAt})`);
71
- return [`test-receipt: НЕ ПОКРЫТО — ${verdict.uncovered.length} област(и):`, ...lines].join('\n');
155
+ : item.why === 'unobserved' ? ` · ${item.scope}: missing observation — история без подтверждённого исполнения (${item.unobservedReasons?.join(', ')})`
156
+ : ` · ${item.scope}: изменилась после последнего зелёного прогона (${item.lastGreenAt})`);
157
+ const hints = verdict.uncovered.map(({ scope }) => {
158
+ if (scope.startsWith('packages/')) {
159
+ const wrapper = `${'../'.repeat(scope.split('/').length)}scripts/with-test-receipt.sh`;
160
+ return ` rerun from ${scope}: ${wrapper} ${scope} -- npx vitest run <test-file>; for Node tests use ${wrapper} ${scope} -- node --test <test-file>`;
161
+ }
162
+ const file = scope === 'scripts' ? 'tests/test-receipt-script.test.mjs' : 'tests/prepush-receipt-gate.test.mjs';
163
+ return ` rerun from repository root: scripts/with-test-receipt.sh ${scope} -- node --test ${file}`;
164
+ });
165
+ return [`test-receipt: НЕ ПОКРЫТО — ${verdict.uncovered.length} област(и):`, ...lines, ...hints].join('\n');
72
166
  }
73
167
  //# sourceMappingURL=test-receipt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-receipt.js","sourceRoot":"","sources":["../src/test-receipt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-receipt.js","sourceRoot":"","sources":["../src/test-receipt.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/harness-core",
3
- "version": "0.8.48",
3
+ "version": "0.8.49",
4
4
  "description": "Shared harness logic - skill loading, additive apply, and the init/sync/verify/doctor operations.",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/sbom.json CHANGED
@@ -25,7 +25,7 @@
25
25
  "hashes": [
26
26
  {
27
27
  "alg": "SHA-256",
28
- "content": "faf67370cf01c0c49213407591983100a97e6509b4cdcce4aec0d9ff70d977d1"
28
+ "content": "f21bb94bff3cdda978c5309a39f76c280ac699c21fa231490192c6b9dcde1ba6"
29
29
  }
30
30
  ]
31
31
  },
@@ -4795,7 +4795,7 @@
4795
4795
  "hashes": [
4796
4796
  {
4797
4797
  "alg": "SHA-256",
4798
- "content": "0e3777cdc50daa72fe229e3d50ca8461a41db5ea42969f9561c7487a45a6cd6b"
4798
+ "content": "40975c8defdaf041e61135a2bd85b05ff45c95441cc6a6807d1ae6b1e455b6a5"
4799
4799
  }
4800
4800
  ]
4801
4801
  },
@@ -4805,7 +4805,7 @@
4805
4805
  "hashes": [
4806
4806
  {
4807
4807
  "alg": "SHA-256",
4808
- "content": "997a853664455c7afec96ed3548067a8f8ab69068e051018a55e8d1823eeb44f"
4808
+ "content": "1fd51135dbd973f5958177d1c1e2f44e8c7c5331af8bab3eb87ed83e0d7326f2"
4809
4809
  }
4810
4810
  ]
4811
4811
  },
@@ -4815,7 +4815,7 @@
4815
4815
  "hashes": [
4816
4816
  {
4817
4817
  "alg": "SHA-256",
4818
- "content": "10415ffc127a23ba52aa8d295e10859cd9d2fe72a5103186fc73017a406af496"
4818
+ "content": "9d6820cb54a7dc7355901c7c4efe0acbe694fa86c6cd8c2f3d529e35ceba2975"
4819
4819
  }
4820
4820
  ]
4821
4821
  },
@@ -5275,7 +5275,7 @@
5275
5275
  "hashes": [
5276
5276
  {
5277
5277
  "alg": "SHA-256",
5278
- "content": "a015a9f318640511606c2f3f8debba215c9c2189877ebf1a18f2ff3b0766d2c2"
5278
+ "content": "adab2e7a85dd1e745e2b20bd3574e64025a2d1946dc5124f59ac367f051cd677"
5279
5279
  }
5280
5280
  ]
5281
5281
  },
@@ -5285,7 +5285,7 @@
5285
5285
  "hashes": [
5286
5286
  {
5287
5287
  "alg": "SHA-256",
5288
- "content": "4b2eaa030c836ebb7884e4c6b90e6f8fe317cfe92b463ddb246f71132cdaaff0"
5288
+ "content": "a4607f5d06ee27c02f0167f202a4a81c11a61e1773ff2ab4914700575f5087cf"
5289
5289
  }
5290
5290
  ]
5291
5291
  },
@@ -5295,7 +5295,7 @@
5295
5295
  "hashes": [
5296
5296
  {
5297
5297
  "alg": "SHA-256",
5298
- "content": "94bf10ad7df83b07b65c0ba15ccb75f00ec6310a4f321d3654bd0f7b0a719d3b"
5298
+ "content": "f62708bb4eecba718eea02eaa5d78553bf2c8b9ecb93fd0858dff19ca94c1dd0"
5299
5299
  }
5300
5300
  ]
5301
5301
  },
@@ -5305,7 +5305,7 @@
5305
5305
  "hashes": [
5306
5306
  {
5307
5307
  "alg": "SHA-256",
5308
- "content": "0a87ae82e71a5b7448869459891fdc35f2cefe22948e3939721c989b621dbfaf"
5308
+ "content": "46215c2e0b6f6ce4762a1682f8db867752309640681470ab227776667e475e87"
5309
5309
  }
5310
5310
  ]
5311
5311
  },
@@ -7275,7 +7275,7 @@
7275
7275
  "hashes": [
7276
7276
  {
7277
7277
  "alg": "SHA-256",
7278
- "content": "6bb2aba8860e19b09a3dc650e2d474a4c719c342de0105c850e3b73e3f0c4cb2"
7278
+ "content": "c71f53acd6db19925e99d580dd9e90a082173a7fd0882cb8fce5202bbb63ce6a"
7279
7279
  }
7280
7280
  ]
7281
7281
  },
@@ -7285,7 +7285,7 @@
7285
7285
  "hashes": [
7286
7286
  {
7287
7287
  "alg": "SHA-256",
7288
- "content": "563549dc76299043e9626af802e713e5924b922484b17ab48cd3393fef232d08"
7288
+ "content": "a4a21c19d297256e4170c43f499df322ae25d633de0d11b19ef3e382accc2e4d"
7289
7289
  }
7290
7290
  ]
7291
7291
  },
@@ -7295,7 +7295,7 @@
7295
7295
  "hashes": [
7296
7296
  {
7297
7297
  "alg": "SHA-256",
7298
- "content": "08b6be3e5e9f57a5772a4d8000fef179927a572c8e65a2b8a00a475bcee91bbe"
7298
+ "content": "1d16db0711bfb03c89bf04a1ca87c3f19620554ff56df6bb6c1797814d919b81"
7299
7299
  }
7300
7300
  ]
7301
7301
  },
@@ -7305,7 +7305,7 @@
7305
7305
  "hashes": [
7306
7306
  {
7307
7307
  "alg": "SHA-256",
7308
- "content": "a29a1d484ca33e47fb3be756634cc19b84fbeae562da55355eb512fad71c0f88"
7308
+ "content": "fafeab618345a308eb1c32643bf6a740e122e281a69c4fa97d1040fcd6ad8396"
7309
7309
  }
7310
7310
  ]
7311
7311
  },
@@ -7799,7 +7799,7 @@
7799
7799
  },
7800
7800
  {
7801
7801
  "name": "dz:canonical-json-sha256-v2",
7802
- "value": "5462248e6ad249291f443700ff06fb7535f485d4f8e4ec1558220d9c83359843"
7802
+ "value": "c4f5afb2d6c68fe4fd7ba0cfec67e61ed72f39967fcccee82c16a9c1aac4f88a"
7803
7803
  }
7804
7804
  ]
7805
7805
  },
@@ -9019,7 +9019,7 @@
9019
9019
  "hashes": [
9020
9020
  {
9021
9021
  "alg": "SHA-256",
9022
- "content": "65662c369cc20c75ff6645bcf834c0336e3c3f6caa875d38d8bf44c0facc06ba"
9022
+ "content": "4903437dd0411b2379dff11823124a07001100334b986908c91f19b6671e5308"
9023
9023
  }
9024
9024
  ]
9025
9025
  },
@@ -9149,7 +9149,7 @@
9149
9149
  "hashes": [
9150
9150
  {
9151
9151
  "alg": "SHA-256",
9152
- "content": "07ee047f3fd9904fd13ddea2e95e0a0ff9a6544a754fbd19f3da6cbfff6ea087"
9152
+ "content": "b4fa02f244f59bfc02f69d3b9894e48b080bca5e30ae8dda6d695a09fb45705b"
9153
9153
  }
9154
9154
  ]
9155
9155
  },
@@ -9669,7 +9669,7 @@
9669
9669
  "hashes": [
9670
9670
  {
9671
9671
  "alg": "SHA-256",
9672
- "content": "564306fcbbf6a53216000637f239e98688f6a6cd4150ad5390cd44dda92a5d9e"
9672
+ "content": "31b8bc15d0783461fb9d6d0ec9bb6f971f30dc830690410fa1cf0ee09c236222"
9673
9673
  }
9674
9674
  ]
9675
9675
  },
package/src/publish.ts CHANGED
@@ -161,7 +161,7 @@ export interface PublishReport {
161
161
  readonly skipped: number;
162
162
  readonly errors: number;
163
163
  readonly dryRun: boolean;
164
- /** Repo-relative README paths whose first joint core/CLI release line was rewritten. */
164
+ /** Repo-relative README paths whose first explicitly marked joint core/CLI release line was rewritten. */
165
165
  readonly releaseLineSynced: readonly string[];
166
166
  readonly releaseLineReport: readonly ReleaseLineReport[];
167
167
  /** Post-publication sync failures are warnings: registry-confirmed packages cannot be unpublished. */
@@ -677,8 +677,8 @@ function isInstallPinContext(line: string, tokenStart: number): boolean {
677
677
  * bare "X" in a sentence) rewrote by default until someone thought to deny it too. An allowlist has
678
678
  * no such gap: an unrecognised shape is history by default, not by enumeration.
679
679
  *
680
- * 1. a release-line token — `` `harness-core vX` · `harness-cli vY` `` and any generalised
681
- * `` `<name> vX` `` on the same line, including a trailing `` · `memory vZ` `` segment
680
+ * 1. an explicitly marked current release-line token — `` `harness-core vX` · `harness-cli vY` `` and any generalised
681
+ * `` `<name> vX` `` in its contiguous chain, including a trailing `` · `memory vZ` `` segment
682
682
  * (release-line.ts `isReleaseLineToken`/`GENERIC_RELEASE_TOKEN_RE`).
683
683
  * 2. a current-release FOOTER prefix (`FOOTER_STAMP_PREFIX_RE`) — position-aware, so only the
684
684
  * token immediately after the label is allowed.
@@ -1,3 +1,5 @@
1
+ import { maskMarkdown } from './markdown-masker.js';
2
+
1
3
  export const RELEASE_LINE_RE = /`harness-core v(\d+\.\d+\.\d+)` · `harness-cli v(\d+\.\d+\.\d+)`/;
2
4
 
3
5
  export interface ReleaseLineToken {
@@ -22,8 +24,15 @@ export interface ReleaseLineMatch extends ReleaseLineParse {
22
24
 
23
25
  export function findReleaseLine(text: string): ReleaseLineMatch | null {
24
26
  const lines = text.split('\n');
27
+ // A closed leading opt-in is metadata, not an HTML example block. Blank only
28
+ // that exact marker before masking, retaining offsets and all enclosing blocks.
29
+ const maskInput = text.replace(/^ {0,3}<!-- dz:version -->/gm, (marker) => ' '.repeat(marker.length));
30
+ const visible = String(maskMarkdown(maskInput, { unclosed: 'hide' })).split('\n');
25
31
  for (let index = 0; index < lines.length; index++) {
26
32
  const line = lines[index]!;
33
+ // A joint pair is structural history until the author opts this physical line in.
34
+ // Masked examples cannot supply current metadata to the writer, report, or guard.
35
+ if (!line.includes('<!-- dz:version -->') || !RELEASE_LINE_RE.test(visible[index]!)) continue;
27
36
  const parsed = parseReleaseLine(line);
28
37
  if (parsed !== null) {
29
38
  return { index, line, core: parsed.tokens[0]!.version, cli: parsed.tokens[1]!.version, ...parsed };
@@ -89,19 +98,8 @@ export function parseReleaseLine(line: string): ReleaseLineParse | null {
89
98
  return { tokens, chainEnd, wrapped: /\s*·\s*$/.test(line.slice(chainEnd)) };
90
99
  }
91
100
 
92
- /**
93
- * Is the OLD-VERSION occurrence at `[start, end)` in `line` sitting inside a `` `<name> vX` ``
94
- * backtick token? A POSITIVE override for `planReadmeVersionSync`'s citation heuristic: a token
95
- * this shape matches is a release-line stamp, never a historical citation, even where it sits next
96
- * to punctuation ("/", "on ") the citation heuristic would otherwise read as a citation cue.
97
- */
101
+ /** A marked current joint chain grants token permission only through its structural boundary. */
98
102
  export function isReleaseLineToken(line: string, start: number, end: number): boolean {
99
- // Codex r2 HIGH (lead): a `` `<name> vX` `` token is a release-line stamp ONLY on a line that carries
100
- // the JOINT release-line shape (`RELEASE_LINE_RE`); an isolated `` `memory v0.8.25` `` in a
101
- // historical sentence is history and must not move.
102
- // Codex r3 HIGH (lead): the permission is the joint pair PLUS the CONTIGUOUS ` · `<name> vX``
103
- // chain that follows it — not the whole line. `` `harness-core vX` · `harness-cli vY` — historically
104
- // `memory vZ` `` moves the first two and keeps the third (prose broke the chain).
105
- const p = parseReleaseLine(line);
103
+ const p = findReleaseLine(line);
106
104
  return p !== null && p.tokens[0]!.start <= start && end <= p.chainEnd;
107
105
  }
@@ -21,7 +21,7 @@
21
21
 
22
22
  /** Одна запись журнала квитанций. Пишется ТОЛЬКО наблюдателем, видевшим код возврата 0. */
23
23
  export interface TestReceipt {
24
- readonly v: 1;
24
+ readonly v: 1 | 2;
25
25
  /** Когда прогон закончился, ISO-8601. */
26
26
  readonly ts: string;
27
27
  /** Что именно было запущено — для сообщения об отказе, чтобы читатель мог повторить. */
@@ -39,7 +39,8 @@ export interface TestReceiptScopeState {
39
39
  * `never` — область не встречается ни в одной квитанции: прогона не было вовсе.
40
40
  * `changed` — квитанции есть, но ни одна не покрывает текущее содержимое.
41
41
  */
42
- readonly why: 'never' | 'changed';
42
+ readonly why: 'never' | 'changed' | 'unobserved';
43
+ readonly unobservedReasons?: readonly string[];
43
44
  /** Время самой свежей квитанции, покрывавшей эту область в ЛЮБОМ виде; null при `never`. */
44
45
  readonly lastGreenAt: string | null;
45
46
  }
@@ -49,6 +50,76 @@ export type TestReceiptVerdict =
49
50
  | { readonly state: 'stale'; readonly uncovered: readonly TestReceiptScopeState[] }
50
51
  | { readonly state: 'not-established'; readonly reason: string };
51
52
 
53
+ const canonicalPath = (path: unknown): path is string => typeof path === 'string' &&
54
+ !/^[A-Za-z]:|[\\\x00-\x1f\x7f-\x9f]/.test(path) && path.split('/').every((p) => p !== '' && p !== '.' && p !== '..');
55
+ const canonicalScope = (scope: string) => ['tests', 'scripts', '.githooks'].includes(scope) ||
56
+ (canonicalPath(scope) && /^packages\/[^/]+(?:\/[^/]+)?$/.test(scope));
57
+ const rootAssociations: Readonly<Record<string, readonly string[]>> = {
58
+ scripts: ['tests/test-receipt-script.test.mjs', 'tests/prepush-receipt-gate.test.mjs'],
59
+ '.githooks': ['tests/prepush-receipt-gate.test.mjs', 'tests/prepush-drift-gate.test.mjs'],
60
+ };
61
+ export function receiptTestPathMatchesScope(scope: string, path: string): boolean {
62
+ if (!canonicalScope(scope) || !canonicalPath(path)) return false;
63
+ if (scope === 'tests') return path.startsWith('tests/');
64
+ if (rootAssociations[scope]) return rootAssociations[scope]!.includes(path);
65
+ return ['src', 'test', 'tests'].some((dir) => path.startsWith(`${scope}/${dir}/`));
66
+ }
67
+
68
+ const positive = (n: unknown): n is number => Number.isSafeInteger(n) && (n as number) > 0;
69
+ const object = (v: any): boolean => v !== null && typeof v === 'object' &&
70
+ [Object.prototype, null].includes(Object.getPrototypeOf(v)) && Reflect.ownKeys(v).every((k) =>
71
+ typeof k === 'string' && Object.getOwnPropertyDescriptor(v, k)?.enumerable === true);
72
+ const keys = (v: any, expected: string[]): boolean => object(v) &&
73
+ Object.keys(v).length === expected.length && expected.every((k) => Object.hasOwn(v, k));
74
+ const array = (v: any): v is any[] => Array.isArray(v) &&
75
+ Reflect.ownKeys(v).length === v.length + 1 && Object.keys(v).length === v.length && Object.keys(v).every((k, i) => k === String(i));
76
+ function observed(receipt: any): boolean {
77
+ if (!keys(receipt, ['v', 'ts', 'command', 'observationId', 'schema', 'scopes', 'segments', 'evidence']) ||
78
+ receipt.v !== 2 || receipt.schema !== 'observed-test-execution-1' ||
79
+ typeof receipt.ts !== 'string' || !Number.isFinite(Date.parse(receipt.ts)) ||
80
+ new Date(receipt.ts).toISOString() !== receipt.ts || typeof receipt.command !== 'string' || !receipt.command ||
81
+ typeof receipt.observationId !== 'string' || !/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(receipt.observationId) ||
82
+ !object(receipt.scopes) || !object(receipt.evidence)) return false;
83
+ const scopes = Object.keys(receipt.scopes);
84
+ if (!scopes.length || !keys(receipt.evidence, scopes) || !scopes.every((scope) =>
85
+ canonicalScope(scope) && typeof receipt.scopes[scope] === 'string' && receipt.scopes[scope] !== '')) return false;
86
+ if (!array(receipt.segments) || !receipt.segments.length) return false;
87
+ const files: Map<string, number>[] = [];
88
+ for (const segment of receipt.segments) {
89
+ if (!keys(segment, ['runner', 'complete', 'failed', 'files']) ||
90
+ !['node-test', 'vitest'].includes(segment.runner) || segment.complete !== true || segment.failed !== 0 ||
91
+ !array(segment.files) || !segment.files.length) return false;
92
+ const counts = new Map<string, number>();
93
+ let total = 0;
94
+ for (const file of segment.files) {
95
+ if (!keys(file, ['path', 'executed']) || !canonicalPath(file.path) || !positive(file.executed) || counts.has(file.path)) return false;
96
+ counts.set(file.path, file.executed);
97
+ total += file.executed;
98
+ if (!Number.isSafeInteger(total)) return false;
99
+ }
100
+ files.push(counts);
101
+ }
102
+ return scopes.every((scope) => {
103
+ const evidence = receipt.evidence[scope];
104
+ if (!keys(evidence, ['executed', 'segments']) || !positive(evidence.executed) ||
105
+ !array(evidence.segments) || !evidence.segments.length) return false;
106
+ const indices = new Set<number>();
107
+ let total = 0;
108
+ for (const contribution of evidence.segments) {
109
+ if (!keys(contribution, ['index', 'paths']) || !Number.isSafeInteger(contribution.index) ||
110
+ contribution.index < 0 || contribution.index >= files.length || indices.has(contribution.index) ||
111
+ !array(contribution.paths) || !contribution.paths.length || new Set(contribution.paths).size !== contribution.paths.length) return false;
112
+ indices.add(contribution.index);
113
+ for (const path of contribution.paths) {
114
+ if (!canonicalPath(path) || !receiptTestPathMatchesScope(scope, path) || !files[contribution.index]!.has(path)) return false;
115
+ total += files[contribution.index]!.get(path)!;
116
+ if (!Number.isSafeInteger(total)) return false;
117
+ }
118
+ }
119
+ return total === evidence.executed;
120
+ });
121
+ }
122
+
52
123
  /**
53
124
  * Чистое решение. Ничего не читает и не запускает — отпечатки и журнал подаёт вызывающий.
54
125
  *
@@ -79,13 +150,19 @@ export function decideTestReceipt(input: {
79
150
  const digest = current[scope]!;
80
151
  let seenAt: string | null = null;
81
152
  let covered = false;
153
+ const unobservedReasons = new Set<string>();
82
154
  for (const receipt of receipts) {
83
155
  const recorded = receipt.scopes[scope];
84
156
  if (typeof recorded !== 'string') continue;
157
+ if (!observed(receipt)) {
158
+ unobservedReasons.add(receipt.v === 1 ? 'legacy' : receipt.v !== 2 ? 'unsupported-version' : 'invalid-v2');
159
+ continue;
160
+ }
85
161
  if (typeof receipt.ts === 'string' && (seenAt === null || receipt.ts > seenAt)) seenAt = receipt.ts;
86
162
  if (recorded === digest) { covered = true; break; }
87
163
  }
88
- if (!covered) uncovered.push({ scope, digest, why: seenAt === null ? 'never' : 'changed', lastGreenAt: seenAt });
164
+ if (!covered) uncovered.push({ scope, digest, why: seenAt !== null ? 'changed' : unobservedReasons.size ? 'unobserved' : 'never',
165
+ lastGreenAt: seenAt, ...(seenAt === null && unobservedReasons.size ? { unobservedReasons: [...unobservedReasons].sort() } : {}) });
89
166
  }
90
167
 
91
168
  return uncovered.length === 0 ? { state: 'covered', scopes } : { state: 'stale', uncovered };
@@ -101,6 +178,15 @@ export function renderTestReceiptVerdict(verdict: TestReceiptVerdict): string {
101
178
  }
102
179
  const lines = verdict.uncovered.map((item) => item.why === 'never'
103
180
  ? ` · ${item.scope}: зелёного прогона не было НИ РАЗУ`
181
+ : item.why === 'unobserved' ? ` · ${item.scope}: missing observation — история без подтверждённого исполнения (${item.unobservedReasons?.join(', ')})`
104
182
  : ` · ${item.scope}: изменилась после последнего зелёного прогона (${item.lastGreenAt})`);
105
- return [`test-receipt: НЕ ПОКРЫТО — ${verdict.uncovered.length} област(и):`, ...lines].join('\n');
183
+ const hints = verdict.uncovered.map(({ scope }) => {
184
+ if (scope.startsWith('packages/')) {
185
+ const wrapper = `${'../'.repeat(scope.split('/').length)}scripts/with-test-receipt.sh`;
186
+ return ` rerun from ${scope}: ${wrapper} ${scope} -- npx vitest run <test-file>; for Node tests use ${wrapper} ${scope} -- node --test <test-file>`;
187
+ }
188
+ const file = scope === 'scripts' ? 'tests/test-receipt-script.test.mjs' : 'tests/prepush-receipt-gate.test.mjs';
189
+ return ` rerun from repository root: scripts/with-test-receipt.sh ${scope} -- node --test ${file}`;
190
+ });
191
+ return [`test-receipt: НЕ ПОКРЫТО — ${verdict.uncovered.length} област(и):`, ...lines, ...hints].join('\n');
106
192
  }