@reticlehq/server 2.6.0 → 2.8.0
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 +14 -5
- package/SKILL.md +251 -33
- package/dist/bridge/bridge.d.ts +6 -1
- package/dist/bridge/bridge.js +27 -4
- package/dist/capsule/causal-summary.d.ts +20 -0
- package/dist/capsule/causal-summary.js +31 -6
- package/dist/capsule/divergence.js +7 -1
- package/dist/cli/chromium-hint.d.ts +68 -0
- package/dist/cli/chromium-hint.js +145 -0
- package/dist/cli/cli-doctor.js +31 -36
- package/dist/cli/cli-kill.d.ts +58 -0
- package/dist/cli/cli-kill.js +162 -0
- package/dist/cli/cli-launch.d.ts +18 -0
- package/dist/cli/cli-launch.js +32 -1
- package/dist/cli/cli-parse.d.ts +16 -1
- package/dist/cli/cli-parse.js +32 -9
- package/dist/cli/cli-port.d.ts +8 -0
- package/dist/cli/cli-port.js +36 -1
- package/dist/cli/cli-verify.js +2 -2
- package/dist/cli/doctor-daemon-line.js +10 -1
- package/dist/cli/doctor-sessions-line.d.ts +12 -0
- package/dist/cli/doctor-sessions-line.js +66 -0
- package/dist/cli/port-holder.d.ts +10 -0
- package/dist/cli/port-holder.js +26 -2
- package/dist/cli.js +139 -23
- package/dist/crawl/crawl-tools.js +12 -2
- package/dist/crawl/crawl.d.ts +13 -0
- package/dist/crawl/crawl.js +50 -2
- package/dist/daemon/daemon-resilience.js +2 -2
- package/dist/daemon/loopback-alias.d.ts +32 -0
- package/dist/daemon/loopback-alias.js +80 -0
- package/dist/events/contradictions.d.ts +14 -0
- package/dist/events/contradictions.js +26 -17
- package/dist/events/predicate-eval.d.ts +26 -3
- package/dist/events/predicate-eval.js +284 -95
- package/dist/events/predicate-parse.d.ts +1 -1
- package/dist/events/predicate-parse.js +18 -4
- package/dist/events/predicate.js +170 -18
- package/dist/events/ring-buffer.d.ts +8 -0
- package/dist/events/ring-buffer.js +34 -1
- package/dist/flows/flow-classify.js +1 -1
- package/dist/flows/flow-tools.js +12 -4
- package/dist/flows/heal-run.js +1 -1
- package/dist/honesty/blind-spots.js +6 -2
- package/dist/honesty/honesty.d.ts +11 -0
- package/dist/honesty/honesty.js +9 -1
- package/dist/honesty/unsettled.d.ts +40 -0
- package/dist/honesty/unsettled.js +78 -0
- package/dist/honesty/verified.d.ts +7 -0
- package/dist/honesty/verified.js +27 -4
- package/dist/http-server.js +11 -1
- package/dist/index.js +29 -2
- package/dist/init/agent-rules.d.ts +16 -0
- package/dist/init/agent-rules.js +96 -17
- package/dist/init/astro-patch.d.ts +2 -1
- package/dist/init/astro-patch.js +11 -5
- package/dist/init/capabilities.d.ts +22 -0
- package/dist/init/capabilities.js +76 -0
- package/dist/init/confirm.d.ts +96 -0
- package/dist/init/confirm.js +138 -0
- package/dist/init/cra.js +3 -2
- package/dist/init/detect.d.ts +8 -0
- package/dist/init/detect.js +15 -0
- package/dist/init/non-js-project.d.ts +27 -0
- package/dist/init/non-js-project.js +84 -0
- package/dist/init/plan-framework.d.ts +9 -0
- package/dist/init/plan-framework.js +72 -16
- package/dist/init/plan.d.ts +40 -4
- package/dist/init/plan.js +183 -43
- package/dist/init/run.d.ts +24 -2
- package/dist/init/run.js +181 -46
- package/dist/init/slash-command.d.ts +1 -1
- package/dist/init/slash-command.js +46 -6
- package/dist/init/snippets.d.ts +64 -5
- package/dist/init/snippets.js +220 -31
- package/dist/init/vite-config.js +29 -3
- package/dist/input/network-mock-tools.d.ts +19 -0
- package/dist/input/network-mock-tools.js +29 -4
- package/dist/license/license.js +1 -1
- package/dist/mcp/mcp-proxy.d.ts +69 -3
- package/dist/mcp/mcp-proxy.js +215 -23
- package/dist/mcp/mcp.js +58 -7
- package/dist/mcp/proxy-lifecycle.d.ts +20 -1
- package/dist/mcp/proxy-lifecycle.js +22 -1
- package/dist/pool/browser-pool.d.ts +22 -2
- package/dist/pool/browser-pool.js +44 -4
- package/dist/pool/playwright-launcher.js +10 -2
- package/dist/project/learned-routes.d.ts +24 -0
- package/dist/project/learned-routes.js +63 -0
- package/dist/project/project-store.d.ts +6 -0
- package/dist/project/project-store.js +25 -1
- package/dist/session/live-control-tools.js +39 -2
- package/dist/session/live-control.d.ts +7 -9
- package/dist/session/live-control.js +34 -1
- package/dist/session/no-session-diagnosis.d.ts +23 -4
- package/dist/session/no-session-diagnosis.js +128 -44
- package/dist/session/no-session-watch.js +12 -0
- package/dist/session/ref-provenance.d.ts +54 -0
- package/dist/session/ref-provenance.js +61 -0
- package/dist/session/review-store.d.ts +19 -0
- package/dist/session/review-store.js +34 -5
- package/dist/session/session-lease.js +1 -1
- package/dist/session/session-manager.d.ts +9 -0
- package/dist/session/session-manager.js +11 -0
- package/dist/session/session.d.ts +8 -0
- package/dist/session/session.js +12 -0
- package/dist/status-payload.d.ts +13 -1
- package/dist/status-payload.js +6 -1
- package/dist/telemetry/app-instrumented.d.ts +37 -0
- package/dist/telemetry/app-instrumented.js +54 -0
- package/dist/telemetry/automation-hint.d.ts +17 -0
- package/dist/telemetry/automation-hint.js +71 -0
- package/dist/telemetry/bug-found.d.ts +0 -20
- package/dist/telemetry/bug-found.js +38 -21
- package/dist/telemetry/cli-telemetry.js +7 -1
- package/dist/telemetry/daemon-telemetry.d.ts +4 -4
- package/dist/telemetry/daemon-telemetry.js +8 -4
- package/dist/telemetry/feedback.js +1 -1
- package/dist/telemetry/init-telemetry.js +9 -1
- package/dist/telemetry/install-source.d.ts +36 -0
- package/dist/telemetry/install-source.js +40 -0
- package/dist/telemetry/run-telemetry.js +4 -1
- package/dist/telemetry/session-metrics.d.ts +3 -3
- package/dist/telemetry/session-metrics.js +9 -4
- package/dist/telemetry/telemetry.d.ts +7 -1
- package/dist/telemetry/telemetry.js +17 -2
- package/dist/telemetry/tool-refused.d.ts +19 -0
- package/dist/telemetry/tool-refused.js +55 -0
- package/dist/telemetry/verification-of.js +72 -8
- package/dist/temp-dir.d.ts +27 -0
- package/dist/temp-dir.js +46 -0
- package/dist/tools/act-tools.js +77 -11
- package/dist/tools/assert-grade.d.ts +1 -1
- package/dist/tools/assert-grade.js +27 -5
- package/dist/tools/assert-verdict.js +25 -1
- package/dist/tools/contract-tools.js +4 -0
- package/dist/tools/dynamic-tools.js +1 -1
- package/dist/tools/error-recovery.d.ts +10 -0
- package/dist/tools/error-recovery.js +70 -5
- package/dist/tools/feedback-invite.js +1 -1
- package/dist/tools/invoke-tool.js +149 -32
- package/dist/tools/lease-tools.d.ts +29 -1
- package/dist/tools/lease-tools.js +58 -5
- package/dist/tools/navigate-result.js +1 -1
- package/dist/tools/observe-tools.js +1 -1
- package/dist/tools/observed-nothing.js +1 -1
- package/dist/tools/react-grace.d.ts +48 -0
- package/dist/tools/react-grace.js +87 -0
- package/dist/tools/read-tools.js +20 -4
- package/dist/tools/settle-in-flight.d.ts +79 -0
- package/dist/tools/settle-in-flight.js +106 -0
- package/dist/tools/snapshot-delta.d.ts +7 -0
- package/dist/tools/snapshot-delta.js +130 -6
- package/dist/tools/tool-kit.d.ts +52 -5
- package/dist/tools/tool-kit.js +55 -24
- package/dist/tools/tool-surface.js +28 -9
- package/dist/tools/tools.js +38 -4
- package/dist/visual/capture-cleanup.d.ts +16 -0
- package/dist/visual/capture-cleanup.js +39 -0
- package/dist/visual/visual-tools.d.ts +18 -0
- package/dist/visual/visual-tools.js +24 -5
- package/docs/README.md +56 -11
- package/docs/actions.mdx +87 -0
- package/docs/agent-cheatsheet.md +102 -26
- package/docs/architecture.md +46 -35
- package/docs/benchmarks.md +76 -72
- package/docs/best-practices.mdx +211 -0
- package/docs/capabilities.mdx +387 -0
- package/docs/cli/affected.mdx +51 -0
- package/docs/cli/capsules.mdx +69 -0
- package/docs/cli/cloud.mdx +127 -0
- package/docs/cli/doctor.mdx +76 -0
- package/docs/cli/drive.mdx +55 -0
- package/docs/cli/feedback.mdx +67 -0
- package/docs/cli/gate.mdx +64 -0
- package/docs/cli/help.mdx +92 -0
- package/docs/cli/hunt.mdx +57 -0
- package/docs/cli/identify.mdx +62 -0
- package/docs/cli/init.mdx +94 -0
- package/docs/cli/kill.mdx +91 -0
- package/docs/cli/license.mdx +48 -0
- package/docs/cli/mcp.mdx +61 -0
- package/docs/cli/open.mdx +68 -0
- package/docs/cli/restart.mdx +60 -0
- package/docs/cli/rollback.mdx +35 -0
- package/docs/cli/serve.mdx +62 -0
- package/docs/cli/status.mdx +64 -0
- package/docs/cli/stop.mdx +56 -0
- package/docs/cli/telemetry.mdx +57 -0
- package/docs/cli/update.mdx +52 -0
- package/docs/cli/verify.mdx +57 -0
- package/docs/cli/version.mdx +39 -0
- package/docs/cli/watch.mdx +55 -0
- package/docs/cli.mdx +219 -0
- package/docs/debugging.md +13 -9
- package/docs/deploy-checks.md +15 -11
- package/docs/desktop-apps.md +49 -40
- package/docs/desktop.mdx +188 -0
- package/docs/docs.json +363 -0
- package/docs/enterprise.md +20 -16
- package/docs/faq.mdx +88 -0
- package/docs/fixtures.md +11 -7
- package/docs/flows.md +26 -22
- package/docs/for-agents.md +71 -0
- package/docs/frameworks.mdx +199 -0
- package/docs/gate-plan.md +45 -41
- package/docs/gates.md +23 -19
- package/docs/getting-started.md +76 -65
- package/docs/human-control.md +22 -18
- package/docs/index.mdx +101 -0
- package/docs/install-agentic.mdx +215 -0
- package/docs/install-manual.mdx +194 -0
- package/docs/instrumentation.mdx +232 -0
- package/docs/integration-patterns.md +38 -34
- package/docs/local-registry.md +16 -12
- package/docs/multi-agent-testing.md +16 -12
- package/docs/packages/babel-plugin.mdx +70 -0
- package/docs/packages/browser.mdx +111 -0
- package/docs/packages/core.mdx +106 -0
- package/docs/packages/electron.mdx +87 -0
- package/docs/packages/eslint-plugin.mdx +84 -0
- package/docs/packages/next.mdx +91 -0
- package/docs/packages/react.mdx +91 -0
- package/docs/packages/server.mdx +98 -0
- package/docs/packages/tauri.mdx +63 -0
- package/docs/packages/test.mdx +108 -0
- package/docs/packages/vite-plugin.mdx +96 -0
- package/docs/packages.mdx +217 -0
- package/docs/platform-integration.md +33 -26
- package/docs/predicates.mdx +179 -0
- package/docs/quickstart.mdx +211 -0
- package/docs/recipes.mdx +242 -0
- package/docs/skill-file.mdx +105 -0
- package/docs/state-management.mdx +197 -0
- package/docs/style.css +14 -0
- package/docs/system-map.md +47 -32
- package/docs/telemetry-contract.md +101 -46
- package/docs/telemetry-events.mdx +430 -0
- package/docs/telemetry.md +63 -50
- package/docs/testing.md +10 -6
- package/docs/token-efficiency.md +30 -26
- package/docs/tools-act-and-wait.mdx +123 -0
- package/docs/tools-act-sequence.mdx +120 -0
- package/docs/tools-act.mdx +82 -0
- package/docs/tools-assert.mdx +70 -0
- package/docs/tools-console.mdx +59 -0
- package/docs/tools-inspect.mdx +85 -0
- package/docs/tools-navigate.mdx +63 -0
- package/docs/tools-network.mdx +86 -0
- package/docs/tools-observe.mdx +89 -0
- package/docs/tools-overview.mdx +157 -0
- package/docs/tools-query.mdx +82 -0
- package/docs/tools-session-and-feedback.mdx +91 -0
- package/docs/tools-sessions.mdx +65 -0
- package/docs/tools-snapshot.mdx +75 -0
- package/docs/tools-state.mdx +81 -0
- package/docs/tools-tools-and-run.mdx +125 -0
- package/docs/tools-wait-for.mdx +66 -0
- package/docs/troubleshooting.mdx +193 -0
- package/docs/usage.md +175 -153
- package/docs/vs-chrome-devtools-mcp.mdx +82 -0
- package/docs/vs-playwright-mcp.mdx +85 -0
- package/docs/vs-screenshots.mdx +96 -0
- package/docs/what-is-reticle.mdx +63 -0
- package/docs/why-reticle.mdx +107 -0
- package/package.json +2 -2
- package/docs/matrix/2.5.0/claude-code-machine.json +0 -19
- package/docs/matrix/2.5.0/codex-machine.json +0 -20
- package/docs/matrix/2.5.0/cursor-machine.json +0 -22
- package/docs/matrix/2.5.0/gemini-machine.json +0 -22
- package/docs/matrix/2.5.0/opencode-machine.json +0 -22
- package/docs/matrix/2.5.0/vscode-machine.json +0 -22
- package/docs/matrix/2.5.0/windsurf-machine.json +0 -22
- package/docs/matrix/MATRIX.md +0 -26
- package/docs/matrix/README.md +0 -59
- package/docs/mint.json +0 -61
package/docs/docs.json
ADDED
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://mintlify.com/docs.json",
|
|
3
|
+
"theme": "mint",
|
|
4
|
+
"name": "Reticle",
|
|
5
|
+
"description": "Reticle is the proof layer for AI agents: it verifies a running web app from the inside, without screenshots, and returns a verdict with evidence.",
|
|
6
|
+
"colors": {
|
|
7
|
+
"primary": "#ff9d86",
|
|
8
|
+
"light": "#ffbcac",
|
|
9
|
+
"dark": "#d04425"
|
|
10
|
+
},
|
|
11
|
+
"logo": {
|
|
12
|
+
"light": "/logo/wordmark-black.svg",
|
|
13
|
+
"dark": "/logo/wordmark-white.svg"
|
|
14
|
+
},
|
|
15
|
+
"favicon": {
|
|
16
|
+
"light": "/favicon/mark-black.svg",
|
|
17
|
+
"dark": "/favicon/mark-white.svg"
|
|
18
|
+
},
|
|
19
|
+
"appearance": {
|
|
20
|
+
"default": "system"
|
|
21
|
+
},
|
|
22
|
+
"styling": {
|
|
23
|
+
"eyebrows": "breadcrumbs",
|
|
24
|
+
"codeblocks": "dark"
|
|
25
|
+
},
|
|
26
|
+
"search": {
|
|
27
|
+
"prompt": "Search the Reticle docs"
|
|
28
|
+
},
|
|
29
|
+
"metadata": {
|
|
30
|
+
"timestamp": true
|
|
31
|
+
},
|
|
32
|
+
"navigation": {
|
|
33
|
+
"versions": [
|
|
34
|
+
{
|
|
35
|
+
"version": "2.8.0",
|
|
36
|
+
"default": true,
|
|
37
|
+
"tabs": [
|
|
38
|
+
{
|
|
39
|
+
"tab": "Guides",
|
|
40
|
+
"groups": [
|
|
41
|
+
{
|
|
42
|
+
"group": "Get started",
|
|
43
|
+
"pages": [
|
|
44
|
+
"quickstart",
|
|
45
|
+
"what-is-reticle",
|
|
46
|
+
"why-reticle",
|
|
47
|
+
"getting-started",
|
|
48
|
+
"for-agents"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"group": "Install",
|
|
53
|
+
"pages": ["install-agentic", "install-manual", "frameworks"]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"group": "Instrument",
|
|
57
|
+
"pages": ["instrumentation", "state-management"]
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"group": "Verify and ship",
|
|
61
|
+
"pages": ["flows", "testing", "deploy-checks", "integration-patterns"]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"group": "Working with agents",
|
|
65
|
+
"pages": ["multi-agent-testing", "human-control", "platform-integration"]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"group": "When it goes wrong",
|
|
69
|
+
"pages": ["troubleshooting", "debugging"]
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"tab": "Reference",
|
|
75
|
+
"groups": [
|
|
76
|
+
{
|
|
77
|
+
"group": "Tools",
|
|
78
|
+
"pages": [
|
|
79
|
+
"tools-overview",
|
|
80
|
+
"tools-snapshot",
|
|
81
|
+
"tools-query",
|
|
82
|
+
"tools-inspect",
|
|
83
|
+
"tools-navigate",
|
|
84
|
+
"tools-act",
|
|
85
|
+
"tools-act-and-wait",
|
|
86
|
+
"tools-act-sequence",
|
|
87
|
+
"tools-observe",
|
|
88
|
+
"tools-network",
|
|
89
|
+
"tools-console",
|
|
90
|
+
"tools-state",
|
|
91
|
+
"tools-wait-for",
|
|
92
|
+
"tools-assert",
|
|
93
|
+
"tools-sessions",
|
|
94
|
+
"tools-tools-and-run",
|
|
95
|
+
"tools-session-and-feedback"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"group": "Beyond the loop",
|
|
100
|
+
"pages": ["capabilities"]
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"group": "CLI commands",
|
|
104
|
+
"pages": [
|
|
105
|
+
"cli",
|
|
106
|
+
"cli/init",
|
|
107
|
+
"cli/doctor",
|
|
108
|
+
"cli/status",
|
|
109
|
+
"cli/serve",
|
|
110
|
+
"cli/stop",
|
|
111
|
+
"cli/kill",
|
|
112
|
+
"cli/restart",
|
|
113
|
+
"cli/mcp",
|
|
114
|
+
"cli/open",
|
|
115
|
+
"cli/drive",
|
|
116
|
+
"cli/verify",
|
|
117
|
+
"cli/affected",
|
|
118
|
+
"cli/gate",
|
|
119
|
+
"cli/watch",
|
|
120
|
+
"cli/capsules",
|
|
121
|
+
"cli/hunt",
|
|
122
|
+
"cli/update",
|
|
123
|
+
"cli/rollback",
|
|
124
|
+
"cli/license",
|
|
125
|
+
"cli/version",
|
|
126
|
+
"cli/telemetry",
|
|
127
|
+
"cli/feedback",
|
|
128
|
+
"cli/identify",
|
|
129
|
+
"cli/help",
|
|
130
|
+
"cli/cloud"
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"group": "Packages",
|
|
135
|
+
"pages": [
|
|
136
|
+
"packages",
|
|
137
|
+
"packages/core",
|
|
138
|
+
"packages/browser",
|
|
139
|
+
"packages/server",
|
|
140
|
+
"packages/react",
|
|
141
|
+
"packages/vite-plugin",
|
|
142
|
+
"packages/babel-plugin",
|
|
143
|
+
"packages/next",
|
|
144
|
+
"packages/test",
|
|
145
|
+
"packages/eslint-plugin",
|
|
146
|
+
"packages/electron",
|
|
147
|
+
"packages/tauri"
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"group": "Grammar",
|
|
152
|
+
"pages": ["predicates", "actions", "recipes"]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"group": "Long form",
|
|
156
|
+
"pages": ["agent-cheatsheet", "usage", "faq"]
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"tab": "Desktop",
|
|
162
|
+
"groups": [
|
|
163
|
+
{
|
|
164
|
+
"group": "Desktop apps",
|
|
165
|
+
"pages": ["desktop", "desktop-apps"]
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"tab": "Resources",
|
|
171
|
+
"groups": [
|
|
172
|
+
{
|
|
173
|
+
"group": "How it works",
|
|
174
|
+
"pages": ["architecture", "benchmarks", "token-efficiency"]
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"group": "Compare",
|
|
178
|
+
"pages": ["vs-playwright-mcp", "vs-chrome-devtools-mcp", "vs-screenshots"]
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"group": "Practice",
|
|
182
|
+
"pages": ["best-practices", "skill-file"]
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"group": "Trust & licensing",
|
|
186
|
+
"pages": ["telemetry", "enterprise"]
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"tab": "Contributing",
|
|
192
|
+
"groups": [
|
|
193
|
+
{
|
|
194
|
+
"group": "Working on Reticle",
|
|
195
|
+
"pages": [
|
|
196
|
+
"gates",
|
|
197
|
+
"gate-plan",
|
|
198
|
+
"system-map",
|
|
199
|
+
"telemetry-contract",
|
|
200
|
+
"telemetry-events",
|
|
201
|
+
"fixtures",
|
|
202
|
+
"local-registry"
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
]
|
|
208
|
+
}
|
|
209
|
+
],
|
|
210
|
+
"global": {
|
|
211
|
+
"anchors": [
|
|
212
|
+
{
|
|
213
|
+
"anchor": "GitHub",
|
|
214
|
+
"href": "https://github.com/reticlehq/reticle",
|
|
215
|
+
"icon": "github"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"anchor": "Discord",
|
|
219
|
+
"href": "https://discord.gg/BwAbzv9ZRz",
|
|
220
|
+
"icon": "discord"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"anchor": "npm",
|
|
224
|
+
"href": "https://www.npmjs.com/org/reticlehq",
|
|
225
|
+
"icon": "npm"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"anchor": "Changelog",
|
|
229
|
+
"href": "https://github.com/reticlehq/reticle/blob/main/CHANGELOG.md",
|
|
230
|
+
"icon": "clock-rotate-left"
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"navbar": {
|
|
236
|
+
"links": [
|
|
237
|
+
{
|
|
238
|
+
"type": "github",
|
|
239
|
+
"href": "https://github.com/reticlehq/reticle"
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
"primary": {
|
|
243
|
+
"type": "button",
|
|
244
|
+
"label": "Get started",
|
|
245
|
+
"href": "/quickstart"
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
"footer": {
|
|
249
|
+
"socials": {
|
|
250
|
+
"x": "https://x.com/reticle_hq",
|
|
251
|
+
"github": "https://github.com/reticlehq/reticle",
|
|
252
|
+
"linkedin": "https://www.linkedin.com/company/reticlehq",
|
|
253
|
+
"discord": "https://discord.gg/BwAbzv9ZRz"
|
|
254
|
+
},
|
|
255
|
+
"links": [
|
|
256
|
+
{
|
|
257
|
+
"header": "Docs",
|
|
258
|
+
"items": [
|
|
259
|
+
{
|
|
260
|
+
"label": "Quickstart",
|
|
261
|
+
"href": "/quickstart"
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"label": "Usage guide",
|
|
265
|
+
"href": "/usage"
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"label": "Agent cheat sheet",
|
|
269
|
+
"href": "/agent-cheatsheet"
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"label": "For agents",
|
|
273
|
+
"href": "/for-agents"
|
|
274
|
+
}
|
|
275
|
+
]
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"header": "Project",
|
|
279
|
+
"items": [
|
|
280
|
+
{
|
|
281
|
+
"label": "Contributing",
|
|
282
|
+
"href": "https://github.com/reticlehq/reticle/blob/main/CONTRIBUTING.md"
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"label": "Security",
|
|
286
|
+
"href": "https://github.com/reticlehq/reticle/blob/main/SECURITY.md"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"label": "License",
|
|
290
|
+
"href": "https://github.com/reticlehq/reticle/blob/main/LICENSE"
|
|
291
|
+
}
|
|
292
|
+
]
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"header": "Community",
|
|
296
|
+
"items": [
|
|
297
|
+
{
|
|
298
|
+
"label": "Discord",
|
|
299
|
+
"href": "https://discord.gg/BwAbzv9ZRz"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"label": "Star on GitHub",
|
|
303
|
+
"href": "https://github.com/reticlehq/reticle"
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"label": "X",
|
|
307
|
+
"href": "https://x.com/reticle_hq"
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"label": "LinkedIn",
|
|
311
|
+
"href": "https://www.linkedin.com/company/reticlehq"
|
|
312
|
+
}
|
|
313
|
+
]
|
|
314
|
+
}
|
|
315
|
+
]
|
|
316
|
+
},
|
|
317
|
+
"redirects": [
|
|
318
|
+
{
|
|
319
|
+
"source": "/README",
|
|
320
|
+
"destination": "/getting-started",
|
|
321
|
+
"permanent": true
|
|
322
|
+
}
|
|
323
|
+
],
|
|
324
|
+
"contextual": {
|
|
325
|
+
"options": ["copy", "view", "claude", "chatgpt", "cursor", "vscode", "mcp", "add-mcp"]
|
|
326
|
+
},
|
|
327
|
+
"markdown": {
|
|
328
|
+
"instructions": [
|
|
329
|
+
"Reticle is a dev-only, localhost-only verification layer for AI coding agents. It reads program truth (network, state, console, routing, animations, framework state) from inside a running web app and returns a deterministic verdict with evidence. It is not a screenshot tool and not a browser automation library.",
|
|
330
|
+
"Only `reticle_act_and_wait` and `reticle_assert` produce a verdict. Every other tool moves or reads the app and proves nothing. A drive that ends without one of those two has no result, however many tools it used.",
|
|
331
|
+
"A verdict of `verified: \"unknown\"` is not a pass. It means Reticle drove the app and could not tell what happened. Report it as unknown; never weaken a check to make it pass.",
|
|
332
|
+
"Package names are scoped `@reticlehq/*`. Run every CLI command as `npx @reticlehq/server <command>`, for example `npx @reticlehq/server init`. `reticle` is a bin name that `@reticlehq/server` installs once it is on your PATH, NOT a package on npm: `npx reticle` fetches an unrelated package published by somebody else, so never run that. The complete tool surface is on the `/usage` page; `/agent-cheatsheet` is the one-screen version."
|
|
333
|
+
]
|
|
334
|
+
},
|
|
335
|
+
"seo": {
|
|
336
|
+
"metatags": {
|
|
337
|
+
"og:site_name": "Reticle Docs",
|
|
338
|
+
"og:type": "website",
|
|
339
|
+
"og:title": "Reticle Docs: verification for AI coding agents",
|
|
340
|
+
"og:description": "Reticle verifies a running web app from the inside and returns a verdict with evidence, not a screenshot. Install it, instrument it, and read the full tool reference.",
|
|
341
|
+
"og:url": "https://docs.reticle.sh",
|
|
342
|
+
"og:image": "https://docs.reticle.sh/images/og.png",
|
|
343
|
+
"og:image:alt": "Reticle: your agent says it works. Reticle checks.",
|
|
344
|
+
"twitter:card": "summary_large_image",
|
|
345
|
+
"twitter:site": "@reticle_hq",
|
|
346
|
+
"twitter:creator": "@reticle_hq",
|
|
347
|
+
"twitter:image": "https://docs.reticle.sh/images/og.png"
|
|
348
|
+
},
|
|
349
|
+
"organization": {
|
|
350
|
+
"name": "Reticle",
|
|
351
|
+
"url": "https://docs.reticle.sh",
|
|
352
|
+
"logo": "https://docs.reticle.sh/images/og.png",
|
|
353
|
+
"sameAs": ["https://github.com/reticlehq/reticle", "https://www.npmjs.com/org/reticlehq"]
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
"errors": {
|
|
357
|
+
"404": {
|
|
358
|
+
"redirect": false,
|
|
359
|
+
"title": "No such page",
|
|
360
|
+
"description": "That page moved or never existed. Start at [Getting started](/getting-started), or search above."
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
package/docs/enterprise.md
CHANGED
|
@@ -1,55 +1,59 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
title: Enterprise
|
|
3
|
+
description: 'Premium access and activation, what is gated, the security and data-handling posture, and the licensing model.'
|
|
4
|
+
icon: building
|
|
5
|
+
---
|
|
2
6
|
|
|
3
7
|
> Premium access (how you get + activate it), what's gated, the security/data-handling posture, and the licensing model. Integration mechanics live in [`platform-integration.md`](./platform-integration.md).
|
|
4
8
|
|
|
5
9
|
## How premium access works (offline, no phone-home)
|
|
6
10
|
|
|
7
|
-
Enterprise (`ee/`) features ship **inside the open package
|
|
11
|
+
Enterprise (`ee/`) features ship **inside the open package**; they're source-available (free for development, testing, and evaluation). A **license key activates them in production**. Activation is verified locally with Ed25519; nothing about your usage ever leaves your machine.
|
|
8
12
|
|
|
9
13
|
**The flow, end to end:**
|
|
10
14
|
|
|
11
|
-
1. **Buy
|
|
12
|
-
2. **Install
|
|
15
|
+
1. **Buy.** Contact **[hey@reticle.sh](mailto:hey@reticle.sh)**; we issue you a signed license key (org, plan, expiry, feature set).
|
|
16
|
+
2. **Install.** Set it on the machine running the Reticle server:
|
|
13
17
|
```bash
|
|
14
18
|
export RETICLE_LICENSE_KEY="<your key>"
|
|
15
19
|
# the release already bakes the issuer public key (RETICLE_LICENSE_PUBLIC_KEY)
|
|
16
20
|
```
|
|
17
|
-
3. **Verify
|
|
21
|
+
3. **Verify.** `reticle license` shows your status:
|
|
18
22
|
```
|
|
19
23
|
active licensed to Acme Corp (enterprise), expires 2027-06-20 · features: sso, audit
|
|
20
|
-
eval evaluation mode
|
|
24
|
+
eval evaluation mode: enterprise features run free (no issuer key configured)
|
|
21
25
|
missing set RETICLE_LICENSE_KEY to activate enterprise features in production
|
|
22
26
|
expired renew to keep using enterprise features
|
|
23
27
|
```
|
|
24
|
-
4. **Unlock
|
|
25
|
-
5. **Renew
|
|
28
|
+
4. **Unlock.** Enterprise features now run in production; without a valid key they refuse to run there (a clear error, never a silent half-feature). In eval/dev they always run free.
|
|
29
|
+
5. **Renew.** Keys carry an expiry; `reticle license` warns before it lapses.
|
|
26
30
|
|
|
27
31
|
> Procuring a license: contact **[hey@reticle.sh](mailto:hey@reticle.sh)**. Keys are issued offline and signed with Ed25519; the activation you run (`reticle license`) verifies them locally with no network call.
|
|
28
32
|
|
|
29
33
|
## What's gated (and the roadmap)
|
|
30
34
|
|
|
31
|
-
The licensing **mechanism** is open core (inspectable, FSL)
|
|
35
|
+
The licensing **mechanism** is open core (inspectable, FSL). Only the **features** under `ee/` are gated:
|
|
32
36
|
|
|
33
37
|
- **Today:** the activation gate + an example gated feature (audit event recording).
|
|
34
38
|
- **Roadmap** (the reliably enterprise-only set): **SSO/SAML, SCIM, RBAC / team permissions, audit logs, multi-org management, verify-before-merge policy gates, and the hosted control-plane connectors.** These are the things a security/compliance org pays for; the core verification engine stays free forever.
|
|
35
39
|
|
|
36
|
-
> What's premium vs free, and pricing, are business decisions for the owner
|
|
40
|
+
> What's premium vs free, and pricing, are business decisions for the owner; this doc describes the _mechanism_, not the price list.
|
|
37
41
|
|
|
38
42
|
## Security & data handling
|
|
39
43
|
|
|
40
|
-
The honest one-pager a security review needs. Reticle is built so the answer to "where does our data go?" is **nowhere
|
|
44
|
+
The honest one-pager a security review needs. Reticle is built so the answer to "where does our data go?" is **nowhere. It runs on your machine, in your infra.**
|
|
41
45
|
|
|
42
46
|
| Question | Answer |
|
|
43
47
|
| --- | --- |
|
|
44
|
-
| Does the SDK ship to production? | **No
|
|
45
|
-
| Where does the server run? | **Localhost
|
|
46
|
-
| Does anything phone home? | **No app data, ever.** License checks are offline (Ed25519). The CLI sends anonymous, opt-out usage metrics only (random id + event names
|
|
48
|
+
| Does the SDK ship to production? | **No.** Dev/preview-only, tree-shaken from production builds. |
|
|
49
|
+
| Where does the server run? | **Localhost.** The bridge binds `127.0.0.1`; the verify endpoint is localhost-bound + token-guarded (constant-time), with request/body-size/timeout limits. |
|
|
50
|
+
| Does anything phone home? | **No app data, ever.** License checks are offline (Ed25519). The CLI sends anonymous, opt-out usage metrics only (random id + event names, no code, no PII; see [telemetry](telemetry.md)); disable fleet-wide with `RETICLE_TELEMETRY=0` or per-machine with `reticle telemetry disable`. Feedback your team explicitly sends us (`reticle feedback`) is the only free text that ever leaves; it is never collected passively, is redacted client-side, and is disabled fleet-wide with `RETICLE_FEEDBACK=0`. |
|
|
47
51
|
| Where do artifacts live? | Your disk: `.reticle/runs/<id>.json` (atomic writes, bounded retention), `.reticle/flows/`, `.reticle/contract.json`. You own them. |
|
|
48
|
-
| What can the server read? | The DOM/network/console/routing/state of the app under test
|
|
52
|
+
| What can the server read? | The DOM/network/console/routing/state of the app under test, locally. |
|
|
49
53
|
| Leak risk downstream? | The **`prod-preview` profile** redacts source `file:line`, raw bodies, and app-state values. |
|
|
50
54
|
| Path safety | Run/flow ids are validated as single path segments on read **and** write (no traversal). |
|
|
51
55
|
|
|
52
|
-
**Verify it yourself:** the SDK + server are source-available
|
|
56
|
+
**Verify it yourself:** the SDK + server are source-available, so read the tree-shaking, the `127.0.0.1` bind, and the offline license verify. `SECURITY.md` has the disclosure process; an SBOM is available on request. SOC 2 is a GA-stage item (no Reticle-hosted data exists today to certify); the posture above is the honest current state.
|
|
53
57
|
|
|
54
58
|
## Licensing model (per package)
|
|
55
59
|
|
package/docs/faq.mdx
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: FAQ: frequently asserted questions
|
|
3
|
+
sidebarTitle: FAQ
|
|
4
|
+
description: Does it run in production, does it need React, does it replace Playwright, and the other questions people actually ask.
|
|
5
|
+
icon: circle-question
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Does this run in production?
|
|
9
|
+
|
|
10
|
+
No, and it is built so that it cannot easily be made to. Keep `reticle.connect()` behind a dev guard; the SDK is side-effect-free and tree-shakes out of production builds. The Vite plugin uses `apply: 'serve'`, which means it is not part of a production build at all.
|
|
11
|
+
|
|
12
|
+
## Do I have to change my components?
|
|
13
|
+
|
|
14
|
+
No, for look, act and observe. You get DOM, network, console and routing with zero changes.
|
|
15
|
+
|
|
16
|
+
You get considerably better results by adding `data-testid` attributes and by [emitting signals](/instrumentation). That is the difference between a verdict that says "something appeared" and one that says "the app declared success".
|
|
17
|
+
|
|
18
|
+
## Does it work without React?
|
|
19
|
+
|
|
20
|
+
The core is framework-agnostic: DOM, network, routing, console, animations, snapshots and actions are gated against a vanilla TypeScript app.
|
|
21
|
+
|
|
22
|
+
Support beyond that is uneven, and we would rather say so than let you find out:
|
|
23
|
+
|
|
24
|
+
| Framework | Status |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| React, Next.js, Remix, Astro | Supported, each with an app and a CI gate |
|
|
27
|
+
| SvelteKit | Wired end to end. `init` writes the client hook, the plugin stamps `.svelte` source. But **no CI gate**, so unverified rather than supported |
|
|
28
|
+
| Vue | A Pinia store adapter and nothing else. No detection, no `.vue` stamping, no gate |
|
|
29
|
+
|
|
30
|
+
## Can it tell me whether my UI looks good?
|
|
31
|
+
|
|
32
|
+
No. Reticle verifies behaviour, not aesthetics. Visual correctness and "does this feel right" remain a human job, or a visual-diff tool's.
|
|
33
|
+
|
|
34
|
+
It does read design tokens. [`reticle_inspect`](/tools-inspect) reports whether a colour came from your theme or from someone's clipboard. But that is a consistency check, not taste.
|
|
35
|
+
|
|
36
|
+
## Does it replace Playwright or Cypress?
|
|
37
|
+
|
|
38
|
+
No. Those are your scripted CI suite. Reticle is for in-loop verification while an agent is coding, and for the flows you never got round to automating. They compose.
|
|
39
|
+
|
|
40
|
+
<Card title="The full comparison" icon="masks-theater" href="/vs-playwright-mcp">
|
|
41
|
+
Where Playwright is the right choice, stated plainly.
|
|
42
|
+
</Card>
|
|
43
|
+
|
|
44
|
+
## How does it compare to Playwright MCP or Chrome DevTools MCP?
|
|
45
|
+
|
|
46
|
+
Those drive a **separate** browser from the outside. Reticle verifies your **own running app** from the inside, with your real session and auth, and with assertions and regression as first-class.
|
|
47
|
+
|
|
48
|
+
Measured on the same app: Reticle caught 10 of 10 injected bugs, Playwright MCP 9, Chrome DevTools MCP 8. DevTools MCP is about 7% cheaper per look on a simple page, and more expensive on a real one.
|
|
49
|
+
|
|
50
|
+
## Can I run several apps or tabs at once?
|
|
51
|
+
|
|
52
|
+
Yes. Each is a session. Pass `sessionId` to any tool when more than one is connected, and [`reticle_sessions`](/tools-sessions) lists them.
|
|
53
|
+
|
|
54
|
+
Reticle scopes to your project and prefers the active tab, and it **refuses rather than guesses** when the choice is ambiguous. A refusal you can act on beats a silent pick of the wrong tab.
|
|
55
|
+
|
|
56
|
+
## Why did I get `verified: "unknown"` on something that clearly worked?
|
|
57
|
+
|
|
58
|
+
Because Reticle could not confirm it saw the whole story, and it will not call that a pass.
|
|
59
|
+
|
|
60
|
+
The most common cause is a **throttled tab**: a backgrounded browser tab has its timers suppressed, which suppresses the quiescence detection used to decide the page has settled. Focus the tab, or drive a dedicated context.
|
|
61
|
+
|
|
62
|
+
If you believe an `unknown` is wrong, report it. Reticle's own response says as much: "an unknown verdict is our defect, not yours".
|
|
63
|
+
|
|
64
|
+
## Does my data leave the machine?
|
|
65
|
+
|
|
66
|
+
Your app's data, no. Reticle is dev-only, localhost-only and offline. Credential-shaped values are redacted before they leave the page. You will see `[REDACTED]` in request bodies without configuring anything.
|
|
67
|
+
|
|
68
|
+
Anonymous usage telemetry is sent separately and can be turned off with `reticle telemetry disable`.
|
|
69
|
+
|
|
70
|
+
<Card title="Exactly what is collected" icon="chart-line" href="/telemetry">
|
|
71
|
+
The complete list. If it is not on that page, it is not sent.
|
|
72
|
+
</Card>
|
|
73
|
+
|
|
74
|
+
## Is Reticle proven to make agents fix more bugs?
|
|
75
|
+
|
|
76
|
+
No, and we are not going to claim it. A controlled test of fix-rate did **not** show an improvement. The benchmark was confounded in ways we can point at, and we consider the question open.
|
|
77
|
+
|
|
78
|
+
What is measured is detection: 10 of 10 injected regressions caught, with zero false alarms on a known-good control, against 9 and 8 for the alternatives.
|
|
79
|
+
|
|
80
|
+
## Why are there 48 tools but only 18 in my agent?
|
|
81
|
+
|
|
82
|
+
MCP re-sends every advertised tool definition on every turn, so the tool list is rent rather than a one-time cost. Measured: 18 tools is about 5,400 tokens per turn; all 48 is about 33,600.
|
|
83
|
+
|
|
84
|
+
The other 30 are one call away via `reticle_tools` and `reticle_run`.
|
|
85
|
+
|
|
86
|
+
<Card title="The surface, explained" icon="wrench" href="/tools-overview">
|
|
87
|
+
Which 18, and why each earned its slot.
|
|
88
|
+
</Card>
|
package/docs/fixtures.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
title: Fixture apps
|
|
3
|
+
description: 'Why the apps in apps/ cannot answer the one question that matters before a release, and what does.'
|
|
4
|
+
icon: cubes
|
|
5
|
+
---
|
|
2
6
|
|
|
3
|
-
The apps in `apps/` are ours. We chose their defects, so passing against them says less than it looks like
|
|
7
|
+
The apps in `apps/` are ours. We chose their defects, so passing against them says less than it looks like, and they are all wired to Reticle already, which makes them useless for the one question that matters before a release: **does the install still work on an app that has never seen Reticle?**
|
|
4
8
|
|
|
5
9
|
That question is answered in a separate repo: **[`reticle-fixtures`](https://github.com/reticlehq/reticle-fixtures)**.
|
|
6
10
|
|
|
@@ -9,7 +13,7 @@ That question is answered in a separate repo: **[`reticle-fixtures`](https://git
|
|
|
9
13
|
Three reasons, each of which bit us before the split:
|
|
10
14
|
|
|
11
15
|
- **They are somebody else's package managers.** `react-admin` is a yarn monorepo. Putting it under `apps/*` makes it a member of this pnpm workspace and breaks `pnpm install` for everyone.
|
|
12
|
-
- **They need a branch model this repo cannot give them.** A fresh install is only meaningful on a surface that has never been instrumented. Re-running `init` over an already-wired app reports `·` (already wired) for every step and proves nothing
|
|
16
|
+
- **They need a branch model this repo cannot give them.** A fresh install is only meaningful on a surface that has never been instrumented. Re-running `init` over an already-wired app reports `·` (already wired) for every step and proves nothing, which is exactly how an install regression ships unnoticed. `reticle-fixtures` keeps a pristine `clean` branch for that, plus `main` at the latest version and `reticle/<version>` per release.
|
|
13
17
|
- **They are large.** The upstream checkouts were eight gigabytes of somebody else's git history sitting gitignored inside this repo.
|
|
14
18
|
|
|
15
19
|
## What runs there
|
|
@@ -19,21 +23,21 @@ node scripts/materialise.mjs # build apps/ from fixtures.json at pinned refs
|
|
|
19
23
|
node scripts/verify.mjs # install into every clean app, boot it, assert a session connects
|
|
20
24
|
```
|
|
21
25
|
|
|
22
|
-
The last step is the one that earns its keep. Every install bug found so far has been silent: the app boots, the `init` report reads clean, and nothing connects. Next.js shipped in that state through a whole release
|
|
26
|
+
The last step is the one that earns its keep. Every install bug found so far has been silent: the app boots, the `init` report reads clean, and nothing connects. Next.js shipped in that state through a whole release: three independent defects, none visible to any check short of opening a browser and looking at `reticle status`.
|
|
23
27
|
|
|
24
28
|
## What stays here
|
|
25
29
|
|
|
26
|
-
`apps/`
|
|
30
|
+
`apps/` holds bench-app, next-smoke, the Remix and Astro examples, the Electron and Tauri smoke apps, atlas, and the API. These are the CI gates (`pnpm test:e2e`, `pnpm test:e2e:desktop`), and `integration-coverage.test.ts` fails if one of them goes missing while `SKILL.md` still offers its framework.
|
|
27
31
|
|
|
28
32
|
The split is: **`apps/` proves the tools work. `reticle-fixtures` proves the install works.**
|
|
29
33
|
|
|
30
34
|
## Wiring Tier 2 (not yet live)
|
|
31
35
|
|
|
32
|
-
CI can ask this repo to verify a Reticle commit automatically
|
|
36
|
+
CI can ask this repo to verify a Reticle commit automatically, in the [`vite-ecosystem-ci`](https://github.com/vitejs/vite-ecosystem-ci) shape, where a separate repo holds the downstream apps and the main repo asks it to run. The sending half is built (`fixtures-dispatch` in `.github/workflows/ci.yml`); the receiving half is a template at [`docs/fixtures-dispatch-receiver.yml`](./fixtures-dispatch-receiver.yml).
|
|
33
37
|
|
|
34
38
|
**It is inert until two things happen, and neither can be done from inside this repository:**
|
|
35
39
|
|
|
36
|
-
1. A fine-grained PAT with **Actions: write** on `reticlehq/reticle-fixtures`, added to `reticlehq/reticle` as the secret `FIXTURES_DISPATCH_TOKEN`. Until it exists the job logs that Tier 2 is unwired and exits 0
|
|
40
|
+
1. A fine-grained PAT with **Actions: write** on `reticlehq/reticle-fixtures`, added to `reticlehq/reticle` as the secret `FIXTURES_DISPATCH_TOKEN`. Until it exists the job logs that Tier 2 is unwired and exits 0. It never reddens CI, because a dispatch failure has nothing to do with the change being pushed.
|
|
37
41
|
2. The template copied into `reticle-fixtures` as `.github/workflows/verify-on-dispatch.yml`.
|
|
38
42
|
|
|
39
43
|
The template lives in the _sending_ repo deliberately: the two halves must agree on an event name and payload shape, and a contract whose ends live in different repositories drifts the first time somebody edits one of them.
|