rcf-lite 0.25.0 → 0.26.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/CHANGELOG.md +25 -0
- package/blueprints/application-account-settings/docs/topics.md +1 -1
- package/blueprints/application-admin-console/docs/topics.md +1 -1
- package/blueprints/application-api-rest/docs/topics.md +1 -1
- package/blueprints/application-charts/docs/topics.md +1 -1
- package/blueprints/application-dashboard/docs/topics.md +1 -1
- package/blueprints/application-datatable/docs/topics.md +1 -1
- package/blueprints/application-empty-error-states/docs/topics.md +1 -1
- package/blueprints/application-error-handling/docs/topics.md +1 -1
- package/blueprints/application-file-upload/docs/topics.md +1 -1
- package/blueprints/application-forms-wizard/docs/topics.md +1 -1
- package/blueprints/application-notifications-in-app/docs/topics.md +1 -1
- package/blueprints/application-onboarding-tour/docs/topics.md +1 -1
- package/blueprints/application-spa/docs/topics.md +1 -1
- package/blueprints/delivery-ci-workflows/docs/topics.md +1 -1
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +1 -1
- package/blueprints/deploy-hetzner-server/CHANGELOG.md +21 -0
- package/blueprints/deploy-hetzner-server/blueprint.json +1 -1
- package/blueprints/deploy-hetzner-server/contributions/probes/cloud-init-render-lint.mjs +12 -5
- package/blueprints/deploy-hetzner-server/contributions/probes/hcloud-dry-run-mock.mjs +68 -20
- package/blueprints/deploy-hetzner-server/contributions/probes/manifest-schema-validate.mjs +8 -6
- package/blueprints/deploy-hetzner-server/contributions/probes/probe-utils.mjs +7 -1
- package/blueprints/deploy-hetzner-server/contributions/probes/real-account-cloud-init-hardened.mjs +2 -1
- package/blueprints/deploy-hetzner-server/contributions/templates/cloud-init.yaml.tmpl +26 -6
- package/blueprints/deploy-hetzner-server/docs/topics.md +1 -1
- package/blueprints/edge-cloudflare-access/docs/topics.md +1 -1
- package/blueprints/edge-cloudflare-rate-limiting/docs/topics.md +1 -1
- package/blueprints/edge-cloudflare-tunnel/CHANGELOG.md +10 -0
- package/blueprints/edge-cloudflare-tunnel/blueprint.json +1 -1
- package/blueprints/edge-cloudflare-tunnel/contributions/probes/manifest-schema-validate.mjs +4 -1
- package/blueprints/edge-cloudflare-tunnel/contributions/probes/real-account-connector-healthy.mjs +110 -21
- package/blueprints/edge-cloudflare-tunnel/contributions/probes/real-account-tunnel-hostname-routes.mjs +123 -30
- package/blueprints/edge-cloudflare-tunnel/docs/topics.md +1 -1
- package/blueprints/edge-cloudflare-turnstile/docs/topics.md +1 -1
- package/blueprints/email-smtp-resend/docs/topics.md +1 -1
- package/blueprints/jobs-background/docs/topics.md +1 -1
- package/blueprints/messaging-queue-cloudflare/CHANGELOG.md +19 -0
- package/blueprints/messaging-queue-cloudflare/README.md +2 -2
- package/blueprints/messaging-queue-cloudflare/blueprint.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/probes/real-account-concurrency-smoke.mjs +192 -37
- package/blueprints/messaging-queue-cloudflare/docs/topics.md +1 -1
- package/blueprints/object-storage-s3/CHANGELOG.md +11 -0
- package/blueprints/object-storage-s3/README.md +14 -1
- package/blueprints/object-storage-s3/blueprint.json +12 -1
- package/blueprints/object-storage-s3/contributions/adrs/adr-2905-object-storage-s3-hetzner-object-storage-provider.json +30 -0
- package/blueprints/object-storage-s3/contributions/probes/hetzner-object-storage-round-trip.mjs +136 -0
- package/blueprints/object-storage-s3/contributions/probes/run-hetzner-object-storage-round-trip.mjs +11 -0
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-101.json +18 -0
- package/blueprints/object-storage-s3/contributions/tacs/tac-2904-object-storage-s3-hetzner-endpoint-helper.json +34 -0
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28110.json +25 -0
- package/blueprints/object-storage-s3/docs/topics.md +1 -1
- package/blueprints/object-storage-s3/guide/object-storage-s3.md +36 -0
- package/blueprints/observability-essentials/docs/topics.md +1 -1
- package/blueprints/observability-logging/docs/topics.md +1 -1
- package/blueprints/observability-probe-endpoints/docs/topics.md +1 -1
- package/blueprints/persistence-data-d1/docs/topics.md +1 -1
- package/blueprints/persistence-data-postgres/docs/topics.md +1 -1
- package/blueprints/persistence-data-sqlite/docs/topics.md +1 -1
- package/blueprints/platform-cloudflare-cron-triggers/docs/topics.md +1 -1
- package/blueprints/platform-cloudflare-durable-objects/CHANGELOG.md +15 -0
- package/blueprints/platform-cloudflare-durable-objects/blueprint.json +1 -1
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/namespace-facade-ready.mjs +3 -3
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/probe-utils.mjs +28 -14
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/real-account-storage-smoke.mjs +132 -26
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/sole-reader-scan.mjs +40 -39
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/storage-round-trip.mjs +26 -16
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/websocket-hub-broadcast.mjs +31 -34
- package/blueprints/platform-cloudflare-durable-objects/docs/topics.md +1 -1
- package/blueprints/platform-cloudflare-kv/CHANGELOG.md +40 -1
- package/blueprints/platform-cloudflare-kv/README.md +41 -13
- package/blueprints/platform-cloudflare-kv/blueprint.json +1 -1
- package/blueprints/platform-cloudflare-kv/contributions/probes/cache-aside-hit-then-miss.mjs +26 -26
- package/blueprints/platform-cloudflare-kv/contributions/probes/event-secrecy.mjs +49 -31
- package/blueprints/platform-cloudflare-kv/contributions/probes/facade-round-trip.mjs +58 -16
- package/blueprints/platform-cloudflare-kv/contributions/probes/list-with-prefix.mjs +6 -5
- package/blueprints/platform-cloudflare-kv/contributions/probes/real-account-eventual-consistency-smoke.mjs +131 -67
- package/blueprints/platform-cloudflare-kv/docs/topics.md +1 -1
- package/blueprints/platform-docker-compose-host/docs/topics.md +1 -1
- package/blueprints/security-auth-clerk/docs/topics.md +1 -1
- package/blueprints/security-auth-keycloak/docs/topics.md +1 -1
- package/blueprints/security-auth-magic-link/docs/topics.md +1 -1
- package/blueprints/security-auth-oauth2/docs/topics.md +1 -1
- package/blueprints/security-secrets-management/docs/topics.md +1 -1
- package/fixtures/canary-manifest.json +9 -9
- package/guidance/harness-template.md +67 -0
- package/guidance/managed/agent-instructions-block.hash +1 -1
- package/guidance/managed/agent-instructions-block.md +67 -0
- package/package.json +2 -2
- package/rcf/code-nodes/cn-500.json +12 -0
- package/rcf/code-nodes/cn-510.json +12 -0
- package/rcf/code-nodes/cn-520.json +14 -0
- package/rcf/code-nodes/cn-521.json +12 -0
- package/rcf/code-nodes/cn-522.json +13 -0
- package/rcf/code-nodes/cn-523.json +12 -0
- package/rcf/code-nodes/cn-524.json +14 -0
- package/rcf/code-nodes/cn-525.json +12 -0
- package/rcf/code-nodes/cn-526.json +14 -0
- package/rcf/fbs/fbs-160.json +15 -0
- package/rcf/fbs/fbs-165.json +15 -0
- package/rcf/fbs/fbs-170.json +16 -0
- package/rcf/fbs/fbs-171.json +16 -0
- package/rcf/fbs/fbs-172.json +15 -0
- package/rcf/fbs/fbs-173.json +17 -0
- package/rcf/fbs/fbs-174.json +17 -0
- package/rcf/requirements/req-140.json +149 -0
- package/rcf/requirements/req-145.json +53 -0
- package/rcf/requirements/req-150.json +20 -0
- package/rcf/requirements/req-151.json +85 -0
- package/rcf/requirements/req-152.json +20 -0
- package/rcf/requirements/req-153.json +59 -0
- package/rcf/requirements/req-154.json +44 -0
- package/rcf/test-suites/ts-071.json +2 -2
- package/rcf/test-suites/ts-086.json +2 -2
- package/rcf/test-suites/ts-170.json +22 -0
- package/rcf/test-suites/ts-175.json +22 -0
- package/rcf/test-suites/ts-180.json +30 -0
- package/rcf/test-suites/ts-181.json +30 -0
- package/rcf/test-suites/ts-182.json +22 -0
- package/rcf/test-suites/ts-183.json +38 -0
- package/rcf/test-suites/ts-184.json +38 -0
- package/rcf/user-stories/us-14001.json +21 -0
- package/rcf/user-stories/us-14501.json +24 -0
- package/rcf/user-stories/us-15001.json +26 -0
- package/rcf/user-stories/us-15101.json +26 -0
- package/rcf/user-stories/us-15201.json +21 -0
- package/rcf/user-stories/us-15301.json +31 -0
- package/rcf/user-stories/us-15401.json +31 -0
- package/releases/releases.yaml +11 -1
- package/src/blueprint/apply.js +64 -0
- package/src/blueprint/consistency-lint.js +432 -0
- package/src/blueprint/disposition-ledger.js +224 -0
- package/src/blueprint/dispositions.js +44 -0
- package/src/blueprint/index.js +19 -0
- package/src/browser-verify/manifest-writer.js +53 -2
- package/src/browser-verify/pack-runner.js +18 -0
- package/src/cli/blueprint.js +103 -0
- package/src/setup/identity-seed.js +18 -0
|
@@ -239,6 +239,73 @@ miss, feed unreachable) say nothing to the operator; freshness is a
|
|
|
239
239
|
convenience, not a gate. Never run the upgrade without the operator's
|
|
240
240
|
explicit go.
|
|
241
241
|
|
|
242
|
+
### RULE 15: On blueprint apply, dispose every AC.
|
|
243
|
+
|
|
244
|
+
A blueprint's acceptance criteria come in two shapes: `fixed`
|
|
245
|
+
(mechanism-invariant, true for every applying project) and `template`
|
|
246
|
+
(shape given, values project-specific). When you apply a blueprint
|
|
247
|
+
(`rcf define blueprint add ...`), walk every AC the blueprint
|
|
248
|
+
contributed. A `fixed` AC stands as authored: do not weaken or drop
|
|
249
|
+
one, and if one appears wrong for the project, that is a defect against
|
|
250
|
+
the blueprint, escalated on the blueprint's repo, not edited locally. A
|
|
251
|
+
`template` AC is a starting shape: actively dispose of it by accepting
|
|
252
|
+
as written, adjusting with the project's values, or dropping with a
|
|
253
|
+
stated reason recorded against the story. Silent inheritance of a
|
|
254
|
+
`template` AC is a defect. After you have disposed of every `template`
|
|
255
|
+
AC, re-sweep the applied AC set against the scenario-class prompt list
|
|
256
|
+
(credential missing, non-2xx, rate limit, timeout, partial write,
|
|
257
|
+
permission denied, malformed input, already exists, gone, concurrent
|
|
258
|
+
access, quota exhausted, dependency not ready, first-vs-repeat run,
|
|
259
|
+
idempotency, empty and maximal collections, boundary values) so the
|
|
260
|
+
story still covers the mechanism's documented failure paths. Any AC
|
|
261
|
+
that rests on a third-party platform fact must show its vendor
|
|
262
|
+
documentation URL and the ISO-8601 date the fact was verified; a
|
|
263
|
+
citation older than the operator's tolerance is re-verified before the
|
|
264
|
+
AC is treated as ground truth.
|
|
265
|
+
|
|
266
|
+
A blueprint's seed docs are a minimal representational seed set, not a
|
|
267
|
+
project spec. You have full scope of the project you are driving, and
|
|
268
|
+
you are the party best placed to integrate the seed with the project's
|
|
269
|
+
own chain. After you have disposed of every AC, walk the seed's REQs,
|
|
270
|
+
TACs and ADRs against the project chain (existing REQs, TACs, ADRs and
|
|
271
|
+
the PRD/TAD): resolve integration contradictions you can (parameter
|
|
272
|
+
substitution against a settled project value, naming reconciliation
|
|
273
|
+
against a settled project convention, composition-order reconciliation
|
|
274
|
+
against another applied blueprint), record the disposition in the
|
|
275
|
+
tree, and escalate to the operator only the ones that need a
|
|
276
|
+
product-shape decision or a two-way credential or account decision. An
|
|
277
|
+
internal contradiction (two of the seed's own layers disagreeing about
|
|
278
|
+
the same contract) is not yours to resolve; escalate it as a defect
|
|
279
|
+
against the blueprint's repo and refuse to derive downstream work from
|
|
280
|
+
the ambiguity.
|
|
281
|
+
|
|
282
|
+
When you escalate, pitch the question at the operator's declared
|
|
283
|
+
register. On your first exchange after `rcf init`, if
|
|
284
|
+
`rcf/.identity/profile.md` carries no `operatorRegister` value, ask one
|
|
285
|
+
question and record the answer to the profile: "One quick set-up
|
|
286
|
+
question. When we need to escalate a decision to you, do you want it
|
|
287
|
+
framed as a product-owner question (plain English, outcome-shaped) or
|
|
288
|
+
an engineer question (with the AC id, the seed's assertion, the
|
|
289
|
+
project's convention)? Answer 'product owner', 'engineer', or 'skip'
|
|
290
|
+
and I will hold the default." A `skip` answer writes `unstated`, which
|
|
291
|
+
reads as `productOwner` on the first escalation; if the operator
|
|
292
|
+
answers in method vocabulary, silently promote to `engineer` for the
|
|
293
|
+
rest of the session and offer to persist the change to the profile.
|
|
294
|
+
|
|
295
|
+
### RULE 16: Verify with positive evidence.
|
|
296
|
+
|
|
297
|
+
Every "verified" claim (in the Test and Finalise stages, in the PR body's
|
|
298
|
+
verification section, in any status update) names the runtime it was
|
|
299
|
+
checked against AND cites the positive evidence of the property (a
|
|
300
|
+
request id, a response body excerpt, a created-then-deleted resource id
|
|
301
|
+
in an inventory diff, a real deploy record). "The check did not show the
|
|
302
|
+
bad signature" is not evidence; "the request returned id 8f7a-... and
|
|
303
|
+
the response body carried the created resource id 12345" is. Where the
|
|
304
|
+
account credentials are not present, record the skip honestly (name the
|
|
305
|
+
env var that was unset), never fabricate a pass on the strength of
|
|
306
|
+
absence. This rule mirrors RULE 15's active-disposition posture: an
|
|
307
|
+
absent check is a skip you name, an actual check is a claim you cite.
|
|
308
|
+
|
|
242
309
|
### Session start
|
|
243
310
|
|
|
244
311
|
Run `rcf define validate`. A broken tree is fixed or reported before anything
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rcf-lite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "One-install tooling for the Requirements Confidence Framework (RCF): the unified `rcf` CLI grouped into the five RCF tool groups (discover, define, build, verify, audit) plus a small core set (init, doctor, guidance, mcp), an MCP server, the live tree viewer and the fresh-context adversarial ship-gate verifier. Consumes @stravica-ai/rcf-schemas.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"#admissibility": "./src/admissibility/index.js"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@stravica-ai/rcf-schemas": "0.6.
|
|
63
|
+
"@stravica-ai/rcf-schemas": "0.6.2",
|
|
64
64
|
"ajv": "^8.20.0",
|
|
65
65
|
"ajv-formats": "^3.0.1"
|
|
66
66
|
},
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-500",
|
|
3
|
+
"path": "../../blueprints/object-storage-s3/blueprint.json",
|
|
4
|
+
"implementsAcIds": [
|
|
5
|
+
"AC-14001-1"
|
|
6
|
+
],
|
|
7
|
+
"dependencies": [],
|
|
8
|
+
"version": "0.1.0",
|
|
9
|
+
"status": "draft",
|
|
10
|
+
"createdAt": "2026-09-08T09:04:04.994Z",
|
|
11
|
+
"updatedAt": "2026-09-08T09:04:04.994Z"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-510",
|
|
3
|
+
"path": "../../blueprints/deploy-hetzner-server/blueprint.json",
|
|
4
|
+
"implementsAcIds": [
|
|
5
|
+
"AC-14501-1"
|
|
6
|
+
],
|
|
7
|
+
"dependencies": [],
|
|
8
|
+
"version": "0.1.0",
|
|
9
|
+
"status": "draft",
|
|
10
|
+
"createdAt": "2026-09-08T10:52:56.753Z",
|
|
11
|
+
"updatedAt": "2026-09-08T10:52:56.753Z"
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-520",
|
|
3
|
+
"path": "../../blueprints/platform-cloudflare-kv/blueprint.json",
|
|
4
|
+
"implementsAcIds": [
|
|
5
|
+
"AC-15001-1",
|
|
6
|
+
"AC-15001-2",
|
|
7
|
+
"AC-15401-2"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-08T12:22:33.507Z",
|
|
13
|
+
"updatedAt": "2026-09-08T12:23:01.646Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-521",
|
|
3
|
+
"path": "../../packages/rcf-lite/test/fixtures/cf-platform/h2-cf-kv-cache-aside-shim.mjs",
|
|
4
|
+
"implementsAcIds": [
|
|
5
|
+
"AC-15401-1"
|
|
6
|
+
],
|
|
7
|
+
"dependencies": [],
|
|
8
|
+
"version": "0.1.0",
|
|
9
|
+
"status": "draft",
|
|
10
|
+
"createdAt": "2026-09-08T12:22:47.292Z",
|
|
11
|
+
"updatedAt": "2026-09-08T12:23:44.676Z"
|
|
12
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-522",
|
|
3
|
+
"path": "../../packages/rcf-lite/test/blueprint/platform-cloudflare-kv-anatomy.test.js",
|
|
4
|
+
"implementsAcIds": [
|
|
5
|
+
"AC-15001-1",
|
|
6
|
+
"AC-15001-2"
|
|
7
|
+
],
|
|
8
|
+
"dependencies": [],
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"status": "draft",
|
|
11
|
+
"createdAt": "2026-09-08T12:22:47.694Z",
|
|
12
|
+
"updatedAt": "2026-09-08T12:22:47.694Z"
|
|
13
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-523",
|
|
3
|
+
"path": "../../packages/rcf-lite/test/fixtures/cf-platform/h2-cf-kv-event-secrecy-shim.mjs",
|
|
4
|
+
"implementsAcIds": [
|
|
5
|
+
"AC-15401-1"
|
|
6
|
+
],
|
|
7
|
+
"dependencies": [],
|
|
8
|
+
"version": "0.1.0",
|
|
9
|
+
"status": "draft",
|
|
10
|
+
"createdAt": "2026-09-08T12:23:45.054Z",
|
|
11
|
+
"updatedAt": "2026-09-08T12:23:45.054Z"
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-524",
|
|
3
|
+
"path": "../../blueprints/platform-cloudflare-durable-objects/blueprint.json",
|
|
4
|
+
"implementsAcIds": [
|
|
5
|
+
"AC-15101-1",
|
|
6
|
+
"AC-15101-2",
|
|
7
|
+
"AC-15401-3"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-08T13:01:58.227Z",
|
|
13
|
+
"updatedAt": "2026-09-08T13:01:58.227Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-525",
|
|
3
|
+
"path": "../../blueprints/messaging-queue-cloudflare/blueprint.json",
|
|
4
|
+
"implementsAcIds": [
|
|
5
|
+
"AC-15201-1"
|
|
6
|
+
],
|
|
7
|
+
"dependencies": [],
|
|
8
|
+
"version": "0.1.0",
|
|
9
|
+
"status": "draft",
|
|
10
|
+
"createdAt": "2026-09-08T13:01:58.602Z",
|
|
11
|
+
"updatedAt": "2026-09-08T13:01:58.602Z"
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-526",
|
|
3
|
+
"path": "../../blueprints/edge-cloudflare-tunnel/blueprint.json",
|
|
4
|
+
"implementsAcIds": [
|
|
5
|
+
"AC-15301-1",
|
|
6
|
+
"AC-15301-2",
|
|
7
|
+
"AC-15301-3"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-08T13:01:58.994Z",
|
|
13
|
+
"updatedAt": "2026-09-08T13:01:58.994Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-08T09:03:37.649Z",
|
|
3
|
+
"updatedAt": "2026-09-08T09:03:57.443Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-14001-1"
|
|
6
|
+
],
|
|
7
|
+
"fbsId": "FBS-160",
|
|
8
|
+
"prdId": "PRD-001",
|
|
9
|
+
"bsId": "BS-001",
|
|
10
|
+
"buildOrder": 63,
|
|
11
|
+
"executionStatus": "notStarted",
|
|
12
|
+
"title": "Adapter object-storage-s3 v1.1.0 Hetzner Object Storage: minor bump adds hetznerObjectStorage provider; new hetzner-endpoint helper on the fixture side; new hetzner-object-storage-round-trip probe (accountBound gated on CI_HAS_HETZNER_OBJECT_STORAGE); MinIO round-5 T-2 probes and R2 smoke unchanged",
|
|
13
|
+
"summary": "HQ round-7 follow-up: object-storage-s3 v1.1.0 minor bump adding the Hetzner Object Storage provider value under the shipped S3-API facade contract (blueprints/object-storage-s3/, was 1.0.0). Delta contributions on the blueprint side (target 4): one blueprint REQ object-storage-s3-REQ-101 (Hetzner endpoint-shape contract), one blueprint US object-storage-s3-US-28110 with AC-28110-1 (labelled AC-hetznerObjectStorage-endpointRoundTrip), one blueprint TAC TAC-2904-object-storage-s3-hetzner-endpoint-helper, one blueprint ADR ADR-2905-object-storage-s3-hetzner-object-storage-provider with standardsTraceClause 'Hetzner Object Storage S3 compatibility documented endpoint shape'. Every existing v1.0.0 contribution id byte-identical (no renumber, no reshape). Extends the shared fixture packages/rcf-lite/test/fixtures/infra-s3-and-queue/ (no second fixture directory) with src/hetzner-endpoint.mjs (composes <bucket>.<location>.your-objectstorage.com from an elicited bucket and location per Hetzner storage overview fsn1/hel1/nbg1 codes) plus a fixture-side shim run-hetzner-object-storage-round-trip.mjs. New Node-only probe blueprints/object-storage-s3/contributions/probes/hetzner-object-storage-round-trip.mjs (accountBound true, gated on CI_HAS_HETZNER_OBJECT_STORAGE, records accountBoundSkipped when unset per spec section 3.5); mutation SIMULATE_HETZNER_ENDPOINT_MISSHAPEN true (fixture-side INPUT-side mutation) composes an invalid endpoint via the fixture shim and the probe FAILS naming the missing subdomain. The round-5 T-2 shipped probes (facade-round-trip, put-get-round-trip, presigned-url, multipart-upload, event-secrecy) and the R2 real-account smoke stay unchanged and continue to pass byte-identical on the extended fixture. Blueprint README extended with a Hetzner Object Storage sub-section under the provider-choice section; guide extended with a Hetzner sub-section; blueprint CHANGELOG gains a 1.1.0 entry; shelf-wide topics.md sweep updates the object-storage-s3 row from shipped v1.0.0 to shipped v1.1.0 across every blueprint's docs/topics.md per the round-6 admin-console 1.1.0 precedent (PR #169). rcf-lite package version does NOT bump for this follow-up (spec section 8). Repo chain: REQ-140, US-14001 with AC-14001-1, TS-170 with TC-170-hetzner-endpoint-round-trip-and-skipped-shape, FBS-160 (buildOrder 63), CN-500, plus blueprint REQ-101 and blueprint US-28110 as blueprint-owned deltas, minted via rcf define create --id per HQ round-7 follow-up reserved-block ruling 2026-09-08 (adapter block REQ-140..144 / TS-170..174 / FBS-160..164 / CN-500..509). Base commit origin/main 25ccece.",
|
|
14
|
+
"dependsOnFbsIds": []
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-08T10:52:49.604Z",
|
|
3
|
+
"updatedAt": "2026-09-08T10:52:49.604Z",
|
|
4
|
+
"summary": "H-1 patch train against deploy-hetzner-server (blueprint bump 1.0.0 to 1.0.1; every existing contribution id byte-identical) and the shared throwaway-Hetzner-server fixture at packages/rcf-lite/test/fixtures/hetzner-throwaway-server/. Defect list from projects/blueprint-library/reports/real-account-r7-2026-09-08/README.md CONCERNS: (1) provision.mjs reads camelCase off the hcloud JSON (publicNet.ipv4.ip, datacenter.location.name, serverType.name) but hcloud emits snake_case (public_net, server_type, datacenter.location.name); fix reads s.public_net.ipv4.ip, s.datacenter.location.name, s.server_type.name; (2) provision.mjs expects hetzner/servers/rendered/ci-throwaway.cloud-init.yaml that nothing writes; fix renders inline via src/cloud-init-renderer.mjs before hcloud server create fires; (3) renderer substitutes ssh key NAMES into ssh_authorized_keys; fix resolves each name to its public-key material via hcloud ssh-key describe <name> --output json and inlines the .publicKey text; (4) destroy.mjs and sweep-orphans.mjs pass --output json to delete verbs that reject the flag; fix drops it and the tolerant JSON parser accepts arrays; (5) src/snapshot-verb.mjs calls a non-existent hcloud image create-image; fix shells hcloud server create-image --type snapshot --description <label> <id> and recovers the created snapshot id via hcloud image list --type=snapshot --output json by matching the serverName label; (6) src/ssh-baseline-check.mjs runs ssh immediately after provisionThrowawayServer; fix polls port 22 open plus a trivial ssh true exec, bounded up to 6 minutes, before firing the six baseline checks; (7) the deploy user has no NOPASSWD sudo in the rendered user-data; fix adds a write_files sudoers.d fragment granting NOPASSWD to that user with mode 0440; (9) hetzner/servers/ci-throwaway.json hard-codes sshKeyIds ['rcf-lite-ci']; fix adds an env override RCF_LITE_CI_SSH_KEY_NAME resolved at provision time with the manifest value as default, documented in the fixture README. Defect (8) T-2 and T-3 stub drivers are OUT of scope (H-2 owns them). Also: hcloud-dry-run-mock and the two other T-1 mocked probes gain fixture-side SIMULATE_ switches that alter INPUT only, satisfying the mutation-purity gate row; the mock reads the same rendered cloud-init the real path consumes and asserts an ssh public-key line and a NOPASSWD directive for the deploy user. Report envelopes under .rcf/reports/blueprints/deploy-hetzner-server/ regenerated from the REAL run under Baz one-off approval 2026-09-08 (repo-relative paths only, no secrets). CHANGELOG 1.0.1 entry lists the fixes by defect number. Chain: HQ hardening block H-1 REQ-145..149 / TS-175..179 / FBS-165..169 / CN-510..519 per HQ chain-block ruling 2026-09-08. Base commit origin/main 231bc74.",
|
|
5
|
+
"acIds": [
|
|
6
|
+
"AC-14501-1"
|
|
7
|
+
],
|
|
8
|
+
"fbsId": "FBS-165",
|
|
9
|
+
"prdId": "PRD-001",
|
|
10
|
+
"bsId": "BS-001",
|
|
11
|
+
"buildOrder": 64,
|
|
12
|
+
"executionStatus": "notStarted",
|
|
13
|
+
"title": "H-1 hardening: deploy-hetzner-server v1.0.0 to v1.0.1 patch train; fixes the nine defects the round-7 real-account gate run d-2026-09-08-010 found; makes the shared throwaway-server fixture consume the same rendered cloud-init the real path consumes",
|
|
14
|
+
"dependsOnFbsIds": []
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-08T12:22:31.659Z",
|
|
3
|
+
"updatedAt": "2026-09-08T14:04:50.163Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-15001-1",
|
|
6
|
+
"AC-15001-2"
|
|
7
|
+
],
|
|
8
|
+
"fbsId": "FBS-170",
|
|
9
|
+
"prdId": "PRD-001",
|
|
10
|
+
"bsId": "BS-001",
|
|
11
|
+
"buildOrder": 65,
|
|
12
|
+
"executionStatus": "notStarted",
|
|
13
|
+
"title": "H-2 kv re-anchor and observability: five kv probes and README anchored to shipped AC-31xxx band; two previously-uncovered ACs gain runtime observables via facade-round-trip env.CACHE grep and event-secrecy whitelist scan; kv-anatomy test assertions moved with the re-anchor (addendum ruling 1)",
|
|
14
|
+
"summary": "H-2 kv re-anchor: renumber every anchorAcId in the five contributed kv probes (facade-round-trip, list-with-prefix, cache-aside-hit-then-miss, event-secrecy, real-account-eventual-consistency-smoke) and their header comments from AC-5xxx to the shipped AC-31xxx band; correct the kv README chain-slice pointer paragraph to name US-31101..US-31108; move kv-anatomy test assertions to the new AC-31xxx ids per dispatch addendum ruling 1; add a runtime env.CACHE-grep result on facade-round-trip covering AC-31102-1; add a whitelist-scan result on event-secrecy covering AC-31107-1; the real-account probe carries AC-31103-1 as its bound AC. Two ACs on this FBS: AC-15001-1 (no AC-5xxx string survives on the kv blueprint tree) and AC-15001-2 (every shipped kv AC appears as an anchor on a probe result with a runtime observable).",
|
|
15
|
+
"dependsOnFbsIds": []
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-08T12:22:32.025Z",
|
|
3
|
+
"updatedAt": "2026-09-08T14:04:49.784Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-15101-1",
|
|
6
|
+
"AC-15101-2"
|
|
7
|
+
],
|
|
8
|
+
"fbsId": "FBS-171",
|
|
9
|
+
"prdId": "PRD-001",
|
|
10
|
+
"bsId": "BS-001",
|
|
11
|
+
"buildOrder": 66,
|
|
12
|
+
"executionStatus": "notStarted",
|
|
13
|
+
"title": "H-2 DO real storage round-trip driver and anchor coverage: real-account-storage-smoke replaces credential-readiness pass-stub with byte-equal put/get round-trip via deployed Worker (or wrangler-dev locally); five previously-unbound DO ACs bound as additional-result anchors on existing probes; DO anatomy test assertions extended for the new bindings",
|
|
14
|
+
"summary": "H-2 DO storage round-trip driver and anchor coverage: replace the credential-readiness pass-stub in blueprints/platform-cloudflare-durable-objects/contributions/probes/real-account-storage-smoke.mjs with a real HTTP round-trip driver against a deployed Worker route (byte-equal read-back on 1 KiB payload); local proof via the existing wrangler-seam.mjs against miniflare or wrangler dev. Bind the five previously-unbound DO ACs (AC-33106-1, AC-33108-1, AC-33109-1, AC-33110-1, AC-33111-1) as additional-result anchors on the wrangler-seam, storage-round-trip and concurrent-increment probes; add a new probe body inside existing capability only if no existing probe carries the observable honestly. Extend the DO anatomy test to assert the thirteen-AC coverage union. Move the DO probe-body SIMULATE_ branches (sole-reader-scan, storage-round-trip, websocket-hub-broadcast) into fixture-side h2-cf shim modules (Group B scope, tracked by AC-15401-1).",
|
|
15
|
+
"dependsOnFbsIds": []
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-08T12:22:32.405Z",
|
|
3
|
+
"updatedAt": "2026-09-08T14:04:49.404Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-15201-1"
|
|
6
|
+
],
|
|
7
|
+
"fbsId": "FBS-172",
|
|
8
|
+
"prdId": "PRD-001",
|
|
9
|
+
"bsId": "BS-001",
|
|
10
|
+
"buildOrder": 67,
|
|
11
|
+
"executionStatus": "notStarted",
|
|
12
|
+
"title": "H-2 queue real concurrency driver: real-account-concurrency-smoke publishes 500 messages against a live Queues binding on a deployed Worker and asserts concurrent processing up to the documented push-invocation cap; env-absent branch keeps pass-with-skip; queue anatomy test assertions extended",
|
|
13
|
+
"summary": "H-2 queue real concurrency driver: replace the accountBoundSkipped pass-stub in blueprints/messaging-queue-cloudflare/contributions/probes/real-account-concurrency-smoke.mjs with a real driver that publishes 500 messages through the producer facade wired to a live Queues binding on a deployed Worker (queue name and binding parameterised via env; canonical queue rcf-lite-ci-queue-smoke, HQ supplies values at gate time) and asserts concurrent processing up to the documented push-invocation cap (Cloudflare Queues limits URL). Local proof via miniflare or wrangler dev with local queue simulation. Env-absent branch keeps section 3.5 pass-with-skip. Re-verify the Cloudflare Queues limits URL 200 at merge time and log in the PR provenance. Extend the queue anatomy test to assert the real-account round-trip shape.",
|
|
14
|
+
"dependsOnFbsIds": []
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-08T12:22:32.784Z",
|
|
3
|
+
"updatedAt": "2026-09-08T14:04:49.011Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-15301-1",
|
|
6
|
+
"AC-15301-2",
|
|
7
|
+
"AC-15301-3"
|
|
8
|
+
],
|
|
9
|
+
"fbsId": "FBS-173",
|
|
10
|
+
"prdId": "PRD-001",
|
|
11
|
+
"bsId": "BS-001",
|
|
12
|
+
"buildOrder": 68,
|
|
13
|
+
"executionStatus": "notStarted",
|
|
14
|
+
"title": "H-2 tunnel real drivers: connector-healthy runs cloudflared tunnel info against a throwaway hetzner server via T-1 fixture; hostname-routes drives undici + (with Access) two-identity JWT; manifest-schema-validate placeholder becomes fail-with-pointer; tunnel anatomy test assertions extended and the symbolic-anchor ruling recorded",
|
|
15
|
+
"summary": "H-2 tunnel real drivers: replace blueprints/edge-cloudflare-tunnel/contributions/probes/real-account-connector-healthy.mjs and real-account-tunnel-hostname-routes.mjs warn-on-env stubs with real drivers. connector-healthy provisions the throwaway hetzner server via the T-1 hetzner fixture surface (consumed as-is; hetzner-fixture defects are H-1 scope at HQ), brings a named cloudflared tunnel connector up, runs cloudflared tunnel info <name> through a cloudflared control shim, asserts healthy connector count is at least one, captures tunnelConnectorUp event. hostname-routes drives undici for the public-hostname sub-case and (when CI_HAS_CLOUDFLARE_ACCESS is set) a two-identity JWT sub-case (HQ note: Access is not enabled on the HQ account today, so at gate time the AUD sub-case stays pass-with-skip until HQ enables Access). manifest-schema-validate warn-on-missing-credentials-placeholder becomes fail with a fixture-setup pointer. Tunnel symbolic-anchor ruling (AC-tunnel-*) resolved and recorded in the PR body per brief C4.",
|
|
16
|
+
"dependsOnFbsIds": []
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-08T12:22:33.140Z",
|
|
3
|
+
"updatedAt": "2026-09-08T14:04:48.623Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-15401-1",
|
|
6
|
+
"AC-15401-2",
|
|
7
|
+
"AC-15401-3"
|
|
8
|
+
],
|
|
9
|
+
"fbsId": "FBS-174",
|
|
10
|
+
"prdId": "PRD-001",
|
|
11
|
+
"bsId": "BS-001",
|
|
12
|
+
"buildOrder": 69,
|
|
13
|
+
"executionStatus": "notStarted",
|
|
14
|
+
"title": "H-2 cross-cutting probe hygiene: SIMULATE_ branches moved out of shipped probe bodies into fixture-side h2-cf-platform-probe-integrity shims across the four blueprints; committed fail envelope removed and shipped-code pass envelopes committed; probe comments name test doubles honestly; new h2-cf-platform-probe-integrity anatomy test asserts SIMULATE_ purity, envelope hygiene and marker honesty",
|
|
15
|
+
"summary": "H-2 cross-cutting probe hygiene: SIMULATE_ branches moved out of the shipped probe bodies on the four Cloudflare-platform blueprints (kv: cache-aside-hit-then-miss, event-secrecy; DO: sole-reader-scan, storage-round-trip, websocket-hub-broadcast) into fixture-side shim modules under packages/rcf-lite/test/fixtures/cf-platform/ and .../cf-edge/ whose file names carry the h2-cf-platform-probe-integrity slug prefix (short form h2-cf). Delete the committed fail envelope at .rcf/reports/blueprints/platform-cloudflare-kv/event-secrecy.json and commit a shipped-code pass envelope in its place; regenerate the other kv envelopes and commit shipped-code pass envelopes for the DO/queue/tunnel probes. Rework or adjudicate probe comments flagged by stage-1 marker rows (kv fake clock; DO fake state, fake WebSocket pair; DO probe-utils lines 73 and 75; kv not-yet elicit gating). Add a new h2-cf-platform-probe-integrity anatomy test at packages/rcf-lite/test/blueprint/h2-cf-platform-probe-integrity.test.js that greps the four probe trees for SIMULATE_ (must be zero), walks committed envelopes for fail/warn aggregateVerdict (must be zero), and asserts marker rewording.",
|
|
16
|
+
"dependsOnFbsIds": []
|
|
17
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-08T09:02:25.166Z",
|
|
3
|
+
"updatedAt": "2026-09-08T09:02:37.052Z",
|
|
4
|
+
"description": "The object-storage-s3 blueprint gains a Hetzner Object Storage provider value under its shipped v1.0.0 S3-API facade contract. The delta adds an endpoint-shape helper hetzner-endpoint.mjs composing the vendor-documented pattern <bucket>.<location>.your-objectstorage.com from an elicited bucket and location (fsn1 fal, hel1 hel, nbg1 nur per the Hetzner storage overview); a new probe hetzner-object-storage-round-trip.mjs drives put/get/delete against the composed endpoint with accountBound true gated on CI_HAS_HETZNER_OBJECT_STORAGE (records accountBoundSkipped when unset per spec section 3.5); one blueprint-owned REQ (object-storage-s3-REQ-101) and one blueprint-owned US (object-storage-s3-US-28110) anchor the AC AC-28110-1; one blueprint TAC (TAC-2904-object-storage-s3-hetzner-endpoint-helper) formalises the helper contract; one blueprint ADR (ADR-2905-object-storage-s3-hetzner-object-storage-provider, scope local) documents the Hetzner provider value alongside R2, AWS, MinIO with standardsTraceClause Hetzner Object Storage S3 compatibility documented endpoint shape. The existing MinIO local emulator round-trip and R2 real-account smoke stay byte-identical; blueprint bumps 1.0.0 to 1.1.0; rcf-lite package version does NOT bump (spec 8). Chain: HQ round-7 follow-up per HQ chain-block ruling 2026-09-08 (adapter block REQ-140..144, TS-170..174, FBS-160..164, CN-500..509). Section 5.4 of hetzner-round-7-spec-2026-09-07.",
|
|
5
|
+
"reqId": "REQ-140",
|
|
6
|
+
"prdId": "PRD-001",
|
|
7
|
+
"title": "Adapter object-storage-s3 v1.1.0 Hetzner Object Storage: endpoint-shape helper composes <bucket>.<location>.your-objectstorage.com per Hetzner storage overview; delta contributions add hetzner-object-storage-round-trip probe (accountBound gated on CI_HAS_HETZNER_OBJECT_STORAGE); MinIO and R2 paths unchanged",
|
|
8
|
+
"category": "functional",
|
|
9
|
+
"domain": "functional",
|
|
10
|
+
"priority": "must",
|
|
11
|
+
"version": "0.1.0",
|
|
12
|
+
"status": "draft",
|
|
13
|
+
"shapeClassification": {
|
|
14
|
+
"shapes": [
|
|
15
|
+
"webUi",
|
|
16
|
+
"httpApi",
|
|
17
|
+
"persistence"
|
|
18
|
+
],
|
|
19
|
+
"reason": "keyword-scan",
|
|
20
|
+
"classifiedAt": "2026-09-08T09:02:25.212Z",
|
|
21
|
+
"signals": [
|
|
22
|
+
{
|
|
23
|
+
"source": "title",
|
|
24
|
+
"shape": "persistence",
|
|
25
|
+
"match": "storage"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"source": "title",
|
|
29
|
+
"shape": "persistence",
|
|
30
|
+
"match": "Storage"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"source": "title",
|
|
34
|
+
"shape": "httpApi",
|
|
35
|
+
"match": "endpoint"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"source": "title",
|
|
39
|
+
"shape": "persistence",
|
|
40
|
+
"match": "storage"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"source": "title",
|
|
44
|
+
"shape": "persistence",
|
|
45
|
+
"match": "storage"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"source": "description",
|
|
49
|
+
"shape": "persistence",
|
|
50
|
+
"match": "storage"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"source": "description",
|
|
54
|
+
"shape": "persistence",
|
|
55
|
+
"match": "Storage"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"source": "description",
|
|
59
|
+
"shape": "httpApi",
|
|
60
|
+
"match": "API"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"source": "description",
|
|
64
|
+
"shape": "httpApi",
|
|
65
|
+
"match": "endpoint"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"source": "description",
|
|
69
|
+
"shape": "httpApi",
|
|
70
|
+
"match": "endpoint"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"source": "description",
|
|
74
|
+
"shape": "persistence",
|
|
75
|
+
"match": "storage"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"source": "description",
|
|
79
|
+
"shape": "persistence",
|
|
80
|
+
"match": "storage"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"source": "description",
|
|
84
|
+
"shape": "httpApi",
|
|
85
|
+
"match": "put"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"source": "description",
|
|
89
|
+
"shape": "httpApi",
|
|
90
|
+
"match": "get"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"source": "description",
|
|
94
|
+
"shape": "httpApi",
|
|
95
|
+
"match": "delete"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"source": "description",
|
|
99
|
+
"shape": "httpApi",
|
|
100
|
+
"match": "endpoint"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"source": "description",
|
|
104
|
+
"shape": "persistence",
|
|
105
|
+
"match": "storage"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"source": "description",
|
|
109
|
+
"shape": "persistence",
|
|
110
|
+
"match": "storage"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"source": "description",
|
|
114
|
+
"shape": "persistence",
|
|
115
|
+
"match": "storage"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"source": "description",
|
|
119
|
+
"shape": "httpApi",
|
|
120
|
+
"match": "endpoint"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"source": "description",
|
|
124
|
+
"shape": "webUi",
|
|
125
|
+
"match": "form"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"source": "description",
|
|
129
|
+
"shape": "persistence",
|
|
130
|
+
"match": "storage"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"source": "description",
|
|
134
|
+
"shape": "persistence",
|
|
135
|
+
"match": "storage"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"source": "description",
|
|
139
|
+
"shape": "persistence",
|
|
140
|
+
"match": "Storage"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"source": "description",
|
|
144
|
+
"shape": "httpApi",
|
|
145
|
+
"match": "endpoint"
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-08T10:50:11.871Z",
|
|
3
|
+
"updatedAt": "2026-09-08T10:50:27.769Z",
|
|
4
|
+
"description": "H-1 patch train against deploy-hetzner-server 1.0.0 shipped in rcf-lite 0.25.0 (real-account gate d-2026-09-08-010 report). Nine defects; every real-account probe throws before writing the scratch id file so destroy cannot tear the server down. This REQ adds the standing requirement that mocked probes for deploy-hetzner-server consume the same rendered cloud-init user-data the real path consumes (renderer writes the file; mock and real path both read it) and that the rendered user-data carries a real ssh public-key line for the deploy user plus NOPASSWD sudo for that user; that provision.mjs projects snake_case hcloud fields; that destroy.mjs and sweep-orphans.mjs never pass --output json to a delete verb (accepts arrays or objects); that snapshot-verb.mjs shells hcloud server create-image --type snapshot; that ssh baseline checks poll ssh readiness before firing and shell NOPASSWD sudo; and that the manifest ssh-key name is overridable via RCF_LITE_CI_SSH_KEY_NAME. Domain functional. Chain: HQ hardening block H-1 per HQ chain-block ruling 2026-09-08 (REQ-145..149 / TS-175..179 / FBS-165..169 / CN-510..519). Blueprint version 1.0.0 to 1.0.1; every existing contribution id byte-identical.",
|
|
5
|
+
"reqId": "REQ-145",
|
|
6
|
+
"prdId": "PRD-001",
|
|
7
|
+
"title": "Hardening H-1: throwaway-server fixture real-path fidelity for deploy-hetzner-server; provision reads hcloud snake_case; renderer inlines ssh key material; destroy/sweep drop --output json; snapshot verb uses hcloud server create-image; ssh baseline waits for cloud-init and runs under NOPASSWD deploy; sshKeyIds override via RCF_LITE_CI_SSH_KEY_NAME; mock consumes the same rendered cloud-init",
|
|
8
|
+
"category": "functional",
|
|
9
|
+
"domain": "functional",
|
|
10
|
+
"priority": "must",
|
|
11
|
+
"version": "0.1.0",
|
|
12
|
+
"status": "draft",
|
|
13
|
+
"shapeClassification": {
|
|
14
|
+
"shapes": [
|
|
15
|
+
"webUi",
|
|
16
|
+
"httpApi"
|
|
17
|
+
],
|
|
18
|
+
"reason": "keyword-scan",
|
|
19
|
+
"classifiedAt": "2026-09-08T10:50:11.918Z",
|
|
20
|
+
"signals": [
|
|
21
|
+
{
|
|
22
|
+
"source": "title",
|
|
23
|
+
"shape": "webUi",
|
|
24
|
+
"match": "render"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"source": "title",
|
|
28
|
+
"shape": "webUi",
|
|
29
|
+
"match": "rendered"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"source": "description",
|
|
33
|
+
"shape": "webUi",
|
|
34
|
+
"match": "rendered"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"source": "description",
|
|
38
|
+
"shape": "webUi",
|
|
39
|
+
"match": "render"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"source": "description",
|
|
43
|
+
"shape": "webUi",
|
|
44
|
+
"match": "rendered"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"source": "description",
|
|
48
|
+
"shape": "httpApi",
|
|
49
|
+
"match": "delete"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-08T12:16:28.007Z",
|
|
3
|
+
"updatedAt": "2026-09-08T12:16:28.158Z",
|
|
4
|
+
"description": "The rcf-lite platform-cloudflare-kv blueprint ships eight approved user stories (US-31101..US-31108) with nine ACs (AC-31101-1, AC-31102-1, AC-31103-1, AC-31103-2, AC-31104-1, AC-31105-1, AC-31106-1, AC-31107-1, AC-31108-1). Its five contributed probes and the README still anchor the defunct AC-5001..AC-5401 id band that never became chain rows on this repo. This train re-anchors every probe result and the README chain-slice pointers to the shipped AC-31xxx band per Dave ruling 4 (2026-09-08 relay 582c2bca): do NOT resurrect the AC-5xxx stories, move the probes to the shipped band. Every one of the nine shipped kv ACs must appear as an anchor (primary or additional result) on at least one probe with a runtime observable; the two ACs no shipped probe currently covers (AC-31102-1 sole-reader grep, AC-31107-1 whitelist-only lifecycle event scan) are added as additional results on facade-round-trip and event-secrecy per the dispatch addendum. Anatomy-test assertions move with the re-anchor per dispatch addendum ruling 1. No capability change; 0.25.x patch scope; runtime surface unchanged.",
|
|
5
|
+
"category": "functional",
|
|
6
|
+
"domain": "functional",
|
|
7
|
+
"priority": "must",
|
|
8
|
+
"reqId": "REQ-150",
|
|
9
|
+
"prdId": "PRD-001",
|
|
10
|
+
"title": "H-2 kv re-anchor and observability: five kv probes and the README re-anchor from AC-5xxx to the shipped AC-31xxx band; every shipped kv AC gains a runtime observable",
|
|
11
|
+
"version": "0.1.0",
|
|
12
|
+
"status": "draft",
|
|
13
|
+
"shapeClassification": {
|
|
14
|
+
"shapes": [
|
|
15
|
+
"none"
|
|
16
|
+
],
|
|
17
|
+
"reason": "keyword-scan",
|
|
18
|
+
"classifiedAt": "2026-09-08T12:16:28.156Z"
|
|
19
|
+
}
|
|
20
|
+
}
|