@synapsor/runner 1.6.3 → 1.6.4

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.
Files changed (97) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +72 -8
  3. package/CONTRIBUTING.md +10 -3
  4. package/README.md +61 -93
  5. package/SECURITY.md +7 -3
  6. package/THREAT_MODEL.md +37 -0
  7. package/dist/authoring.mjs +98 -13
  8. package/dist/cli.d.ts +12 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/local-ui.d.ts +60 -0
  11. package/dist/local-ui.d.ts.map +1 -1
  12. package/dist/runner.mjs +7321 -2000
  13. package/dist/runtime.mjs +528 -51
  14. package/docs/README.md +14 -0
  15. package/docs/agent-guided-setup.md +7 -7
  16. package/docs/aggregate-reads.md +14 -5
  17. package/docs/app-owned-executors.md +5 -6
  18. package/docs/auto-boundary-and-scoped-explore.md +58 -6
  19. package/docs/capability-authoring.md +2 -2
  20. package/docs/client-recipes.md +1 -1
  21. package/docs/cloud-mode.md +7 -7
  22. package/docs/conformance.md +6 -3
  23. package/docs/current-scope.md +13 -2
  24. package/docs/cursor-plugin.md +3 -3
  25. package/docs/database-enforced-scope.md +6 -0
  26. package/docs/dsl-reference.md +12 -1
  27. package/docs/fresh-developer-usability.md +6 -6
  28. package/docs/getting-started-own-database.md +41 -41
  29. package/docs/guided-onboarding.md +98 -30
  30. package/docs/limitations.md +34 -14
  31. package/docs/local-mode.md +20 -20
  32. package/docs/mcp-audit.md +14 -14
  33. package/docs/mcp-client-setup.md +11 -14
  34. package/docs/mcp-clients.md +1 -1
  35. package/docs/migrating-to-synapsor-spec.md +5 -1
  36. package/docs/openai-agents-sdk.md +2 -2
  37. package/docs/proposal-evidence-freshness.md +7 -7
  38. package/docs/recipes.md +6 -6
  39. package/docs/release-notes.md +86 -10
  40. package/docs/release-policy.md +20 -7
  41. package/docs/reversible-change-sets.md +1 -1
  42. package/docs/reviewed-database-views.md +132 -0
  43. package/docs/reviewed-relationships.md +245 -0
  44. package/docs/rfcs/006-reviewed-reversible-change-sets.md +1 -1
  45. package/docs/runner-bundles.md +7 -7
  46. package/docs/schema-api-candidates.md +1 -1
  47. package/docs/security-boundary.md +30 -0
  48. package/docs/troubleshooting-first-run.md +52 -12
  49. package/docs/use-your-own-database.md +6 -4
  50. package/docs/workbench-ask.md +279 -0
  51. package/docs/writeback-executors.md +7 -7
  52. package/examples/auto-boundary-churn/README.md +1 -1
  53. package/examples/community-solar-clean-room/README.md +7 -0
  54. package/examples/community-solar-clean-room/docker-compose.yml +16 -0
  55. package/examples/community-solar-clean-room/package.json +15 -0
  56. package/examples/community-solar-clean-room/prisma/schema.prisma +171 -0
  57. package/examples/community-solar-clean-room/seed/postgres.sql +571 -0
  58. package/examples/fitflow-guided-onboarding/README.md +2 -2
  59. package/examples/openai-agents-http/Makefile +1 -1
  60. package/examples/openai-agents-http/README.md +1 -1
  61. package/examples/openai-agents-stdio/Makefile +1 -1
  62. package/examples/openai-agents-stdio/README.md +2 -2
  63. package/examples/openai-agents-stdio/agent.py +1 -4
  64. package/examples/reference-support-billing-app/README.md +16 -16
  65. package/examples/retail-clean-room/README.md +7 -0
  66. package/examples/retail-clean-room/docker-compose.yml +16 -0
  67. package/examples/retail-clean-room/package.json +9 -0
  68. package/examples/retail-clean-room/prisma/schema.prisma +239 -0
  69. package/examples/retail-clean-room/seed/postgres.sql +781 -0
  70. package/examples/retail-clean-room/view-recipe/average-retained-revenue.synapsor.sql +21 -0
  71. package/examples/retail-clean-room/view-recipe/synapsor.runner.json +25 -0
  72. package/examples/support-plan-credit/mcp-client-examples/claude-code.sh +1 -4
  73. package/examples/support-plan-credit/mcp-client-examples/claude-desktop.json +1 -4
  74. package/examples/support-plan-credit/mcp-client-examples/codex.config.toml +1 -4
  75. package/examples/support-plan-credit/mcp-client-examples/cursor-global.mcp.json +1 -4
  76. package/examples/support-plan-credit/mcp-client-examples/cursor-project.mcp.json +1 -4
  77. package/examples/support-plan-credit/mcp-client-examples/generic-stdio.json +1 -4
  78. package/examples/support-plan-credit/mcp-client-examples/generic-stdio.mjs +1 -1
  79. package/examples/support-plan-credit/mcp-client-examples/google-adk.py +1 -1
  80. package/examples/support-plan-credit/mcp-client-examples/langchain.mjs +1 -1
  81. package/examples/support-plan-credit/mcp-client-examples/llamaindex.py +1 -1
  82. package/examples/support-plan-credit/mcp-client-examples/openai-agents-stdio.ts +1 -1
  83. package/examples/support-plan-credit/mcp-client-examples/vscode.mcp.json +1 -4
  84. package/fixtures/compatibility/published-1.6.3/manifest.json +76 -0
  85. package/fixtures/compatibility/published-1.6.3/sources/packages/dsl/examples/aggregate-read.synapsor.sql +21 -0
  86. package/fixtures/compatibility/published-1.6.3/sources/packages/dsl/examples/billing-late-fee.synapsor.sql +56 -0
  87. package/fixtures/compatibility/published-1.6.3/sources/packages/dsl/examples/bounded-set-multi-term.synapsor.sql +30 -0
  88. package/fixtures/compatibility/published-1.6.3/sources/packages/dsl/examples/principal-row-scope.synapsor.sql +23 -0
  89. package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/aggregate-read/contract.json +119 -0
  90. package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/approval-quorum/contract.json +44 -0
  91. package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/bounded-set-threats/contract.json +115 -0
  92. package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/principal-row-scope/contract.json +78 -0
  93. package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/proposal-capability/contract.json +101 -0
  94. package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/reversible-change-sets/contract.json +98 -0
  95. package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/valid/basic-read.contract.json +60 -0
  96. package/llms.txt +10 -5
  97. package/package.json +8 -2
@@ -44,13 +44,13 @@ when you do not want to change your host Node version.
44
44
  Create a starter config without putting credentials in the file:
45
45
 
46
46
  ```bash
47
- npx -y -p @synapsor/runner synapsor-runner init --engine postgres --mode review
47
+ npx -y @synapsor/runner init --engine postgres --mode review
48
48
  ```
49
49
 
50
50
  For MySQL:
51
51
 
52
52
  ```bash
53
- npx -y -p @synapsor/runner synapsor-runner init --engine mysql --mode review --output synapsor.mysql.runner.json
53
+ npx -y @synapsor/runner init --engine mysql --mode review --output synapsor.mysql.runner.json
54
54
  ```
55
55
 
56
56
  The generated config uses environment-variable names for read/write URLs and trusted context. Edit the table, column, and capability names before serving tools.
@@ -63,8 +63,8 @@ persisted into proposals, evidence, query audit, runner state, or replay.
63
63
  For a reviewed own-database setup generated from explicit selections, use:
64
64
 
65
65
  ```bash
66
- npx -y -p @synapsor/runner synapsor-runner init --spec onboarding-selection.json --non-interactive
67
- npx -y -p @synapsor/runner synapsor-runner doctor --config synapsor.runner.json
66
+ npx -y @synapsor/runner init --spec onboarding-selection.json --non-interactive
67
+ npx -y @synapsor/runner doctor --config synapsor.runner.json
68
68
  ```
69
69
 
70
70
  `doctor --config` checks config validation, required environment variables,
@@ -76,7 +76,7 @@ and the semantic MCP tool boundary without printing credential values.
76
76
  Use stdio for local MCP clients that launch Synapsor Runner:
77
77
 
78
78
  ```bash
79
- npx -y -p @synapsor/runner synapsor-runner mcp serve \
79
+ npx -y @synapsor/runner mcp serve \
80
80
  --config ./synapsor.runner.json \
81
81
  --store ./.synapsor/local.db
82
82
  ```
@@ -87,7 +87,7 @@ MCP client:
87
87
  ```bash
88
88
  export SYNAPSOR_RUNNER_HTTP_TOKEN="$(node -e 'process.stdout.write(require("node:crypto").randomBytes(32).toString("base64url"))')"
89
89
 
90
- npx -y -p @synapsor/runner synapsor-runner mcp serve-streamable-http \
90
+ npx -y @synapsor/runner mcp serve-streamable-http \
91
91
  --config ./synapsor.runner.json \
92
92
  --store ./.synapsor/local.db \
93
93
  --auth-token-env SYNAPSOR_RUNNER_HTTP_TOKEN
@@ -131,19 +131,19 @@ If neither is set, the CLI uses:
131
131
  List proposals:
132
132
 
133
133
  ```bash
134
- npx -y -p @synapsor/runner synapsor-runner proposals list --store ./.synapsor/local.db
134
+ npx -y @synapsor/runner proposals list --store ./.synapsor/local.db
135
135
  ```
136
136
 
137
137
  Show a proposal:
138
138
 
139
139
  ```bash
140
- npx -y -p @synapsor/runner synapsor-runner proposals show wrp_123 --store ./.synapsor/local.db
140
+ npx -y @synapsor/runner proposals show wrp_123 --store ./.synapsor/local.db
141
141
  ```
142
142
 
143
143
  Check a freshness-enabled proposal without copying its id:
144
144
 
145
145
  ```bash
146
- npx -y -p @synapsor/runner synapsor-runner proposals check-freshness latest \
146
+ npx -y @synapsor/runner proposals check-freshness latest \
147
147
  --config ./synapsor.runner.json \
148
148
  --store ./.synapsor/local.db
149
149
  ```
@@ -151,7 +151,7 @@ npx -y -p @synapsor/runner synapsor-runner proposals check-freshness latest \
151
151
  Approve:
152
152
 
153
153
  ```bash
154
- npx -y -p @synapsor/runner synapsor-runner proposals approve wrp_123 \
154
+ npx -y @synapsor/runner proposals approve wrp_123 \
155
155
  --config ./synapsor.runner.json \
156
156
  --store ./.synapsor/local.db \
157
157
  --actor local_reviewer \
@@ -177,7 +177,7 @@ revalidates again because source data can change after approval. See
177
177
  Create a guarded writeback job from an approved proposal:
178
178
 
179
179
  ```bash
180
- npx -y -p @synapsor/runner synapsor-runner proposals writeback-job wrp_123 \
180
+ npx -y @synapsor/runner proposals writeback-job wrp_123 \
181
181
  --store ./.synapsor/local.db \
182
182
  --project local \
183
183
  --runner local_runner \
@@ -189,7 +189,7 @@ The generated job uses the public `synapsor.writeback-job.v1` protocol and can b
189
189
  ```bash
190
190
  export SYNAPSOR_DATABASE_WRITE_URL="postgresql://writer:<password>@localhost:5432/app"
191
191
  SYNAPSOR_ENGINE=postgres \
192
- npx -y -p @synapsor/runner synapsor-runner apply --job job.json --config synapsor.runner.json --store ./.synapsor/local.db
192
+ npx -y @synapsor/runner apply --job job.json --config synapsor.runner.json --store ./.synapsor/local.db
193
193
  ```
194
194
 
195
195
  When `--config` is passed, direct SQL writeback reads the writer connection from
@@ -201,7 +201,7 @@ Passing `--store` records the terminal `synapsor.execution-receipt.v1` locally.
201
201
  Reject:
202
202
 
203
203
  ```bash
204
- npx -y -p @synapsor/runner synapsor-runner proposals reject wrp_123 \
204
+ npx -y @synapsor/runner proposals reject wrp_123 \
205
205
  --store ./.synapsor/local.db \
206
206
  --reason "policy evidence is incomplete" \
207
207
  --yes
@@ -222,7 +222,7 @@ pilot, use [Shadow Studies](shadow-studies.md).
222
222
  Start a localhost-only review UI:
223
223
 
224
224
  ```bash
225
- npx -y -p @synapsor/runner synapsor-runner ui --config synapsor.runner.json --store ./.synapsor/local.db
225
+ npx -y @synapsor/runner ui --config synapsor.runner.json --store ./.synapsor/local.db
226
226
  ```
227
227
 
228
228
  The UI shows setup summary, semantic tools, proposal states, exact diffs,
@@ -240,20 +240,20 @@ tools, MCP commit tools, or controls that widen configured tables/columns.
240
240
  Show replay:
241
241
 
242
242
  ```bash
243
- npx -y -p @synapsor/runner synapsor-runner replay show wrp_123 --store ./.synapsor/local.db
244
- npx -y -p @synapsor/runner synapsor-runner replay show --proposal wrp_123 --store ./.synapsor/local.db
245
- npx -y -p @synapsor/runner synapsor-runner replay show --replay replay_wrp_123 --store ./.synapsor/local.db
246
- npx -y -p @synapsor/runner synapsor-runner replay show --evidence ev_123 --store ./.synapsor/local.db
243
+ npx -y @synapsor/runner replay show wrp_123 --store ./.synapsor/local.db
244
+ npx -y @synapsor/runner replay show --proposal wrp_123 --store ./.synapsor/local.db
245
+ npx -y @synapsor/runner replay show --replay replay_wrp_123 --store ./.synapsor/local.db
246
+ npx -y @synapsor/runner replay show --evidence ev_123 --store ./.synapsor/local.db
247
247
  ```
248
248
 
249
249
  Export replay:
250
250
 
251
251
  ```bash
252
- npx -y -p @synapsor/runner synapsor-runner replay export wrp_123 \
252
+ npx -y @synapsor/runner replay export wrp_123 \
253
253
  --store ./.synapsor/local.db \
254
254
  --output replay.json
255
255
 
256
- npx -y -p @synapsor/runner synapsor-runner replay export --proposal wrp_123 \
256
+ npx -y @synapsor/runner replay export --proposal wrp_123 \
257
257
  --format markdown \
258
258
  --store ./.synapsor/local.db \
259
259
  --output replay.md
package/docs/mcp-audit.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MCP database risk review
2
2
 
3
- `npx -y -p @synapsor/runner synapsor-runner audit <target>` performs a
3
+ `npx -y @synapsor/runner audit <target>` performs a
4
4
  static MCP database risk review over an exported tool manifest, a remote MCP
5
5
  `tools/list` endpoint, or a stdio MCP server. The `mcp audit` subcommand is also
6
6
  available for users who look for the command under the MCP namespace.
@@ -26,7 +26,7 @@ MCP annotations are treated as hints, not enforcement.
26
26
  Built-in database MCP risk example:
27
27
 
28
28
  ```bash
29
- npx -y -p @synapsor/runner synapsor-runner audit --example dangerous-db-mcp
29
+ npx -y @synapsor/runner audit --example dangerous-db-mcp
30
30
  ```
31
31
 
32
32
  This bundled example does not require a source checkout or local examples file.
@@ -37,7 +37,7 @@ table/column inputs, and model-controlled tenant/principal fields.
37
37
  Human-readable output:
38
38
 
39
39
  ```bash
40
- npx -y -p @synapsor/runner synapsor-runner audit ./tools-list.json
40
+ npx -y @synapsor/runner audit ./tools-list.json
41
41
  ```
42
42
 
43
43
  The default terminal report groups repeated findings into the three most
@@ -46,32 +46,32 @@ and one next action instead of repeating the same explanation for every tool.
46
46
  Use the complete view when triaging every finding:
47
47
 
48
48
  ```bash
49
- npx -y -p @synapsor/runner synapsor-runner audit ./tools-list.json --verbose
49
+ npx -y @synapsor/runner audit ./tools-list.json --verbose
50
50
  ```
51
51
 
52
52
  Remote `tools/list` endpoint with a bearer token kept in the environment:
53
53
 
54
54
  ```bash
55
55
  SYNAPSOR_MCP_AUDIT_BEARER="..." \
56
- npx -y -p @synapsor/runner synapsor-runner audit https://mcp.example.com --format json
56
+ npx -y @synapsor/runner audit https://mcp.example.com --format json
57
57
  ```
58
58
 
59
59
  Remote endpoint with a custom bearer-token environment variable:
60
60
 
61
61
  ```bash
62
- npx -y -p @synapsor/runner synapsor-runner audit https://mcp.example.com --bearer-env MCP_AUDIT_TOKEN --format json
62
+ npx -y @synapsor/runner audit https://mcp.example.com --bearer-env MCP_AUDIT_TOKEN --format json
63
63
  ```
64
64
 
65
65
  Stdio MCP server:
66
66
 
67
67
  ```bash
68
- npx -y -p @synapsor/runner synapsor-runner audit 'stdio:node ./server.mjs' --timeout-ms 5000
68
+ npx -y @synapsor/runner audit 'stdio:node ./server.mjs' --timeout-ms 5000
69
69
  ```
70
70
 
71
71
  JSON output:
72
72
 
73
73
  ```bash
74
- npx -y -p @synapsor/runner synapsor-runner audit ./tools-list.json --format json
74
+ npx -y @synapsor/runner audit ./tools-list.json --format json
75
75
  ```
76
76
 
77
77
  The JSON contract remains `synapsor.mcp-audit.v1`; its published schema is
@@ -80,19 +80,19 @@ The JSON contract remains `synapsor.mcp-audit.v1`; its published schema is
80
80
  SARIF 2.1.0 output for code-scanning ingestion:
81
81
 
82
82
  ```bash
83
- npx -y -p @synapsor/runner synapsor-runner audit ./tools-list.json --format sarif > mcp-audit.sarif
83
+ npx -y @synapsor/runner audit ./tools-list.json --format sarif > mcp-audit.sarif
84
84
  ```
85
85
 
86
86
  Markdown output for issues, PRs, or security review notes:
87
87
 
88
88
  ```bash
89
- npx -y -p @synapsor/runner synapsor-runner audit --example dangerous-db-mcp --format markdown
89
+ npx -y @synapsor/runner audit --example dangerous-db-mcp --format markdown
90
90
  ```
91
91
 
92
92
  Inspect a project-scoped Cursor configuration without launching anything:
93
93
 
94
94
  ```bash
95
- npx -y -p @synapsor/runner synapsor-runner audit \
95
+ npx -y @synapsor/runner audit \
96
96
  --mcp-config ./.cursor/mcp.json \
97
97
  --format markdown
98
98
  ```
@@ -102,7 +102,7 @@ as `requires_operator_verification`. To query one reviewed stdio command, name
102
102
  that exact server and give explicit consent:
103
103
 
104
104
  ```bash
105
- npx -y -p @synapsor/runner synapsor-runner audit \
105
+ npx -y @synapsor/runner audit \
106
106
  --mcp-config ./.cursor/mcp.json \
107
107
  --live-server synapsor \
108
108
  --yes \
@@ -132,7 +132,7 @@ Audit can create a separate review directory without editing or activating the
132
132
  source configuration:
133
133
 
134
134
  ```bash
135
- npx -y -p @synapsor/runner synapsor-runner audit generate \
135
+ npx -y @synapsor/runner audit generate \
136
136
  ./tools-list.json \
137
137
  --output ./synapsor-audit-candidates
138
138
  ```
@@ -141,7 +141,7 @@ Open the same blocked candidate directly in the secured local review
141
141
  workbench:
142
142
 
143
143
  ```bash
144
- npx -y -p @synapsor/runner synapsor-runner audit generate \
144
+ npx -y @synapsor/runner audit generate \
145
145
  ./tools-list.json \
146
146
  --output ./synapsor-audit-candidates \
147
147
  --open-ui
@@ -57,7 +57,7 @@ provisions the same environment value to Runner and the authorized client:
57
57
  ```bash
58
58
  export SYNAPSOR_RUNNER_HTTP_TOKEN="$(node -e 'process.stdout.write(require("node:crypto").randomBytes(32).toString("base64url"))')"
59
59
 
60
- npx -y -p @synapsor/runner synapsor-runner mcp serve-streamable-http \
60
+ npx -y @synapsor/runner mcp serve-streamable-http \
61
61
  --config ./synapsor.runner.json \
62
62
  --store ./.synapsor/local.db \
63
63
  --auth-token-env SYNAPSOR_RUNNER_HTTP_TOKEN
@@ -69,7 +69,7 @@ OpenAI-safe aliases while keeping canonical Synapsor capability names in MCP
69
69
  metadata:
70
70
 
71
71
  ```bash
72
- npx -y -p @synapsor/runner synapsor-runner mcp serve-streamable-http \
72
+ npx -y @synapsor/runner mcp serve-streamable-http \
73
73
  --config ./synapsor.runner.json \
74
74
  --store ./.synapsor/local.db \
75
75
  --auth-token-env SYNAPSOR_RUNNER_HTTP_TOKEN \
@@ -85,7 +85,7 @@ same time.
85
85
  Preview the exact alias mapping before wiring a client:
86
86
 
87
87
  ```bash
88
- npx -y -p @synapsor/runner synapsor-runner tools preview \
88
+ npx -y @synapsor/runner tools preview \
89
89
  --config ./synapsor.runner.json \
90
90
  --store ./.synapsor/local.db \
91
91
  --alias-mode openai
@@ -101,7 +101,7 @@ with tenant/principal bound from verified claims. Details: [HTTP MCP](http-mcp.m
101
101
  Print a snippet without modifying any client files:
102
102
 
103
103
  ```bash
104
- npx -y -p @synapsor/runner synapsor-runner mcp config claude-desktop \
104
+ npx -y @synapsor/runner mcp config claude-desktop \
105
105
  --config ./synapsor.runner.json \
106
106
  --store ./.synapsor/local.db
107
107
  ```
@@ -121,7 +121,7 @@ For OpenAI Agents SDK, generate the Streamable HTTP start command and Python
121
121
  snippet:
122
122
 
123
123
  ```bash
124
- npx -y -p @synapsor/runner synapsor-runner mcp client-config \
124
+ npx -y @synapsor/runner mcp client-config \
125
125
  --client openai-agents \
126
126
  --config ./synapsor.runner.json \
127
127
  --store ./.synapsor/local.db
@@ -130,13 +130,13 @@ npx -y -p @synapsor/runner synapsor-runner mcp client-config \
130
130
  The older form is still supported:
131
131
 
132
132
  ```bash
133
- npx -y -p @synapsor/runner synapsor-runner mcp configure --client claude-desktop --config ./synapsor.runner.json --store ./.synapsor/local.db
133
+ npx -y @synapsor/runner mcp configure --client claude-desktop --config ./synapsor.runner.json --store ./.synapsor/local.db
134
134
  ```
135
135
 
136
136
  Write is opt-in and requires an explicit destination:
137
137
 
138
138
  ```bash
139
- npx -y -p @synapsor/runner synapsor-runner mcp configure \
139
+ npx -y @synapsor/runner mcp configure \
140
140
  --client cursor \
141
141
  --config ./synapsor.runner.json \
142
142
  --store ./.synapsor/local.db \
@@ -162,7 +162,7 @@ standalone local UI or terminal for human review.
162
162
  From the runner repository:
163
163
 
164
164
  ```bash
165
- npx -y -p @synapsor/runner synapsor-runner mcp serve --config ./examples/mcp-postgres-billing/synapsor.runner.json --store ./.synapsor/local.db
165
+ npx -y @synapsor/runner mcp serve --config ./examples/mcp-postgres-billing/synapsor.runner.json --store ./.synapsor/local.db
166
166
  ```
167
167
 
168
168
  For reproducible deployments, pin an exact stable version in package manifests
@@ -172,7 +172,7 @@ the current `latest` release.
172
172
  For standard app/server HTTP MCP mode:
173
173
 
174
174
  ```bash
175
- npx -y -p @synapsor/runner synapsor-runner mcp serve-streamable-http \
175
+ npx -y @synapsor/runner mcp serve-streamable-http \
176
176
  --config ./examples/mcp-postgres-billing/synapsor.runner.json \
177
177
  --store ./.synapsor/local.db \
178
178
  --auth-token-env SYNAPSOR_RUNNER_HTTP_TOKEN
@@ -190,10 +190,7 @@ sessions, so do not use it for a shared identity deployment.
190
190
  "synapsor-runner": {
191
191
  "command": "npx",
192
192
  "args": [
193
- "-y",
194
- "-p",
195
- "@synapsor/runner",
196
- "synapsor-runner",
193
+ "-y", "@synapsor/runner",
197
194
  "mcp",
198
195
  "serve",
199
196
  "--config",
@@ -235,7 +232,7 @@ small tool-call test.
235
232
  First confirm what Runner exposes:
236
233
 
237
234
  ```bash
238
- npx -y -p @synapsor/runner synapsor-runner tools preview \
235
+ npx -y @synapsor/runner tools preview \
239
236
  --config ./synapsor.runner.json \
240
237
  --store ./.synapsor/local.db
241
238
  ```
@@ -39,7 +39,7 @@ Use stdio for Claude Desktop, Cursor, and other local MCP clients:
39
39
  {
40
40
  "command": "npx",
41
41
  "args": [
42
- "-y", "-p", "@synapsor/runner", "synapsor-runner",
42
+ "-y", "@synapsor/runner",
43
43
  "mcp", "serve", "--config", "./synapsor.runner.json",
44
44
  "--store", "./.synapsor/local.db"
45
45
  ]
@@ -150,11 +150,15 @@ use Runner/spec/DSL 1.1 together. Omitted fields preserve 1.0 behavior.
150
150
 
151
151
  ## 1.6 Generated Authority And Supervised Execution
152
152
 
153
- Runner 1.6.3, Spec 1.6.0, and DSL 1.6.0 are additive. Existing hand-authored
153
+ Runner 1.6.4, Spec 1.7.0, and DSL 1.7.0 are additive. Existing hand-authored
154
154
  DSL/JSON/config projects do not need Auto Boundary, Workbench, a generation
155
155
  lock, schema rescanning, or supervised execution. Contracts that omit the new
156
156
  fields retain their previous canonical normalization and digest.
157
157
 
158
+ Spec/DSL 1.7.0 add optional reviewed relationship-path fields and `LINK`
159
+ syntax. The legacy one-hop relationship form remains accepted and canonical;
160
+ an unchanged legacy contract retains its exact normalized bytes and digest.
161
+
158
162
  Auto Boundary writes a generation lock only for authority it generated.
159
163
  Drift enforcement applies only when `synapsor.runner.json` explicitly
160
164
  references that lock under `generated_authority`; manually authored projects
@@ -10,7 +10,7 @@ surface.
10
10
  ```bash
11
11
  export SYNAPSOR_RUNNER_HTTP_TOKEN="$(node -e 'process.stdout.write(require("node:crypto").randomBytes(32).toString("base64url"))')"
12
12
 
13
- npx -y -p @synapsor/runner synapsor-runner mcp serve-streamable-http \
13
+ npx -y @synapsor/runner mcp serve-streamable-http \
14
14
  --config ./synapsor.runner.json \
15
15
  --store ./.synapsor/local.db \
16
16
  --auth-token-env SYNAPSOR_RUNNER_HTTP_TOKEN \
@@ -30,7 +30,7 @@ model and maps calls back to canonical Synapsor capability names such as
30
30
  ## Generate The Snippet
31
31
 
32
32
  ```bash
33
- npx -y -p @synapsor/runner synapsor-runner mcp client-config \
33
+ npx -y @synapsor/runner mcp client-config \
34
34
  --client openai-agents \
35
35
  --config ./synapsor.runner.json \
36
36
  --store ./.synapsor/local.db \
@@ -1,6 +1,6 @@
1
1
  # Proposal And Evidence Freshness
2
2
 
3
- Runner 1.6.1 adds an optional fail-closed freshness gate for proposals whose
3
+ Runner provides an optional fail-closed freshness gate for proposals whose
4
4
  review depends on live source state.
5
5
 
6
6
  This closes two different review gaps without changing the model-facing MCP
@@ -11,8 +11,8 @@ surface:
11
11
  2. A proposal can declare reviewed supporting rows whose exact versions must
12
12
  still match before approval and again at apply.
13
13
 
14
- Target-row drift was already blocked by the exact conflict guard at apply.
15
- Version 1.6.1 does not replace that protection. It adds an earlier review-time
14
+ Target-row drift is also blocked by the exact conflict guard at apply.
15
+ Freshness does not replace that protection. It adds an earlier review-time
16
16
  check and extends the final transaction to declared same-source dependencies.
17
17
 
18
18
  ## What Freshness Does And Does Not Mean
@@ -36,10 +36,10 @@ new source read and create a new proposal with a new hash and review.
36
36
 
37
37
  ## Configuration
38
38
 
39
- Freshness is a Runner deployment overlay in `synapsor.runner.json`. Version
40
- 1.6.1 adds no DSL clause and no canonical Spec field. Existing hand-authored
41
- DSL, canonical JSON, contract digests, and `tools/list` output remain unchanged
42
- when this optional section is absent.
39
+ Freshness is a Runner deployment overlay in `synapsor.runner.json`. It adds no
40
+ DSL clause and no canonical Spec field. Existing hand-authored DSL, canonical
41
+ JSON, contract digests, and `tools/list` output remain unchanged when this
42
+ optional section is absent.
43
43
 
44
44
  ```json
45
45
  {
package/docs/recipes.md CHANGED
@@ -9,20 +9,20 @@ tenant key, conflict column, and business limits.
9
9
  List recipes:
10
10
 
11
11
  ```bash
12
- npx -y -p @synapsor/runner synapsor-runner recipes list
12
+ npx -y @synapsor/runner recipes list
13
13
  ```
14
14
 
15
15
  Inspect one:
16
16
 
17
17
  ```bash
18
- npx -y -p @synapsor/runner synapsor-runner recipes show billing.late_fee_waiver
18
+ npx -y @synapsor/runner recipes show billing.late_fee_waiver
19
19
  ```
20
20
 
21
21
  Initialize a starter config:
22
22
 
23
23
  ```bash
24
- npx -y -p @synapsor/runner synapsor-runner recipes init billing.late_fee_waiver --output synapsor.runner.json
25
- npx -y -p @synapsor/runner synapsor-runner config validate --config synapsor.runner.json
24
+ npx -y @synapsor/runner recipes init billing.late_fee_waiver --output synapsor.runner.json
25
+ npx -y @synapsor/runner config validate --config synapsor.runner.json
26
26
  ```
27
27
 
28
28
  Built-in recipes are JSON files under `recipes/`. They are starter data, not
@@ -31,8 +31,8 @@ domain, and initialize from your file:
31
31
 
32
32
  ```bash
33
33
  cp recipes/billing.late_fee_waiver.json my-recipe.json
34
- npx -y -p @synapsor/runner synapsor-runner recipes show ./my-recipe.json
35
- npx -y -p @synapsor/runner synapsor-runner recipes init ./my-recipe.json --output synapsor.runner.json
34
+ npx -y @synapsor/runner recipes show ./my-recipe.json
35
+ npx -y @synapsor/runner recipes init ./my-recipe.json --output synapsor.runner.json
36
36
  ```
37
37
 
38
38
  Available recipes:
@@ -4,18 +4,97 @@ These notes track public Synapsor Runner behavior. Starting with `1.0.0`, the
4
4
  documented production-loop compatibility line uses the untagged stable package:
5
5
 
6
6
  ```bash
7
- npx -y -p @synapsor/runner synapsor-runner demo --quick
7
+ npx -y @synapsor/runner demo --quick
8
8
  ```
9
9
 
10
10
  The OSS runner command is `synapsor-runner`. The `synapsor` command is reserved
11
11
  for the Synapsor Cloud CLI.
12
12
 
13
- ## 1.6.3 (prepared, not published)
13
+ ## 1.6.4 (prepared, not published)
14
+
15
+ ### Review-correct onboarding and reviewed relationship paths
16
+
17
+ - Generated-boundary review now uses dependency-scoped invalidation and stale
18
+ revision checks. Editing one resource does not erase unrelated human
19
+ decisions, while stale browser state cannot overwrite a newer review.
20
+ - Workbench starts with a small useful resource pack, explains current agent
21
+ authority and source-change status in plain language, keeps advanced
22
+ permissions behind progressive disclosure, and preserves one recommended
23
+ next action. Project resume and nested config discovery retain existing work.
24
+ - A fresh `npx -y @synapsor/runner start` can accept the database URL through a
25
+ hidden terminal prompt, or load only a selected `DATABASE_URL` from an
26
+ explicitly confirmed local environment file. In the conservative local
27
+ development fast lane, at most two plain questions and one recorded
28
+ digest-bound human gesture lead to a real read without exporting the URL,
29
+ editing generated files, or weakening staging/production review.
30
+ - Deterministic classification is more conservative across unfamiliar domains.
31
+ Database, Prisma, Drizzle, OpenAPI, and existing Synapsor evidence can improve
32
+ names and structure but cannot grant authority or resolve ambiguous trusted
33
+ scope.
34
+ - Protected aggregate reads may contain up to three activated reviewed
35
+ relationship paths. Each path has one or two catalog-proven many-to-one
36
+ links with fan-out one. The model can select an activated path by name but
37
+ cannot provide a table, key, join type, or activation decision.
38
+ - A question needing an inactive proven path fails closed and stages that exact
39
+ path for operator review. Optional links require an explicit missing-row
40
+ choice because excluding versus retaining an unmatched counted row can change
41
+ totals. The reviewed choice and structural proof are digest-bound.
42
+ - Scope is enforced independently on every relation. Cohort suppression runs
43
+ after final grouping. One-to-many, many-to-many, ambiguous, stale, over-depth,
44
+ and model-improvised joins remain refused; complex formulas and relationship
45
+ graphs use reviewed database views.
46
+ - Packed Community Solar and Retail clean-room journeys and live
47
+ PostgreSQL/MySQL relationship gates cover unfamiliar-domain onboarding,
48
+ PM-style analysis, demand-driven review, nullable semantics, drift,
49
+ suppression, scope, and deliberate fan-out rejection.
50
+ - Workbench now offers an optional local **Ask with your model** client over the
51
+ exact active MCP/runtime tools. OpenAI, Anthropic, and custom
52
+ OpenAI-compatible adapters use explicit digest-bound direct-egress consent,
53
+ in-memory credentials/history, bounded tool loops, escaped provider prose,
54
+ and proposal-only writes. The no-model composer remains the default.
55
+ - Remote provider requests use fixed official origins or an operator-selected
56
+ HTTPS custom origin, refuse redirects, validate and pin DNS on every
57
+ connection, block private/special/metadata targets, redact errors, and
58
+ support Node 22's multi-address lookup contract. Plain HTTP remains
59
+ loopback-only.
60
+ - Both packed clean-room domains now pass the real Ask UI. The Retail journey
61
+ shows a kept-out-field refusal; Community Solar shows a source-unchanged
62
+ proposal. An owner-authorized live OpenAI `gpt-5-mini` acceptance run used
63
+ the same official-MCP path, matched its aggregate result, and passed exact-key
64
+ project/ledger/browser/output/evidence scans. Anthropic and generic
65
+ compatible claims are limited to the documented tested protocol matrix.
66
+ - Human-facing commands now use the shortest true form: direct `npx` for first
67
+ acquisition and `synapsor-runner <command>` after installation. The optional
68
+ unscoped `synapsor-runner` npm package contains no runtime or authority logic;
69
+ it delegates to the exact matching scoped Runner version. Existing explicit
70
+ package, pinned, CI, and machine-readable invocations remain compatible.
71
+ - Generated DSL previews use one local, escaped, copy-exact syntax highlighter
72
+ in light and dark themes with no CDN or unsafe HTML fallback. Activity and
73
+ human review details use the full Workbench width instead of a compressed
74
+ side column, including mobile layouts.
75
+ - Existing hand-authored and published `1.6.3` projects do not need the new
76
+ relationship fields, generation review, or Workbench. Legacy contracts keep
77
+ their exact normalized bytes/digests and existing tool lists remain
78
+ unchanged unless the feature is adopted.
79
+
80
+ Prepared package versions: `@synapsor/runner@1.6.4`,
81
+ `@synapsor/spec@1.7.0`, `@synapsor/dsl@1.7.0`, and the optional
82
+ `synapsor-runner@1.6.4` command alias.
83
+ No package is published by this change.
84
+
85
+ Publish Spec first, then DSL, then the scoped Runner, and finally its exact
86
+ version command alias. Force the final registry-only Runner dependency check
87
+ with
88
+ `VERIFY_PACKED_RUNNER_USE_LOCAL_SPEC=0 ./scripts/verify-packed-runner.sh` after
89
+ Spec 1.7.0 is visible on npm, and verify the alias only after
90
+ `@synapsor/runner@1.6.4` is visible.
91
+
92
+ ## 1.6.3 (published 2026-07-24)
14
93
 
15
94
  ### Guided adoption without weaker authority
16
95
 
17
96
  - A fresh interactive
18
- `npx -y @synapsor/runner@latest start --from-env DATABASE_URL` now drives one
97
+ `npx -y @synapsor/runner start --from-env DATABASE_URL` now drives one
19
98
  resumable metadata-inspection, review-by-exception, exact-digest activation,
20
99
  first safe read, and MCP setup journey. It requires no account, model key,
21
100
  Cloud control plane, global install, or manual project files.
@@ -65,14 +144,11 @@ for the Synapsor Cloud CLI.
65
144
  advance to `1.6.0` while preserving old contract normalization, digests, and
66
145
  generated-lock support.
67
146
 
68
- Prepared package versions: `@synapsor/runner@1.6.3`,
147
+ Published package versions: `@synapsor/runner@1.6.3`,
69
148
  `@synapsor/spec@1.6.0`, and `@synapsor/dsl@1.6.0`.
70
- No package is published by this change.
71
149
 
72
- The pre-release clean-install gate uses the locally packed public Spec until
73
- Spec 1.6.0 is on npm. After publishing Spec first, force the registry-only
74
- Runner dependency check with
75
- `VERIFY_PACKED_RUNNER_USE_LOCAL_SPEC=0 ./scripts/verify-packed-runner.sh`.
150
+ The pre-release clean-install gate used the locally packed public Spec until
151
+ Spec 1.6.0 reached npm, then returned to the registry-only dependency proof.
76
152
 
77
153
  ## 1.6.2 (published 2026-07-23)
78
154
 
@@ -705,7 +781,7 @@ not change and must not be republished for this release.
705
781
  ### Public npm DX
706
782
 
707
783
  - Prepares the spec-ready Runner package for the normal untagged npm path so
708
- developers can use `npx -y -p @synapsor/runner synapsor-runner ...` without
784
+ developers can use `npx -y @synapsor/runner ...` without
709
785
  knowing about the temporary `next` release-candidate tag.
710
786
  - Keeps the same contract/spec functionality as `0.1.2`; this is a release
711
787
  hygiene patch for public install and README/package-page verification.
@@ -7,7 +7,7 @@ shared runtime-store deployment are part of the documented compatibility
7
7
  surface. Use the stable package for normal installs:
8
8
 
9
9
  ```bash
10
- npx -y -p @synapsor/runner synapsor-runner demo --quick
10
+ npx -y @synapsor/runner demo --quick
11
11
  npm install -g @synapsor/runner
12
12
  ```
13
13
 
@@ -38,9 +38,10 @@ Alpha releases must keep the safety boundary intact:
38
38
  - no generic model-generated INSERT/DELETE/UPSERT/DDL/multi-row SQL;
39
39
  - proposal-first write path stays explicit.
40
40
 
41
- ## Stable Expectations
41
+ ## Stable Release Expectations
42
42
 
43
- A stable `0.1.0` release should only be tagged after:
43
+ Every stable release must preserve the safety boundary and should be tagged
44
+ only after:
44
45
 
45
46
  - npm README commands match the published package;
46
47
  - `synapsor-runner demo --quick` works from a clean directory;
@@ -62,7 +63,7 @@ A stable `0.1.0` release should only be tagged after:
62
63
  - there are no known docs/code mismatches around transport, credentials,
63
64
  receipt tables, or handler expectations.
64
65
 
65
- ## 1.0 Stability Gate
66
+ ## Historical 1.0 Stability Gate
66
67
 
67
68
  Do not tag `1.0.0` only because the package is useful. `1.0.0` is the public
68
69
  semver contract for the Runner production approval loop, and it should be cut
@@ -89,7 +90,7 @@ versioning. Breaking changes require a new major version, except for security
89
90
  fixes that close a vulnerability while preserving the safest possible
90
91
  compatibility path.
91
92
 
92
- ## 1.1 Fleet Gate
93
+ ## Historical 1.1 Fleet Gate
93
94
 
94
95
  Do not publish `1.1.0` until all 1.0 gates remain green and the local synthetic
95
96
  fleet verifier proves:
@@ -167,15 +168,27 @@ Before publishing any release:
167
168
  ./scripts/verify-release-gate.sh
168
169
  ```
169
170
 
171
+ For a coordinated Spec/DSL/Runner release, publish in dependency order:
172
+
173
+ 1. `@synapsor/spec`;
174
+ 2. `@synapsor/dsl`;
175
+ 3. `@synapsor/runner`;
176
+ 4. the optional `synapsor-runner` command alias, when prepared.
177
+
178
+ The alias must have the same version as the scoped Runner and depend on that
179
+ exact registry version. It contains no independent runtime or authority logic.
180
+ Run `corepack pnpm verify:packed-runner-alias` before publishing it, and do not
181
+ publish it until the matching scoped Runner is visible on npm.
182
+
170
183
  After publishing an alpha prerelease:
171
184
 
172
185
  ```bash
173
- VERIFY_PUBLISHED_ALPHA=1 ./scripts/verify-release-gate.sh 0.1.0-alpha.17
186
+ VERIFY_PUBLISHED_ALPHA=1 ./scripts/verify-release-gate.sh <prerelease-version>
174
187
  ```
175
188
 
176
189
  After publishing/promoting stable `latest`, verify the stable channel from a
177
190
  clean temporary directory:
178
191
 
179
192
  ```bash
180
- ./scripts/verify-published-stable.sh 0.1.0
193
+ ./scripts/verify-published-stable.sh <stable-version>
181
194
  ```