@riddledc/riddle-proof 0.8.72 → 0.8.74
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/README.md +34 -0
- package/dist/advanced/index.d.cts +1 -1
- package/dist/advanced/index.d.ts +1 -1
- package/dist/advanced/proof-run-engine.d.cts +1 -1
- package/dist/advanced/proof-run-engine.d.ts +1 -1
- package/dist/change-proof.cjs +193 -0
- package/dist/change-proof.d.cts +74 -0
- package/dist/change-proof.d.ts +74 -0
- package/dist/change-proof.js +11 -0
- package/dist/chunk-6S7DZWVC.js +167 -0
- package/dist/{chunk-XIJI62DC.js → chunk-ANUWU3DO.js} +76 -8
- package/dist/cli/index.js +3 -3
- package/dist/cli.cjs +72 -4
- package/dist/cli.js +3 -3
- package/dist/index.cjs +168 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +23 -15
- package/dist/{proof-run-engine-DpChFR5H.d.cts → proof-run-engine-Baiv6l3A.d.cts} +3 -3
- package/dist/{proof-run-engine-BqRoA3Do.d.ts → proof-run-engine-MiKZt9oY.d.ts} +3 -3
- package/dist/proof-run-engine.d.cts +1 -1
- package/dist/proof-run-engine.d.ts +1 -1
- package/examples/neutral-fixture-site/README.md +8 -0
- package/examples/neutral-fixture-site/auth.html +45 -0
- package/examples/neutral-fixture-site/index.html +1 -0
- package/examples/neutral-fixture-site/styles.css +32 -0
- package/examples/profiles/neutral-fixture-auth-session.json +44 -0
- package/examples/story-matrices/riddle-proof-bounded-loop.json +19 -0
- package/examples/story-matrices/riddle-proof-ux-coverage.csv +5 -4
- package/package.json +7 -2
|
@@ -0,0 +1,45 @@
|
|
|
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 Auth Fixture</title>
|
|
7
|
+
<link rel="stylesheet" href="./styles.css" />
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<main class="fixture-shell" data-rp-fixture="auth">
|
|
11
|
+
<p class="eyebrow">Neutral fixture</p>
|
|
12
|
+
<h1>Stored Auth Smoke</h1>
|
|
13
|
+
<p class="lead">
|
|
14
|
+
This page only exposes the success state when the runner supplies the
|
|
15
|
+
expected stored browser token.
|
|
16
|
+
</p>
|
|
17
|
+
<section class="evidence-panel auth-state" id="auth-state" data-rp-fixture="auth-pending" aria-live="polite">
|
|
18
|
+
Checking stored browser state.
|
|
19
|
+
</section>
|
|
20
|
+
</main>
|
|
21
|
+
<script>
|
|
22
|
+
(() => {
|
|
23
|
+
const expectedToken = "riddle-proof-fixture-token";
|
|
24
|
+
const observedToken = window.localStorage.getItem("rp_fixture_auth_token") || "";
|
|
25
|
+
const panel = document.getElementById("auth-state");
|
|
26
|
+
if (!panel) return;
|
|
27
|
+
if (observedToken === expectedToken) {
|
|
28
|
+
document.documentElement.dataset.authState = "passed";
|
|
29
|
+
panel.dataset.rpFixture = "auth-passed";
|
|
30
|
+
panel.innerHTML = [
|
|
31
|
+
"<strong>Authenticated fixture passed</strong>",
|
|
32
|
+
"<span>Stored browser state reached the page before checks ran.</span>",
|
|
33
|
+
].join("");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
document.documentElement.dataset.authState = "blocked";
|
|
37
|
+
panel.dataset.rpFixture = "auth-blocked";
|
|
38
|
+
panel.innerHTML = [
|
|
39
|
+
"<strong>Sign in required</strong>",
|
|
40
|
+
"<span>The expected stored browser token was not present.</span>",
|
|
41
|
+
].join("");
|
|
42
|
+
})();
|
|
43
|
+
</script>
|
|
44
|
+
</body>
|
|
45
|
+
</html>
|
|
@@ -22,6 +22,13 @@ a {
|
|
|
22
22
|
font-weight: 700;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
nav {
|
|
26
|
+
display: flex;
|
|
27
|
+
flex-wrap: wrap;
|
|
28
|
+
gap: 14px 18px;
|
|
29
|
+
margin-top: 28px;
|
|
30
|
+
}
|
|
31
|
+
|
|
25
32
|
.fixture-shell {
|
|
26
33
|
width: min(100% - 32px, 760px);
|
|
27
34
|
margin: 0 auto;
|
|
@@ -90,6 +97,31 @@ dd {
|
|
|
90
97
|
font-weight: 700;
|
|
91
98
|
}
|
|
92
99
|
|
|
100
|
+
.auth-state {
|
|
101
|
+
display: grid;
|
|
102
|
+
gap: 6px;
|
|
103
|
+
padding: 18px;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.auth-state strong,
|
|
107
|
+
.auth-state span {
|
|
108
|
+
display: block;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.auth-state strong {
|
|
112
|
+
font-size: 1.05rem;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.auth-state[data-rp-fixture="auth-passed"] {
|
|
116
|
+
border-color: #7bb69c;
|
|
117
|
+
background: #f1fbf6;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.auth-state[data-rp-fixture="auth-blocked"] {
|
|
121
|
+
border-color: #c58b8b;
|
|
122
|
+
background: #fff6f4;
|
|
123
|
+
}
|
|
124
|
+
|
|
93
125
|
@media (max-width: 640px) {
|
|
94
126
|
h1 {
|
|
95
127
|
font-size: 2.25rem;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "riddle-proof.profile.v1",
|
|
3
|
+
"name": "neutral-fixture-auth-session",
|
|
4
|
+
"target": {
|
|
5
|
+
"route": "/auth.html",
|
|
6
|
+
"viewports": [
|
|
7
|
+
{ "name": "phone", "width": 390, "height": 844 },
|
|
8
|
+
{ "name": "desktop", "width": 1440, "height": 1000 }
|
|
9
|
+
],
|
|
10
|
+
"auth": "stored-browser-state-fixture",
|
|
11
|
+
"setup_actions": [
|
|
12
|
+
{
|
|
13
|
+
"type": "local_storage",
|
|
14
|
+
"key": "rp_fixture_auth_token",
|
|
15
|
+
"value": "riddle-proof-fixture-token",
|
|
16
|
+
"reload": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"type": "wait_for_selector",
|
|
20
|
+
"selector": "[data-rp-fixture=\"auth-passed\"]",
|
|
21
|
+
"timeout_ms": 10000
|
|
22
|
+
},
|
|
23
|
+
{ "type": "wait", "ms": 100 }
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"checks": [
|
|
27
|
+
{ "type": "route_loaded", "expected_path": "/auth.html" },
|
|
28
|
+
{ "type": "selector_visible", "selector": "[data-rp-fixture=\"auth-passed\"]" },
|
|
29
|
+
{ "type": "selector_text_visible", "selector": "[data-rp-fixture=\"auth-passed\"]", "text": "Authenticated fixture passed" },
|
|
30
|
+
{ "type": "selector_text_absent", "selector": "body", "text": "Sign in required" },
|
|
31
|
+
{ "type": "no_mobile_horizontal_overflow" },
|
|
32
|
+
{ "type": "no_fatal_console_errors" }
|
|
33
|
+
],
|
|
34
|
+
"artifacts": ["screenshot", "console", "dom_summary", "proof_json"],
|
|
35
|
+
"metadata": {
|
|
36
|
+
"fixture_kind": "stored_auth_session",
|
|
37
|
+
"covers": "localStorage auth/session handoff before browser checks"
|
|
38
|
+
},
|
|
39
|
+
"failure_policy": {
|
|
40
|
+
"environment_blocked": "neutral",
|
|
41
|
+
"proof_insufficient": "fail",
|
|
42
|
+
"product_regression": "fail"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -334,6 +334,25 @@
|
|
|
334
334
|
"existing_coverage": ["docs/riddle-proof-story-matrix-runs/2026-06-22-neutral-fixture-batch.md"],
|
|
335
335
|
"status": "recurring"
|
|
336
336
|
},
|
|
337
|
+
{
|
|
338
|
+
"id": "rp-story-neutral-fixture-auth-session-smoke",
|
|
339
|
+
"batch": "neutral-fixture",
|
|
340
|
+
"surface": "neutral fixture auth/session profile",
|
|
341
|
+
"user_story": "As a Riddle Proof user, I can run a browser profile that supplies stored auth/session state before page checks execute.",
|
|
342
|
+
"expected_behavior": "The profile writes a deterministic localStorage token, reloads the page, reaches the authenticated fixture state, and produces normal proof artifacts locally and hosted.",
|
|
343
|
+
"primary_runner": "hosted-riddle",
|
|
344
|
+
"command": "riddle-proof-loop run-profile --profile packages/riddle-proof/examples/profiles/neutral-fixture-auth-session.json --url <preview-url> --runner riddle --output artifacts/riddle-proof/neutral-fixture-auth-session-hosted --result-format compact-json",
|
|
345
|
+
"expected_verdict": "passed",
|
|
346
|
+
"evidence_required": [
|
|
347
|
+
"profile-result.json status is passed",
|
|
348
|
+
"setup_actions_succeeded records local_storage with reload",
|
|
349
|
+
"hosted or local screenshots show the authenticated fixture state"
|
|
350
|
+
],
|
|
351
|
+
"receipt_types": ["profile-result.json", "proof.json", "summary.md", "screenshot"],
|
|
352
|
+
"failure_classes": ["product_regression", "proof_insufficient", "environment_blocked"],
|
|
353
|
+
"existing_coverage": ["examples/profiles/neutral-fixture-auth-session.json", "examples/neutral-fixture-site/auth.html"],
|
|
354
|
+
"status": "recurring"
|
|
355
|
+
},
|
|
337
356
|
{
|
|
338
357
|
"id": "rp-story-neutral-fixture-public-state-blockers",
|
|
339
358
|
"batch": "neutral-fixture",
|
|
@@ -21,8 +21,9 @@ area,user_story_id,user_story,expected_behavior,surface,runner,evidence_required
|
|
|
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
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-auth-session-smoke.md","Neutral static fixture still produced a passed local evidence packet across phone and desktop after auth fixture changes.","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-auth-session-smoke.md","Neutral negative control still 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","job_3867a928; docs/riddle-proof-story-matrix-runs/2026-06-22-auth-session-smoke.md","Hosted neutral pass produced job_3867a928 after auth fixture changes.","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","job_552de3af; docs/riddle-proof-story-matrix-runs/2026-06-22-auth-session-smoke.md","Hosted neutral negative control produced job_552de3af with product_regression and preserved artifact URLs.","Keep paired with the hosted pass fixture before broader hosted UX sweeps.","P1","contract_gap"
|
|
28
|
+
"Neutral fixture","rp-story-neutral-fixture-auth-session-smoke","As a maintainer, I can run a non-Riddle profile that supplies stored auth/session state before checks execute.","Auth/session profile writes localStorage, reloads the page, reaches the authenticated fixture state, and preserves artifacts.","neutral fixture auth/session profile","hosted-riddle","profile-result.json; setup_actions_succeeded local_storage receipt; screenshot; proof.json","passed","2026-06-22","job_1daf11b4; docs/riddle-proof-story-matrix-runs/2026-06-22-auth-session-smoke.md","Local and hosted auth/session smoke passed; profile-authoring note added for setup-action readiness ordering.","Keep this next to neutral pass and negative controls before real authenticated product sweeps.","P1","environment_blocked"
|
|
28
29
|
"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.
|
|
3
|
+
"version": "0.8.74",
|
|
4
4
|
"description": "Reusable Riddle Proof contracts and helpers for evidence-backed agent changes.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "RiddleDC",
|
|
@@ -134,6 +134,11 @@
|
|
|
134
134
|
"import": "./dist/profile-suggestions.js",
|
|
135
135
|
"require": "./dist/profile-suggestions.cjs"
|
|
136
136
|
},
|
|
137
|
+
"./change-proof": {
|
|
138
|
+
"types": "./dist/change-proof.d.ts",
|
|
139
|
+
"import": "./dist/change-proof.js",
|
|
140
|
+
"require": "./dist/change-proof.cjs"
|
|
141
|
+
},
|
|
137
142
|
"./pr-comment": {
|
|
138
143
|
"types": "./dist/pr-comment.d.ts",
|
|
139
144
|
"import": "./dist/pr-comment.js",
|
|
@@ -244,7 +249,7 @@
|
|
|
244
249
|
"typescript": "^5.4.5"
|
|
245
250
|
},
|
|
246
251
|
"scripts": {
|
|
247
|
-
"build": "npm --workspace @riddledc/riddle-proof-app-contract run build --if-present && tsup src/index.ts src/types.ts src/result.ts src/state.ts src/checkpoint.ts src/run-card.ts src/public-state.ts src/runner.ts src/engine-harness.ts src/codex-exec-agent.ts src/local-agent.ts src/cli.ts src/cli/index.ts src/diagnostics.ts src/proof-session.ts src/playability.ts src/basic-gameplay.ts src/profile.ts src/profile/index.ts src/profile-suggestions.ts src/pr-comment.ts src/openclaw.ts src/proof-run-core.ts src/proof-run-engine.ts src/riddle-client.ts src/runtime/riddle-client.ts src/spec/index.ts src/spec/types.ts src/spec/result.ts src/spec/state.ts src/spec/checkpoint.ts src/spec/run-card.ts src/spec/public-state.ts src/runtime/index.ts src/app-contract/index.ts src/advanced/index.ts src/advanced/runner.ts src/advanced/engine-harness.ts src/advanced/proof-run-core.ts src/advanced/proof-run-engine.ts src/adapters/openclaw.ts src/adapters/local-agent.ts src/adapters/codex-exec-agent.ts src/adapters/codex.ts --format cjs,esm --dts --out-dir dist --clean",
|
|
252
|
+
"build": "npm --workspace @riddledc/riddle-proof-app-contract run build --if-present && tsup src/index.ts src/types.ts src/result.ts src/state.ts src/checkpoint.ts src/run-card.ts src/public-state.ts src/runner.ts src/engine-harness.ts src/codex-exec-agent.ts src/local-agent.ts src/cli.ts src/cli/index.ts src/diagnostics.ts src/proof-session.ts src/playability.ts src/basic-gameplay.ts src/profile.ts src/profile/index.ts src/profile-suggestions.ts src/change-proof.ts src/pr-comment.ts src/openclaw.ts src/proof-run-core.ts src/proof-run-engine.ts src/riddle-client.ts src/runtime/riddle-client.ts src/spec/index.ts src/spec/types.ts src/spec/result.ts src/spec/state.ts src/spec/checkpoint.ts src/spec/run-card.ts src/spec/public-state.ts src/runtime/index.ts src/app-contract/index.ts src/advanced/index.ts src/advanced/runner.ts src/advanced/engine-harness.ts src/advanced/proof-run-core.ts src/advanced/proof-run-engine.ts src/adapters/openclaw.ts src/adapters/local-agent.ts src/adapters/codex-exec-agent.ts src/adapters/codex.ts --format cjs,esm --dts --out-dir dist --clean",
|
|
248
253
|
"clean": "rm -rf dist",
|
|
249
254
|
"lint": "echo 'lint: (not configured)'",
|
|
250
255
|
"test": "npm run build && node test.js && node proof-run.test.js && node formal-conformance.test.js && node trust-boundary.test.js && node regression-packs.test.js && node story-matrix.test.js && python3 runtime/tests/trust_boundary_regression.py && python3 runtime/tests/ship_artifact_publication.py && (python3 runtime/tests/recon_verify_smoke.py >/tmp/riddle-proof-recon-verify-smoke.json || (tail -120 /tmp/riddle-proof-recon-verify-smoke.json; exit 1))"
|