@riddledc/riddle-proof 0.8.71 → 0.8.73

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/dist/profile.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import {
2
+ RIDDLE_PROOF_HOSTED_PROFILE_ARTIFACTS,
2
3
  RIDDLE_PROOF_PROFILE_CHECK_TYPES,
3
4
  RIDDLE_PROOF_PROFILE_EVIDENCE_VERSION,
4
5
  RIDDLE_PROOF_PROFILE_NETWORK_ABORT_ERROR_CODES,
@@ -19,15 +20,17 @@ import {
19
20
  extractRiddleProofProfileResult,
20
21
  normalizeRiddleProofProfile,
21
22
  preflightRiddleProofProfileHttpStatusChecks,
23
+ preflightRiddleProofProfileRunnerArtifacts,
22
24
  profileStatusExitCode,
23
25
  resolveRiddleProofProfileRouteUrl,
24
26
  resolveRiddleProofProfileTargetUrl,
25
27
  resolveRiddleProofProfileTimeoutSec,
26
28
  slugifyRiddleProofProfileName,
27
29
  summarizeRiddleProofProfileResult
28
- } from "./chunk-EX7TO4I5.js";
30
+ } from "./chunk-GG2D3MFZ.js";
29
31
  import "./chunk-MLKGABMK.js";
30
32
  export {
33
+ RIDDLE_PROOF_HOSTED_PROFILE_ARTIFACTS,
31
34
  RIDDLE_PROOF_PROFILE_CHECK_TYPES,
32
35
  RIDDLE_PROOF_PROFILE_EVIDENCE_VERSION,
33
36
  RIDDLE_PROOF_PROFILE_NETWORK_ABORT_ERROR_CODES,
@@ -48,6 +51,7 @@ export {
48
51
  extractRiddleProofProfileResult,
49
52
  normalizeRiddleProofProfile,
50
53
  preflightRiddleProofProfileHttpStatusChecks,
54
+ preflightRiddleProofProfileRunnerArtifacts,
51
55
  profileStatusExitCode,
52
56
  resolveRiddleProofProfileRouteUrl,
53
57
  resolveRiddleProofProfileTargetUrl,
@@ -17,3 +17,11 @@ packages/riddle-proof-runner-playwright/bin/riddle-proof-playwright run-profile
17
17
  The sibling `neutral-fixture-product-regression.json` profile intentionally
18
18
  looks for a missing selector. A correct Riddle Proof run reports
19
19
  `product_regression`, not `passed`.
20
+
21
+ `neutral-fixture-auth-session.json` exercises a stored browser-state handoff by
22
+ writing a deterministic localStorage token, reloading `auth.html`, and proving
23
+ that the authenticated fixture state is visible.
24
+
25
+ The auth profile keeps its readiness wait inside `setup_actions`, after the
26
+ localStorage write and reload. A target-level `wait_for_selector` would run
27
+ before setup and would block the token handoff.
@@ -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>
@@ -17,6 +17,7 @@
17
17
  </p>
18
18
  <nav aria-label="Fixture pages">
19
19
  <a href="./pass.html">Passing fixture page</a>
20
+ <a href="./auth.html">Stored auth fixture page</a>
20
21
  </nav>
21
22
  </main>
22
23
  </body>
@@ -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-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"
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.71",
3
+ "version": "0.8.73",
4
4
  "description": "Reusable Riddle Proof contracts and helpers for evidence-backed agent changes.",
5
5
  "license": "MIT",
6
6
  "author": "RiddleDC",