@riddledc/riddle-proof 0.8.70 → 0.8.71

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.
@@ -0,0 +1,19 @@
1
+ # Riddle Proof Neutral Fixture Site
2
+
3
+ This static fixture is a non-Riddle target for Riddle Proof experience-matrix
4
+ runs. It exists so contract and browser checks can exercise a deterministic
5
+ page without using the Riddle Proof docs as both subject and verifier.
6
+
7
+ Typical local use:
8
+
9
+ ```sh
10
+ python3 -m http.server 4179 --directory packages/riddle-proof/examples/neutral-fixture-site
11
+ packages/riddle-proof-runner-playwright/bin/riddle-proof-playwright run-profile \
12
+ --profile packages/riddle-proof/examples/profiles/neutral-fixture-pass.json \
13
+ --url http://127.0.0.1:4179 \
14
+ --output artifacts/riddle-proof/neutral-fixture-pass-local
15
+ ```
16
+
17
+ The sibling `neutral-fixture-product-regression.json` profile intentionally
18
+ looks for a missing selector. A correct Riddle Proof run reports
19
+ `product_regression`, not `passed`.
@@ -0,0 +1,23 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Riddle Proof Neutral Fixture</title>
7
+ <link rel="stylesheet" href="./styles.css" />
8
+ </head>
9
+ <body>
10
+ <main class="fixture-shell" data-rp-fixture="index">
11
+ <p class="eyebrow">Neutral fixture</p>
12
+ <h1>Riddle Proof Fixture Matrix</h1>
13
+ <p>
14
+ This static target is intentionally small and brand-neutral. It gives
15
+ local and hosted runners a deterministic page to prove without relying
16
+ on Riddle Proof docs as the target.
17
+ </p>
18
+ <nav aria-label="Fixture pages">
19
+ <a href="./pass.html">Passing fixture page</a>
20
+ </nav>
21
+ </main>
22
+ </body>
23
+ </html>
@@ -0,0 +1,35 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Neutral Fixture Pass</title>
7
+ <link rel="stylesheet" href="./styles.css" />
8
+ </head>
9
+ <body>
10
+ <main class="fixture-shell" data-rp-fixture="pass">
11
+ <p class="eyebrow">Experience matrix row</p>
12
+ <h1>Neutral fixture passed</h1>
13
+ <p class="lead">
14
+ This page is stable on purpose: the expected text, selector, route, and
15
+ viewport layout should pass in both local and hosted browser runners.
16
+ </p>
17
+ <section class="evidence-panel" aria-label="Evidence facts">
18
+ <dl>
19
+ <div>
20
+ <dt>Contract</dt>
21
+ <dd>Browser-visible evidence</dd>
22
+ </div>
23
+ <div>
24
+ <dt>Status</dt>
25
+ <dd data-rp-fixture-status="passed">passed</dd>
26
+ </div>
27
+ <div>
28
+ <dt>Fixture</dt>
29
+ <dd>neutral-fixture-pass</dd>
30
+ </div>
31
+ </dl>
32
+ </section>
33
+ </main>
34
+ </body>
35
+ </html>
@@ -0,0 +1,110 @@
1
+ :root {
2
+ color-scheme: light;
3
+ font-family:
4
+ Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
5
+ sans-serif;
6
+ line-height: 1.5;
7
+ color: #172033;
8
+ background: #f6f8fb;
9
+ }
10
+
11
+ * {
12
+ box-sizing: border-box;
13
+ }
14
+
15
+ body {
16
+ margin: 0;
17
+ min-width: 0;
18
+ }
19
+
20
+ a {
21
+ color: #165d73;
22
+ font-weight: 700;
23
+ }
24
+
25
+ .fixture-shell {
26
+ width: min(100% - 32px, 760px);
27
+ margin: 0 auto;
28
+ padding: clamp(32px, 8vw, 80px) 0;
29
+ }
30
+
31
+ .eyebrow {
32
+ margin: 0 0 10px;
33
+ color: #5a6475;
34
+ font-size: 0.82rem;
35
+ font-weight: 800;
36
+ letter-spacing: 0;
37
+ text-transform: uppercase;
38
+ }
39
+
40
+ h1 {
41
+ margin: 0;
42
+ max-width: 12ch;
43
+ font-size: 3rem;
44
+ line-height: 1.05;
45
+ letter-spacing: 0;
46
+ }
47
+
48
+ p {
49
+ max-width: 64ch;
50
+ }
51
+
52
+ .lead {
53
+ margin-top: 18px;
54
+ font-size: 1.08rem;
55
+ }
56
+
57
+ .evidence-panel {
58
+ margin-top: 28px;
59
+ border: 1px solid #c9d5df;
60
+ border-radius: 8px;
61
+ background: #fff;
62
+ }
63
+
64
+ dl {
65
+ display: grid;
66
+ grid-template-columns: repeat(3, minmax(0, 1fr));
67
+ margin: 0;
68
+ }
69
+
70
+ dl > div {
71
+ min-width: 0;
72
+ padding: 18px;
73
+ border-right: 1px solid #dce5ec;
74
+ }
75
+
76
+ dl > div:last-child {
77
+ border-right: 0;
78
+ }
79
+
80
+ dt {
81
+ color: #687386;
82
+ font-size: 0.78rem;
83
+ font-weight: 800;
84
+ text-transform: uppercase;
85
+ }
86
+
87
+ dd {
88
+ margin: 4px 0 0;
89
+ overflow-wrap: anywhere;
90
+ font-weight: 700;
91
+ }
92
+
93
+ @media (max-width: 640px) {
94
+ h1 {
95
+ font-size: 2.25rem;
96
+ }
97
+
98
+ dl {
99
+ grid-template-columns: 1fr;
100
+ }
101
+
102
+ dl > div {
103
+ border-right: 0;
104
+ border-bottom: 1px solid #dce5ec;
105
+ }
106
+
107
+ dl > div:last-child {
108
+ border-bottom: 0;
109
+ }
110
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "version": "riddle-proof.profile.v1",
3
+ "name": "neutral-fixture-pass",
4
+ "target": {
5
+ "route": "/pass.html",
6
+ "viewports": [
7
+ { "name": "phone", "width": 390, "height": 844 },
8
+ { "name": "desktop", "width": 1440, "height": 1000 }
9
+ ],
10
+ "auth": "none",
11
+ "wait_for_selector": "[data-rp-fixture=\"pass\"]",
12
+ "setup_actions": [
13
+ { "type": "wait", "ms": 100 }
14
+ ]
15
+ },
16
+ "checks": [
17
+ { "type": "route_loaded", "expected_path": "/pass.html" },
18
+ { "type": "selector_visible", "selector": "[data-rp-fixture=\"pass\"]" },
19
+ { "type": "selector_text_visible", "selector": "[data-rp-fixture=\"pass\"]", "text": "Neutral fixture passed" },
20
+ { "type": "selector_text_absent", "selector": "[data-rp-fixture=\"pass\"]", "text": "Product-specific Riddle docs" },
21
+ { "type": "no_mobile_horizontal_overflow" },
22
+ { "type": "no_fatal_console_errors" }
23
+ ],
24
+ "artifacts": ["screenshot", "console", "dom_summary", "proof_json"],
25
+ "failure_policy": {
26
+ "environment_blocked": "neutral",
27
+ "proof_insufficient": "fail",
28
+ "product_regression": "fail"
29
+ }
30
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "version": "riddle-proof.profile.v1",
3
+ "name": "neutral-fixture-product-regression",
4
+ "target": {
5
+ "route": "/pass.html",
6
+ "viewports": [
7
+ { "name": "desktop", "width": 1440, "height": 1000 }
8
+ ],
9
+ "auth": "none",
10
+ "wait_for_selector": "[data-rp-fixture=\"pass\"]",
11
+ "setup_actions": [
12
+ { "type": "wait", "ms": 100 }
13
+ ]
14
+ },
15
+ "checks": [
16
+ { "type": "route_loaded", "expected_path": "/pass.html" },
17
+ { "type": "selector_visible", "selector": "[data-rp-fixture=\"pass\"]" },
18
+ { "type": "selector_visible", "selector": "[data-rp-fixture=\"missing-required-control\"]" },
19
+ { "type": "no_fatal_console_errors" }
20
+ ],
21
+ "artifacts": ["screenshot", "console", "dom_summary", "proof_json"],
22
+ "failure_policy": {
23
+ "environment_blocked": "neutral",
24
+ "proof_insufficient": "fail",
25
+ "product_regression": "fail"
26
+ }
27
+ }
@@ -9,6 +9,11 @@ in a spreadsheet editor when you want the "status bar" view: surface, user story
9
9
  expected behavior, runner, required evidence, last result, finding, next action,
10
10
  and priority.
11
11
 
12
+ `riddle-proof-neutral-public-state-fixtures.json` contains deterministic
13
+ non-docs packets for public-state, hosted proof view, and agent-summary
14
+ semantics. Pair it with `../neutral-fixture-site/` when you want a browser target
15
+ that is not explaining Riddle Proof while being tested by Riddle Proof.
16
+
12
17
  Each story names:
13
18
 
14
19
  - the Riddle Proof surface under test
@@ -258,6 +258,101 @@
258
258
  "existing_coverage": ["formal/riddle-proof-kernel", "formal-conformance.test.js"],
259
259
  "status": "recurring"
260
260
  },
261
+ {
262
+ "id": "rp-story-neutral-fixture-local-pass",
263
+ "batch": "neutral-fixture",
264
+ "surface": "neutral fixture browser profile",
265
+ "user_story": "As a Riddle Proof maintainer, I can run a non-Riddle static page through the local Playwright profile runner and receive the normal evidence packet.",
266
+ "expected_behavior": "The neutral pass profile returns passed, writes profile-result.json, proof.json, console.json, dom-summary.json, artifact-manifest.json, and screenshots.",
267
+ "primary_runner": "local-playwright",
268
+ "command": "python3 -m http.server 4179 --directory packages/riddle-proof/examples/neutral-fixture-site && packages/riddle-proof-runner-playwright/bin/riddle-proof-playwright run-profile --profile packages/riddle-proof/examples/profiles/neutral-fixture-pass.json --url http://127.0.0.1:4179 --output artifacts/riddle-proof/neutral-fixture-pass-local",
269
+ "expected_verdict": "passed",
270
+ "evidence_required": [
271
+ "profile-result.json status is passed",
272
+ "artifact-manifest.json records local artifacts",
273
+ "phone and desktop screenshots are written"
274
+ ],
275
+ "receipt_types": ["profile-result.json", "proof.json", "console.json", "dom-summary.json", "screenshot"],
276
+ "failure_classes": ["product_regression", "proof_insufficient", "configuration_error"],
277
+ "existing_coverage": ["examples/neutral-fixture-site", "examples/profiles/neutral-fixture-pass.json"],
278
+ "status": "recurring"
279
+ },
280
+ {
281
+ "id": "rp-story-neutral-fixture-negative-control",
282
+ "batch": "neutral-fixture",
283
+ "surface": "neutral fixture browser profile",
284
+ "user_story": "As a Riddle Proof maintainer, I can run a non-Riddle negative-control page profile and see product_regression instead of a false pass.",
285
+ "expected_behavior": "The neutral negative-control profile reaches the page, then fails only the deliberate missing selector and returns product_regression with evidence.",
286
+ "primary_runner": "local-playwright",
287
+ "command": "python3 -m http.server 4179 --directory packages/riddle-proof/examples/neutral-fixture-site && packages/riddle-proof-runner-playwright/bin/riddle-proof-playwright run-profile --profile packages/riddle-proof/examples/profiles/neutral-fixture-product-regression.json --url http://127.0.0.1:4179 --output artifacts/riddle-proof/neutral-fixture-product-regression-local",
288
+ "expected_verdict": "product_regression",
289
+ "evidence_required": [
290
+ "profile-result.json status is product_regression",
291
+ "failed check names [data-rp-fixture=\"missing-required-control\"]",
292
+ "proof artifacts are still written for review"
293
+ ],
294
+ "receipt_types": ["profile-result.json", "proof.json", "summary.md", "screenshot"],
295
+ "failure_classes": ["contract_gap", "proof_insufficient", "configuration_error"],
296
+ "existing_coverage": ["examples/neutral-fixture-site", "examples/profiles/neutral-fixture-product-regression.json"],
297
+ "status": "recurring"
298
+ },
299
+ {
300
+ "id": "rp-story-neutral-fixture-hosted-pass",
301
+ "batch": "neutral-fixture",
302
+ "surface": "neutral fixture hosted profile",
303
+ "user_story": "As a hosted Riddle Proof user, I can run a non-Riddle static preview through hosted Riddle and receive a passed evidence packet.",
304
+ "expected_behavior": "The hosted neutral pass profile returns passed, includes the hosted job id, and lists proof JSON, console, DOM summary, and screenshots.",
305
+ "primary_runner": "hosted-riddle",
306
+ "command": "riddle-proof-loop riddle-preview-deploy packages/riddle-proof/examples/neutral-fixture-site neutral-fixture-matrix --framework static && riddle-proof-loop run-profile --profile packages/riddle-proof/examples/profiles/neutral-fixture-pass.json --url <preview-url> --runner riddle --output artifacts/riddle-proof/neutral-fixture-pass-hosted --result-format compact-json",
307
+ "expected_verdict": "passed",
308
+ "evidence_required": [
309
+ "profile-result.json status is passed",
310
+ "riddle.job_id is present",
311
+ "hosted screenshot and JSON artifact URLs are listed"
312
+ ],
313
+ "receipt_types": ["profile-result.json", "proof.json", "console.json", "dom-summary.json", "screenshot"],
314
+ "failure_classes": ["product_regression", "proof_insufficient", "environment_blocked"],
315
+ "existing_coverage": ["docs/riddle-proof-story-matrix-runs/2026-06-22-neutral-fixture-batch.md"],
316
+ "status": "recurring"
317
+ },
318
+ {
319
+ "id": "rp-story-neutral-fixture-hosted-negative-control",
320
+ "batch": "neutral-fixture",
321
+ "surface": "neutral fixture hosted profile",
322
+ "user_story": "As a hosted Riddle Proof user, I can run a non-Riddle negative-control static preview and see product_regression instead of a false pass.",
323
+ "expected_behavior": "The hosted neutral negative-control profile reaches the preview page, fails the deliberate missing selector, and returns product_regression with review artifacts.",
324
+ "primary_runner": "hosted-riddle",
325
+ "command": "riddle-proof-loop run-profile --profile packages/riddle-proof/examples/profiles/neutral-fixture-product-regression.json --url <preview-url> --runner riddle --output artifacts/riddle-proof/neutral-fixture-product-regression-hosted --result-format compact-json",
326
+ "expected_verdict": "product_regression",
327
+ "evidence_required": [
328
+ "profile-result.json status is product_regression",
329
+ "failed check names [data-rp-fixture=\"missing-required-control\"]",
330
+ "hosted screenshot and JSON artifact URLs are listed"
331
+ ],
332
+ "receipt_types": ["profile-result.json", "proof.json", "summary.md", "screenshot"],
333
+ "failure_classes": ["contract_gap", "proof_insufficient", "environment_blocked"],
334
+ "existing_coverage": ["docs/riddle-proof-story-matrix-runs/2026-06-22-neutral-fixture-batch.md"],
335
+ "status": "recurring"
336
+ },
337
+ {
338
+ "id": "rp-story-neutral-fixture-public-state-blockers",
339
+ "batch": "neutral-fixture",
340
+ "surface": "neutral public-state packet fixtures",
341
+ "user_story": "As a consumer of Riddle Proof summaries, I can evaluate passed, product_regression, proof_insufficient, environment_blocked, and checkpoint-audit packets without using Riddle docs as the target.",
342
+ "expected_behavior": "Neutral fixture packets generate hosted proof view and agent summary surfaces with the expected policy state, claims, disclosures, and suppressed stale merge recommendations.",
343
+ "primary_runner": "runtime-test",
344
+ "command": "node packages/riddle-proof/story-matrix.test.js",
345
+ "expected_verdict": "passed",
346
+ "evidence_required": [
347
+ "neutral fixture packet set contains no Riddle Proof docs URLs",
348
+ "hosted proof view helper matches every expected fixture claim",
349
+ "agent summary helper matches every expected fixture claim"
350
+ ],
351
+ "receipt_types": ["runtime-test-log"],
352
+ "failure_classes": ["contract_gap", "doc_or_ux_gap"],
353
+ "existing_coverage": ["examples/story-matrices/riddle-proof-neutral-public-state-fixtures.json", "story-matrix.test.js"],
354
+ "status": "recurring"
355
+ },
261
356
  {
262
357
  "id": "rp-story-agent-loop-checkpoint-stale-response",
263
358
  "batch": "agent-loop",
@@ -0,0 +1,144 @@
1
+ {
2
+ "version": "riddle-proof.neutral-public-state-fixtures.v1",
3
+ "purpose": "Deterministic non-docs packets for public-state, hosted-view, and agent-summary semantics.",
4
+ "fixtures": [
5
+ {
6
+ "id": "rp-fixture-neutral-passed-ready-handoff",
7
+ "title": "Passed packet with merge handoff allowed but ship not authorized",
8
+ "input": {
9
+ "target": { "url": "https://neutral-fixture.invalid/pass.html" },
10
+ "ok": true,
11
+ "status": "ready_to_ship",
12
+ "merge_recommendation": "ready-to-ship",
13
+ "pr_handoff_policy": {
14
+ "state": "proof_complete",
15
+ "proof_complete": true,
16
+ "merge_ready": true,
17
+ "normal_pr_allowed": true
18
+ }
19
+ },
20
+ "expected": {
21
+ "policy_state": "proof_passed",
22
+ "result_label": "passed",
23
+ "claims": {
24
+ "proof_passed": true,
25
+ "ship_authorized": false,
26
+ "merge_ready": true,
27
+ "sync_allowed": true,
28
+ "all_checkpoint_responses_accepted": false
29
+ },
30
+ "handoff_merge_recommendation": "ready-to-ship",
31
+ "required_disclosures": [],
32
+ "prohibited_claims": ["ship_authorized", "shipped"]
33
+ }
34
+ },
35
+ {
36
+ "id": "rp-fixture-neutral-product-regression-stale-merge",
37
+ "title": "Product regression suppresses stale merge recommendation",
38
+ "input": {
39
+ "target": { "url": "https://neutral-fixture.invalid/pass.html" },
40
+ "ok": false,
41
+ "status": "product_regression",
42
+ "merge_recommendation": "ready-to-ship"
43
+ },
44
+ "expected": {
45
+ "policy_state": "proof_failed",
46
+ "result_label": "product_regression",
47
+ "claims": {
48
+ "proof_passed": false,
49
+ "ship_authorized": false,
50
+ "merge_ready": false,
51
+ "sync_allowed": false,
52
+ "all_checkpoint_responses_accepted": false
53
+ },
54
+ "handoff_merge_recommendation": null,
55
+ "required_disclosures": [],
56
+ "prohibited_claims": ["proof_passed", "ready_to_ship", "merge_ready", "sync_allowed"]
57
+ }
58
+ },
59
+ {
60
+ "id": "rp-fixture-neutral-proof-insufficient",
61
+ "title": "Incomplete evidence stays blocked",
62
+ "input": {
63
+ "target": { "url": "https://neutral-fixture.invalid/pass.html" },
64
+ "ok": false,
65
+ "status": "proof_insufficient"
66
+ },
67
+ "expected": {
68
+ "policy_state": "proof_blocked",
69
+ "result_label": "proof_insufficient",
70
+ "claims": {
71
+ "proof_passed": false,
72
+ "ship_authorized": false,
73
+ "merge_ready": false,
74
+ "sync_allowed": false,
75
+ "all_checkpoint_responses_accepted": false
76
+ },
77
+ "handoff_merge_recommendation": null,
78
+ "required_disclosures": ["proof_insufficient"],
79
+ "prohibited_claims": ["proof_passed", "ready_to_ship"]
80
+ }
81
+ },
82
+ {
83
+ "id": "rp-fixture-neutral-environment-blocked",
84
+ "title": "Environment blocker stays outside product correctness",
85
+ "input": {
86
+ "target": { "url": "https://neutral-fixture.invalid/pass.html" },
87
+ "ok": false,
88
+ "status": "environment_blocked",
89
+ "merge_recommendation": "ready-to-ship"
90
+ },
91
+ "expected": {
92
+ "policy_state": "proof_blocked",
93
+ "result_label": "environment_blocked",
94
+ "claims": {
95
+ "proof_passed": false,
96
+ "ship_authorized": false,
97
+ "merge_ready": false,
98
+ "sync_allowed": false,
99
+ "all_checkpoint_responses_accepted": false
100
+ },
101
+ "handoff_merge_recommendation": null,
102
+ "required_disclosures": ["environment_blocked"],
103
+ "prohibited_claims": ["proof_passed", "ready_to_ship", "merge_ready"]
104
+ }
105
+ },
106
+ {
107
+ "id": "rp-fixture-neutral-checkpoint-audit",
108
+ "title": "Checkpoint audit counters require disclosure",
109
+ "input": {
110
+ "target": { "url": "https://neutral-fixture.invalid/pass.html" },
111
+ "ok": true,
112
+ "status": "ready_to_ship",
113
+ "merge_recommendation": "ready-to-ship",
114
+ "pr_handoff_policy": {
115
+ "state": "proof_complete",
116
+ "proof_complete": true,
117
+ "merge_ready": true,
118
+ "normal_pr_allowed": true
119
+ },
120
+ "checkpoint_summary": {
121
+ "pending": false,
122
+ "response_count": 1,
123
+ "rejected_response_count": 1,
124
+ "ignored_response_count": 1,
125
+ "duplicate_response_count": 1
126
+ }
127
+ },
128
+ "expected": {
129
+ "policy_state": "proof_passed",
130
+ "result_label": "passed",
131
+ "claims": {
132
+ "proof_passed": true,
133
+ "ship_authorized": false,
134
+ "merge_ready": true,
135
+ "sync_allowed": true,
136
+ "all_checkpoint_responses_accepted": false
137
+ },
138
+ "handoff_merge_recommendation": "ready-to-ship",
139
+ "required_disclosures": ["checkpoint_audit_counters"],
140
+ "prohibited_claims": ["all_checkpoint_responses_accepted"]
141
+ }
142
+ }
143
+ ]
144
+ }
@@ -20,4 +20,9 @@ area,user_story_id,user_story,expected_behavior,surface,runner,evidence_required
20
20
  "Agent summary","rp-ux-agent-summary-contract-environment-blocked","As an agent consuming Riddle Proof output, I see environment_blocked as a blocker outside product correctness.","Agent summary helper maps environment_blocked to proof_blocked, suppresses merge recommendations, and requires environment disclosure.","agent summary contract","formal-conformance","environment_blocked packet; suppressed merge recommendation; disclosure","passed","2026-06-21","packages/riddle-proof/formal-conformance.test.js","Environment blockers stay visible and cannot become proof_passed in agent summaries.","Use in hosted cold-start/network-blocked summary tests.","P1","environment_blocked"
21
21
  "Agent summary","rp-ux-agent-summary-contract-human-review","As an agent consuming Riddle Proof output, I see needs_human_review as a held proof state, not a pass.","Agent summary helper maps needs_human_review to proof_blocked and requires human-review disclosure.","agent summary contract","formal-conformance","needs_human_review packet; disclosure; prohibited proof_passed claim","passed","2026-06-21","packages/riddle-proof/formal-conformance.test.js","Human-review verdicts now stay blocked in public consumer surfaces.","Keep this for evidence packets with subjective or unsupported checks.","P2","contract_gap"
22
22
  "Agent summary","rp-ux-agent-summary-product-wiring-uses-contract","As an agent consuming real Riddle Proof output, the emitted summary uses the shared contract rather than raw fields.","Agent-facing summaries import/use the public-state consumer helper for status, handoff, and prohibited claims.","agent-facing summary","manual-review","summary text; contract import or documented gap; negative-control packet","needs_product_hook","","","Package helper is now contract-tested; product wiring still needs an executable consumer check outside PR comments.","Find the actual agent summary renderer/emitter and wire or verify summarizeRiddleProofAgentSummarySurface usage.","P1","contract_gap"
23
+ "Neutral fixture","rp-ux-neutral-fixture-public-state-blockers","As a consumer of Riddle Proof summaries, I can validate status semantics on neutral packets rather than Riddle docs packets.","Neutral public-state fixtures cover passed handoff, product_regression, proof_insufficient, environment_blocked, and checkpoint audit claims.","neutral public-state fixtures","runtime-test","fixture JSON; hosted proof view helper; agent summary helper","passed","2026-06-22","packages/riddle-proof/story-matrix.test.js","Neutral packet fixtures keep public-state semantics separate from Riddle docs dogfood.","Keep this as the fast semantic canary before local, hosted, docs, and real-app sweeps.","P1","contract_gap"
24
+ "Neutral fixture","rp-ux-neutral-fixture-local-pass","As a maintainer, I can run a non-Riddle static fixture page locally and get a normal evidence packet.","Local Playwright pass profile returns passed with proof JSON, console, DOM summary, artifact manifest, and screenshots.","neutral fixture browser profile","local-playwright","profile-result.json; artifact-manifest.json; screenshot; proof.json","passed","2026-06-22","docs/riddle-proof-story-matrix-runs/2026-06-22-neutral-fixture-batch.md","Neutral static fixture produced a passed local evidence packet across phone and desktop.","Keep as the clean non-docs local canary before real-app sweeps.","P1","configuration_error"
25
+ "Neutral fixture","rp-ux-neutral-fixture-negative-control","As a maintainer, I can run a non-Riddle negative-control profile and get product_regression instead of a false pass.","Local Playwright negative-control profile fails only the deliberate missing selector and preserves review artifacts.","neutral fixture browser profile","local-playwright","profile-result.json; failed check; screenshot; proof.json","product_regression_expected","2026-06-22","docs/riddle-proof-story-matrix-runs/2026-06-22-neutral-fixture-batch.md","Neutral negative control stayed red on [data-rp-fixture=""missing-required-control""] while preserving artifacts.","Keep paired with the pass fixture before broader UX sweeps.","P1","contract_gap"
26
+ "Neutral fixture","rp-ux-neutral-fixture-hosted-pass","As a maintainer, I can run a non-Riddle static fixture preview on hosted Riddle and get a normal evidence packet.","Hosted pass profile returns passed with hosted job id, proof JSON, console, DOM summary, and screenshots.","neutral fixture hosted profile","hosted-riddle","profile-result.json; riddle.job_id; screenshot URLs; proof.json","passed","2026-06-22","docs/riddle-proof-story-matrix-runs/2026-06-22-neutral-fixture-batch.md","Hosted neutral pass produced job_2ab0f3f3 after fixture artifact requirements were calibrated.","Keep as the clean hosted canary before docs dogfood and real-app sweeps.","P1","environment_blocked"
27
+ "Neutral fixture","rp-ux-neutral-fixture-hosted-negative-control","As a maintainer, I can run a non-Riddle hosted negative-control profile and get product_regression instead of a false pass.","Hosted negative-control profile reaches the static preview and fails only the deliberate missing selector.","neutral fixture hosted profile","hosted-riddle","profile-result.json; failed check; screenshot URLs; proof.json","product_regression_expected","2026-06-22","docs/riddle-proof-story-matrix-runs/2026-06-22-neutral-fixture-batch.md","Hosted neutral negative control produced job_b308bc57 with product_regression and preserved artifact URLs.","Keep paired with the hosted pass fixture before broader hosted UX sweeps.","P1","contract_gap"
23
28
  "Release and publish","rp-ux-release-publish-flow","As a package maintainer, I can merge a fix, get a version PR, and publish the package without manual status fakery.","Changeset release PR validates, merges, and trusted npm publish updates latest.","changesets release","github-actions","release PR; Release workflow; npm view latest","passed","2026-06-21","@riddledc/riddle-proof@0.8.68","Release path worked for the reporting fix and published with provenance.","Keep GitHub Action noise low and use this as release smoke.","P2","environment_blocked"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riddledc/riddle-proof",
3
- "version": "0.8.70",
3
+ "version": "0.8.71",
4
4
  "description": "Reusable Riddle Proof contracts and helpers for evidence-backed agent changes.",
5
5
  "license": "MIT",
6
6
  "author": "RiddleDC",