rcf-lite 0.17.0 → 0.18.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 +22 -0
- package/blueprints/application-api-rest/README.md +5 -1
- package/blueprints/application-api-rest/blueprint.json +1 -1
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-006.json +4 -4
- package/blueprints/application-api-rest/contributions/tacs/tac-306-application-api-rest-operability.json +9 -8
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2103.json +3 -3
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2108.json +27 -27
- package/blueprints/application-api-rest/docs/topics.md +2 -2
- package/blueprints/application-api-rest/guide/application-api-rest.md +5 -1
- package/blueprints/application-spa/docs/topics.md +2 -2
- package/blueprints/delivery-ci-workflows/docs/topics.md +2 -2
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +2 -2
- package/blueprints/email-smtp-resend/docs/topics.md +2 -2
- package/blueprints/observability-essentials/README.md +6 -2
- package/blueprints/observability-essentials/blueprint.json +133 -33
- package/blueprints/observability-essentials/contributions/adrs/adr-801-observability-essentials-health-probes.json +4 -4
- package/blueprints/observability-essentials/contributions/adrs/adr-802-observability-essentials-readiness-semantics.json +4 -4
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-001.json +4 -4
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-002.json +4 -4
- package/blueprints/observability-essentials/contributions/tacs/tac-801-observability-essentials-liveness-probe.json +10 -9
- package/blueprints/observability-essentials/contributions/tacs/tac-802-observability-essentials-readiness-probe.json +17 -11
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7101.json +12 -3
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7102.json +12 -3
- package/blueprints/observability-essentials/docs/topics.md +15 -8
- package/blueprints/observability-essentials/guide/observability-essentials.md +9 -3
- package/blueprints/observability-probe-endpoints/README.md +5 -1
- package/blueprints/observability-probe-endpoints/blueprint.json +116 -24
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1503-observability-probe-endpoints-kubernetes-default.json +5 -5
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14102.json +11 -2
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14107.json +11 -2
- package/blueprints/observability-probe-endpoints/docs/topics.md +6 -6
- package/blueprints/observability-probe-endpoints/guide/observability-probe-endpoints.md +10 -0
- package/blueprints/persistence-data-d1/docs/topics.md +2 -2
- package/blueprints/persistence-data-sqlite/docs/topics.md +2 -2
- package/blueprints/security-auth-clerk/docs/topics.md +2 -2
- package/blueprints/security-auth-keycloak/docs/topics.md +2 -2
- package/blueprints/security-auth-magic-link/docs/topics.md +2 -2
- package/blueprints/security-auth-oauth2/docs/topics.md +2 -2
- package/blueprints/security-secrets-management/docs/topics.md +2 -2
- package/fixtures/canary-manifest.json +6 -6
- package/package.json +1 -1
- package/rcf/code-nodes/cn-074.json +19 -0
- package/rcf/code-nodes/cn-075.json +15 -0
- package/rcf/code-nodes/cn-076.json +14 -0
- package/rcf/fbs/fbs-024.json +24 -0
- package/rcf/fbs/fbs-025.json +25 -0
- package/rcf/fbs/fbs-026.json +27 -0
- package/rcf/fbs/fbs-027.json +25 -0
- package/rcf/requirements/req-012.json +22 -0
- package/rcf/test-suites/ts-034.json +32 -0
- package/rcf/test-suites/ts-035.json +23 -0
- package/rcf/test-suites/ts-036.json +65 -0
- package/rcf/test-suites/ts-037.json +55 -0
- package/rcf/user-stories/us-1201.json +34 -0
- package/rcf/user-stories/us-1202.json +25 -0
- package/rcf/user-stories/us-1203.json +43 -0
- package/rcf/user-stories/us-1204.json +25 -0
- package/releases/releases.yaml +11 -1
- package/src/blueprint/index.js +1 -0
- package/src/blueprint/remove-resolution.js +104 -0
- package/src/cli/blueprint.js +41 -0
- package/src/cli/doctor.js +76 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,28 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.18.0] - 2026-09-04
|
|
10
|
+
|
|
11
|
+
Core shelf probe-path alignment. One shelf blueprint owns the probe-path binding across the whole shelf: `observability-probe-endpoints` v1.1.0 is the sole `scope: global` claimant on `healthProbes` and `readinessSemantics` and gains an optional Kubernetes-profile `/startup` path (off by default, enabled per project by `probeInterface.options.kubernetes.startup.enabled: true`). `observability-essentials` v2.0.0 drops its two `scope: global` topic claims, drops the shipped `/healthz` and `/readyz` defaults from TAC-801/802 (`path` becomes required config with no default), and adds the stable-coded `PROBE_INTERFACE_PATHS_MISSING` boot refusal for essentials-alone projects that forget the config. `application-api-rest` v2.0.0 drops the literal `/healthz/live`, `/healthz/ready`, and `/healthz/startup` bindings from REQ-006, US-2108, TAC-306, and the US-2103 versioning exemption, deferring to the resolved probe path set the probe-endpoints blueprint emits via TAC-1501 `getExemptPathSet` (or to the project-supplied `probeInterface.paths` in the essentials-alone case). `rcf doctor` grows a `probe-path-owner` check that fires when more than one applied blueprint teaches probe paths, and `rcf define blueprint remove-resolution <adr-id>` is the paired remedy verb that drops a single `manifest.resolutions[]` entry by its `resolvedByAdrId`. Spec: `projects/rcf-lite-wsd/specs/rcf-lite-probe-path-alignment-spec-2026-09-04.md` (amendments A1 to A3). Chain: REQ-012 with US-1201/1202/1203/1204 and TS-034/035/036/037 on the rcf-lite own tree.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **`rcf define blueprint remove-resolution <adr-id>`.** Drops a single `manifest.resolutions[]` entry by its `resolvedByAdrId`; writes nothing else and leaves the project-level ADR file at `rcf/adrs/<adr-id>.json` in place as historical context. Refuses exit 2 when `<adr-id>` is malformed or names no ADR on the project tree. Idempotent on re-run: when `<adr-id>` is a well-formed ADR id that still names an ADR on the tree but is no longer on any resolutions[] entry, prints `nothing to remove` and exits 0. This is the verb the `probe-path-owner` doctor check and spec section 9 name as the redundant-resolution remedy; before this change the message named a verb that did not exist. Chain: US-1204 with TS-037 on REQ-012 for the rcf-lite own tree; spec amendment A2 (2026-09-04, under the envelope after gate d-2026-09-04-016 finding 1); work item `w-2026-09-03-dave-021`.
|
|
16
|
+
|
|
17
|
+
- **Core shelf probe-path alignment (spec 2026-09-04).** One owner on the shelf for the probe-path binding. `observability-probe-endpoints` v1.1.0 is the sole shelf-wide `scope: global` claimant on `healthProbes` and `readinessSemantics` and adds an optional third Kubernetes-profile path `startup` (default `/startup`, off by default, enabled per project by `probeInterface.options.kubernetes.startup.enabled: true`) with paired ACs on US-14102 (AC-14102-4: three-path resolution) and US-14107 (AC-14107-4: three-entry auth-exempt list). `observability-essentials` v2.0.0 drops its `scope: global` claims on `healthProbes` and `readinessSemantics` (ADR-801 and ADR-802 become scope-local historical ADRs with a title change; content body stays for reader context per spec section 4), restates REQ-001/002 path-neutral, drops the `/healthz` and `/readyz` defaults from TAC-801/802 (`path` becomes required config with no shipped default), and gains AC-7101-4 and AC-7102-4 covering the stable-coded `PROBE_INTERFACE_PATHS_MISSING` boot refusal for essentials-alone projects. `application-api-rest` v2.0.0 drops the literal `/healthz/live`, `/healthz/ready`, and `/healthz/startup` bindings from REQ-006, US-2108 (all eight ACs), TAC-306, and US-2103 (versioning-exemption AC), deferring to the resolved probe path set that `observability-probe-endpoints` emits via TAC-1501 `getExemptPathSet` (or the project-supplied `probeInterface.paths` in the essentials-alone case). The three-way alignment is verified by `packages/rcf-lite/test/blueprint/probe-path-alignment.test.js`: 15 tests covering the nine assertions of spec section 7 across the six permutations of applying the three amended blueprints. `rcf doctor` gains a `probe-path-owner` check that fires when more than one applied blueprint teaches probe paths (spec section 9). Chain: REQ-012 with US-1201/1202/1203 and TS-034/035/036 on the rcf-lite own chain records the WHAT of the alignment for the dogfood tree. Trace: `projects/rcf-lite-wsd/specs/rcf-lite-probe-path-alignment-spec-2026-09-04.md` (sections 1 through 11); origin: Dex WSD escalation 2026-09-03; work item `w-2026-09-03-dave-021`.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- **`observability-probe-endpoints`: 1.0.0 -> 1.1.0** (minor bump per blueprint-authoring section 8: additive, no scope:global topic change).
|
|
22
|
+
- **`observability-essentials`: 1.0.0 -> 2.0.0** (major bump: drops two `scope: global` topic claims and reshapes REQ/TAC bodies).
|
|
23
|
+
- **`application-api-rest`: 1.0.0 -> 2.0.0** (major bump: shape change to REQ-006 and US-2108 AC set removes literal probe paths).
|
|
24
|
+
|
|
25
|
+
### Migration notes
|
|
26
|
+
|
|
27
|
+
- A project that applied only `observability-essentials` v1.x: re-applying to v2.0.0 requires one line of configuration per environment (`probeInterface.paths.liveness` and `probeInterface.paths.readiness`) to satisfy the essentials boot wiring, unless the project also composes `observability-probe-endpoints` v1.1.0 or later (which supplies the paths automatically).
|
|
28
|
+
- A project that applied both `observability-essentials` v1.x and `observability-probe-endpoints` v1.0.0 with a project-level ADR superseding both on `healthProbes` and `readinessSemantics`: after re-apply, the resolutions are redundant historical context; `rcf doctor`'s `probe-path-owner` check flags them with the `rcf define blueprint remove-resolution` hint.
|
|
29
|
+
- A project that applied `application-api-rest` v1.x: FBSes and TCs that bind literal `/healthz/live`, `/healthz/ready`, or `/healthz/startup` strings need one edit each to bind the resolved path set; `rcf audit coverage --strict` catches project-side TCs that still hold the literal strings after re-apply.
|
|
30
|
+
|
|
9
31
|
## [0.17.0] - 2026-09-04
|
|
10
32
|
|
|
11
33
|
The e2e verification contract for browser-facing projects. Verify pins `@playwright/mcp@0.0.80` with a preflight print and a `--playwright-mcp-version` override for emergency use; the effective pin lands on the report's runStats. Doctor gains four browser-facing checks (`playwright-present`, `browser-present`, `playwright-mcp-reachable`, `playwright-mcp-redundant`) routed by an applied blueprint's `browserSurface`, with a one-line skip on API-only projects. Init writes a Playwright MCP entry only when no scope-visible signature exists, falling back to a distinctly named `playwright-rcf` project-scope entry when it cannot prove absence, and opt-out via `--no-playwright-mcp`. `application-spa` v1.4.0 and `delivery-ci-workflows` v2.2.0 ship the paired `browserSurface` stories and the illustrative e2e job as a documentation contract per spec 2026-09-03 amendment A2; the runtime materialiser lands in a follow-up train.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# application-api-rest blueprint (v2.0.0)
|
|
2
2
|
|
|
3
3
|
The second content blueprint on the rcf-build-lite blueprint mechanism (design brief v2, ratified; Phase 3 of the blueprint programme). Scope: a REST service, single deployable, versioned wire contract, no UI in scope. Composes with the application-spa blueprint by design, including two deliberate scope:global conflicts.
|
|
4
4
|
|
|
@@ -38,3 +38,7 @@ ADR-301 errorEnvelope, ADR-302 authModel, ADR-303 apiVersioning, ADR-304 logging
|
|
|
38
38
|
## Quality bar
|
|
39
39
|
|
|
40
40
|
OpenAPI 3.1 generated from source with three-axis drift validation in the build; three k8s probes with specified schemas, security-auth-magic-link and log-noise exclusions, and documented failure modes; four auth classes enforced in middleware with x-auth-class contract validation; RFC 7807 on every failure path including pre-routing ones; cursor pagination with write-stability; strict unknown-parameter rejection; idempotency-key replay semantics with declared TTL; per-class rate limits with honest Retry-After; structured JSON logs, RED metrics, and OpenTelemetry spans off one shared request context; forward-only migrations with named reverts and a live /v1/_meta report; secrets never logged, PII redacted by stated policy, TLS outside development, CORS deny-by-default. Every bar is carried by ACs in the doc set, not by this README.
|
|
41
|
+
|
|
42
|
+
## Breaking change in v2.0.0 (2026-09-04)
|
|
43
|
+
|
|
44
|
+
This blueprint no longer binds literal probe path strings. The three probe surfaces (liveness, readiness, startup) are served at the RESOLVED paths supplied by either the composed observability-probe-endpoints blueprint (Kubernetes profile default `/live`, `/ready`, and, when enabled, `/startup`; loadBalancer profile default `/health`) or by project configuration under `probeInterface.paths` in the essentials-alone case. REQ-006, US-2108 (all eight ACs), TAC-306, and US-2103 (versioning-exemption AC) were reshaped. Spec: `projects/rcf-lite-wsd/specs/rcf-lite-probe-path-alignment-spec-2026-09-04.md` section 5. Migration: project FBSes and TCs that bind literal `/healthz/live`, `/healthz/ready`, or `/healthz/startup` strings become one edit each to bind the resolved path set; `rcf audit coverage --strict` catches project-side TCs that still hold the literal strings after re-apply. See CHANGELOG.md.
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-006.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"reqId": "application-api-rest-REQ-006",
|
|
3
3
|
"prdId": "PRD-001",
|
|
4
|
-
"title": "
|
|
5
|
-
"description": "The service exposes three probe endpoints.
|
|
4
|
+
"title": "Probe endpoints: liveness, readiness, and startup with specified schemas and exclusions (paths resolved by the composed observability-probe-endpoints blueprint or by project configuration)",
|
|
5
|
+
"description": "The service exposes three probe endpoints: liveness, readiness, and startup, with specified response schemas and exclusions. The liveness probe returns 200 whenever the process can serve any request and performs no dependency checks. The readiness probe returns 200 only when declared downstream dependencies (database, cache, queues) are reachable, and 503 with a body listing the failed checks otherwise. The startup probe returns 200 once initialisation (migrations, cache warm, config load) is complete and a non-200 with the pending steps before that. Each probe has a specified response schema, sits outside the auth middleware and rate limiter, is excluded from info-level metrics and log noise, and has a documented failure mode. The probe PATHS are supplied by the composed `observability-probe-endpoints` blueprint (Kubernetes profile default: `/live`, `/ready`, and, when enabled, `/startup`), or by project-level configuration under `probeInterface.paths` in the essentials-alone case; this blueprint does not bind literal paths. When probe-endpoints is composed the auth-middleware installer consumes the exempt path set that probe-endpoints emits and no other, so the auth-exempt entries exactly match the resolved probe path set.",
|
|
6
6
|
"category": "functional",
|
|
7
7
|
"domain": "operability",
|
|
8
8
|
"priority": "must",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"blueprint:application-api-rest",
|
|
12
12
|
"category:06-probe-endpoints"
|
|
13
13
|
],
|
|
14
|
-
"version": "
|
|
14
|
+
"version": "2.0.0",
|
|
15
15
|
"status": "approved",
|
|
16
16
|
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
-
"updatedAt": "2026-
|
|
17
|
+
"updatedAt": "2026-09-04T00:00:00Z"
|
|
18
18
|
}
|
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
"tacId": "TAC-306-application-api-rest-operability",
|
|
3
3
|
"prdId": "PRD-001",
|
|
4
4
|
"tadId": "TAD-001",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "2.0.0",
|
|
6
6
|
"status": "approved",
|
|
7
|
-
"name": "Operability: probes, lifecycle, migrations, and the meta endpoint",
|
|
7
|
+
"name": "Operability: probes (at resolved paths), lifecycle, migrations, and the meta endpoint",
|
|
8
8
|
"purpose": "Owns what an orchestrator and an operator need from the outside: the three probe endpoints, the initialisation lifecycle they report on, the forward-only migration machinery, and the /v1/_meta version report.",
|
|
9
9
|
"responsibilities": [
|
|
10
|
-
"Serve
|
|
11
|
-
"Run the initialisation sequence (config load, migrations, cache warm) and expose its progress to the startup probe (AC-2108-4).",
|
|
10
|
+
"Serve the three probe surfaces (liveness, readiness, startup) at their resolved paths, with the specified schemas, exclusions, and documented failure modes; the path resolution is delegated to observability-probe-endpoints when composed (Kubernetes profile default /live, /ready, and, when enabled, /startup) or to project-level probeInterface.paths configuration when composed with observability-essentials alone (application-api-rest-REQ-006).",
|
|
11
|
+
"Run the initialisation sequence (config load, migrations, cache warm) and expose its progress to the resolved startup probe when the startup path is bound (AC-2108-4).",
|
|
12
12
|
"Register and execute declared readiness checks against downstream dependencies, reporting per-check results in the ready body (AC-2108-2, AC-2108-3).",
|
|
13
13
|
"Apply migrations strictly forward with named reverts and deterministic ordering (application-api-rest-REQ-014).",
|
|
14
|
-
"Serve /v1/_meta reporting the live schema version and application version, sourced from the migration record, under a declared auth class (application-api-rest-US-2118)."
|
|
14
|
+
"Serve /v1/_meta reporting the live schema version and application version, sourced from the migration record, under a declared auth class (application-api-rest-US-2118).",
|
|
15
|
+
"Consume the resolved probe path set (produced by observability-probe-endpoints via TAC-1501 getExemptPathSet or derived from project probeInterface.paths configuration) as the exact auth-exempt list for the probe surfaces; refuse any hand-authored auth-exempt entry that duplicates or diverges from the resolved set (AC-2108-5)."
|
|
15
16
|
],
|
|
16
17
|
"internalStructure": "A lifecycle coordinator owning initialisation state, a check registry the readiness probe iterates, and the migration runner; probe handlers are thin reads over this state, never performing work themselves.",
|
|
17
18
|
"interfaces": [
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
{
|
|
24
25
|
"name": "probe endpoints",
|
|
25
26
|
"kind": "http",
|
|
26
|
-
"description": "The three
|
|
27
|
+
"description": "The three probe surfaces (liveness, readiness, startup) at their resolved paths, and /v1/_meta, with their specified response schemas. The path resolution is delegated to observability-probe-endpoints or to project-level probeInterface.paths configuration; this TAC binds NO literal path strings for the probe surfaces from v2.0.0."
|
|
27
28
|
}
|
|
28
29
|
],
|
|
29
30
|
"dependencies": [
|
|
@@ -40,7 +41,7 @@
|
|
|
40
41
|
"description": "Probe outcomes land in the dedicated probe metric."
|
|
41
42
|
}
|
|
42
43
|
],
|
|
43
|
-
"tradeoffs": "Probe handlers reading pre-computed state (rather than checking dependencies inline) keeps probes cheap and non-amplifying under orchestrator polling, at the cost of a bounded staleness window in readiness reporting; the check interval is the tuning knob and is declared configuration.",
|
|
44
|
+
"tradeoffs": "Probe handlers reading pre-computed state (rather than checking dependencies inline) keeps probes cheap and non-amplifying under orchestrator polling, at the cost of a bounded staleness window in readiness reporting; the check interval is the tuning knob and is declared configuration. Path resolution is delegated so a project can compose the api-rest blueprint with either observability-probe-endpoints (elicit-and-adapt path set) or observability-essentials alone (project-supplied path set) without editing this TAC; the v2.0.0 breaking change is exactly this delegation.",
|
|
44
45
|
"createdAt": "2026-08-19T10:00:00Z",
|
|
45
|
-
"updatedAt": "2026-
|
|
46
|
+
"updatedAt": "2026-09-04T00:00:00Z"
|
|
46
47
|
}
|
package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2103.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"usId": "application-api-rest-US-2103",
|
|
3
3
|
"prdId": "PRD-001",
|
|
4
4
|
"reqId": "application-api-rest-REQ-003",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "2.0.0",
|
|
6
6
|
"status": "approved",
|
|
7
7
|
"title": "Path-versioned contract with announced deprecation and a stated drop policy",
|
|
8
8
|
"asA": "API consumer maintaining a long-lived integration",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"description": "Every business endpoint lives under a major-version path prefix (/v1/...); only the probe endpoints and the documentation endpoints sit outside it.",
|
|
15
15
|
"given": "the generated OpenAPI path inventory",
|
|
16
16
|
"when": "paths are checked for the version prefix",
|
|
17
|
-
"then": "every path is version-prefixed except
|
|
17
|
+
"then": "every path is version-prefixed except the resolved probe paths, /openapi.*, and /docs",
|
|
18
18
|
"testable": true,
|
|
19
19
|
"scope": "runtime"
|
|
20
20
|
},
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"TAC-304-application-api-rest-resource-layer"
|
|
60
60
|
],
|
|
61
61
|
"createdAt": "2026-08-19T10:00:00Z",
|
|
62
|
-
"updatedAt": "2026-
|
|
62
|
+
"updatedAt": "2026-09-04T00:00:00Z"
|
|
63
63
|
}
|
package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2108.json
CHANGED
|
@@ -2,62 +2,62 @@
|
|
|
2
2
|
"usId": "application-api-rest-US-2108",
|
|
3
3
|
"prdId": "PRD-001",
|
|
4
4
|
"reqId": "application-api-rest-REQ-006",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "2.0.0",
|
|
6
6
|
"status": "approved",
|
|
7
|
-
"title": "Liveness, readiness, and startup probes that tell the orchestrator the truth",
|
|
7
|
+
"title": "Liveness, readiness, and startup probes that tell the orchestrator the truth, at the resolved paths",
|
|
8
8
|
"asA": "platform operator running the service under Kubernetes",
|
|
9
|
-
"iWant": "three probe endpoints that each answer their one question honestly and cheaply",
|
|
9
|
+
"iWant": "three probe endpoints (at their resolved paths) that each answer their one question honestly and cheaply",
|
|
10
10
|
"soThat": "the orchestrator restarts, routes, and rolls out instances on real signals",
|
|
11
11
|
"acceptanceCriteria": [
|
|
12
12
|
{
|
|
13
13
|
"id": "AC-2108-1",
|
|
14
|
-
"description": "GET
|
|
15
|
-
"given": "a running instance with a deliberately unreachable database",
|
|
16
|
-
"when": "
|
|
14
|
+
"description": "GET on the resolved liveness path returns 200 with the specified response schema whenever the process can serve any request, and performs no dependency checks whatsoever.",
|
|
15
|
+
"given": "a running instance with a deliberately unreachable database and the liveness path resolved either by observability-probe-endpoints (Kubernetes profile default /live) or by project configuration",
|
|
16
|
+
"when": "the resolved liveness path is called",
|
|
17
17
|
"then": "it returns 200 against the specified schema, unaffected by the dependency outage",
|
|
18
18
|
"testable": true,
|
|
19
19
|
"scope": "runtime"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"id": "AC-2108-2",
|
|
23
|
-
"description": "GET
|
|
24
|
-
"given": "an instance with all declared dependencies reachable",
|
|
25
|
-
"when": "
|
|
23
|
+
"description": "GET on the resolved readiness path returns 200 only when every declared downstream dependency check (database, cache, queues) passes.",
|
|
24
|
+
"given": "an instance with all declared dependencies reachable and the readiness path resolved (Kubernetes profile default /ready) or supplied by project configuration",
|
|
25
|
+
"when": "the resolved readiness path is called",
|
|
26
26
|
"then": "it returns 200 with the specified schema listing each check as passing",
|
|
27
27
|
"testable": true,
|
|
28
28
|
"scope": "runtime"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"id": "AC-2108-3",
|
|
32
|
-
"description": "GET
|
|
33
|
-
"given": "an instance with one declared dependency down",
|
|
34
|
-
"when": "
|
|
32
|
+
"description": "GET on the resolved readiness path returns 503 with a body enumerating the failed checks by name when any declared dependency is unreachable.",
|
|
33
|
+
"given": "an instance with one declared dependency down and the readiness path resolved as above",
|
|
34
|
+
"when": "the resolved readiness path is called",
|
|
35
35
|
"then": "it returns 503 and the body names the failing check while still listing the passing ones",
|
|
36
36
|
"testable": true,
|
|
37
37
|
"scope": "runtime"
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
"id": "AC-2108-4",
|
|
41
|
-
"description": "GET
|
|
42
|
-
"given": "an instance mid-initialisation and the same instance after initialisation",
|
|
43
|
-
"when": "
|
|
41
|
+
"description": "GET on the resolved startup path returns 200 only after initialisation (migrations applied, cache warmed, config loaded) completes, and a non-200 with the pending steps before that. The startup path is available when the composed observability-probe-endpoints blueprint enables it via `probeInterface.options.kubernetes.startup.enabled: true` or the project supplies `probeInterface.paths.startup` in configuration.",
|
|
42
|
+
"given": "an instance mid-initialisation and the same instance after initialisation, with the startup path resolved (Kubernetes profile default /startup when enabled) or supplied by project configuration",
|
|
43
|
+
"when": "the resolved startup path is called in each state",
|
|
44
44
|
"then": "the mid-initialisation call is non-200 naming pending steps; the post-initialisation call is 200",
|
|
45
45
|
"testable": true,
|
|
46
46
|
"scope": "runtime"
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
"id": "AC-2108-5",
|
|
50
|
-
"description": "All three probes sit outside the auth middleware and outside rate limiting:
|
|
51
|
-
"given": "a running instance",
|
|
52
|
-
"when": "each probe is called with no credentials at sustained frequency",
|
|
53
|
-
"then": "every call is answered on probe semantics alone, never with an auth or rate-limit status",
|
|
50
|
+
"description": "All three probes sit outside the auth middleware and outside rate limiting: the auth-middleware installer consumes exactly the resolved probe path set (the same list observability-probe-endpoints emits via TAC-1501 getExemptPathSet, or the exact set derived from `probeInterface.paths` in the essentials-alone case), so each probe succeeds with no credentials and is never 401, 403, or 429; adjacent routes never fall under the same exemption.",
|
|
51
|
+
"given": "a running instance with the resolved probe path set exposed to the auth-middleware installer",
|
|
52
|
+
"when": "each probe is called with no credentials at sustained frequency AND an adjacent user-traffic route is also called unauthenticated",
|
|
53
|
+
"then": "every probe call is answered on probe semantics alone, never with an auth or rate-limit status; the adjacent route returns the auth middleware unauthenticated response",
|
|
54
54
|
"testable": true,
|
|
55
55
|
"scope": "runtime"
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
"id": "AC-2108-6",
|
|
59
|
-
"description": "Probe requests do not appear in info-level request logs and are excluded from RED endpoint metrics; probe outcomes are recorded under their own dedicated metric.",
|
|
60
|
-
"given": "a period of steady probe traffic",
|
|
59
|
+
"description": "Probe requests (at their resolved paths) do not appear in info-level request logs and are excluded from RED endpoint metrics; probe outcomes are recorded under their own dedicated metric.",
|
|
60
|
+
"given": "a period of steady probe traffic on the resolved probe paths",
|
|
61
61
|
"when": "info-level logs and endpoint metrics are inspected",
|
|
62
62
|
"then": "probe requests appear in neither, and the dedicated probe-outcome metric carries their results",
|
|
63
63
|
"testable": true,
|
|
@@ -65,18 +65,18 @@
|
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
"id": "AC-2108-7",
|
|
68
|
-
"description": "
|
|
69
|
-
"given": "the generated OpenAPI document",
|
|
68
|
+
"description": "The generated OpenAPI document names the three probe surfaces (liveness, readiness, startup) and their resolved paths, plus each probes success and failure schemas and its documented failure mode; the resolved paths are computed at documentation-generation time from the composed observability-probe-endpoints blueprint or from project configuration.",
|
|
69
|
+
"given": "the generated OpenAPI document produced for a project that has resolved its probe paths",
|
|
70
70
|
"when": "the three probe entries are read",
|
|
71
|
-
"then": "each declares its success and failure schemas and its documented failure mode",
|
|
71
|
+
"then": "each declares its success and failure schemas and its documented failure mode; every entry path is the resolved path (no legacy literal probe-path prefix appears in the generated document)",
|
|
72
72
|
"testable": true,
|
|
73
73
|
"scope": "runtime"
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
76
|
"id": "AC-2108-8",
|
|
77
|
-
"description": "Readiness reflects recovery: when a failed dependency becomes reachable again,
|
|
77
|
+
"description": "Readiness reflects recovery: when a failed dependency becomes reachable again, GET on the resolved readiness path returns to 200 without a process restart.",
|
|
78
78
|
"given": "an instance whose dependency outage has been restored",
|
|
79
|
-
"when": "
|
|
79
|
+
"when": "the resolved readiness path is called after restoration",
|
|
80
80
|
"then": "it returns 200 without the process having restarted",
|
|
81
81
|
"testable": true,
|
|
82
82
|
"scope": "runtime"
|
|
@@ -86,5 +86,5 @@
|
|
|
86
86
|
"TAC-306-application-api-rest-operability"
|
|
87
87
|
],
|
|
88
88
|
"createdAt": "2026-08-19T10:00:00Z",
|
|
89
|
-
"updatedAt": "2026-
|
|
89
|
+
"updatedAt": "2026-09-04T00:00:00Z"
|
|
90
90
|
}
|
|
@@ -28,14 +28,14 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
28
28
|
| hello-panel (walkthrough exemplar) | 4101-4899 | 4xx | doc-reserved; teaching exemplar in `packages/rcf-lite/docs/blueprint-authoring-walkthrough.md`, not shipped as a blueprint directory | `operatorPanel` |
|
|
29
29
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
30
30
|
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
31
|
-
| observability-essentials | 7101-7899 | 8xx | shipped
|
|
31
|
+
| observability-essentials | 7101-7899 | 8xx | shipped v2.0.0 | `statusPageContract` |
|
|
32
32
|
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
33
33
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
34
34
|
| security-auth-oauth2 | 10101-10899 | 11xx | shipped v1.0.0 | `authModel` |
|
|
35
35
|
| security-auth-keycloak | 11101-11899 | 12xx | shipped v1.0.0 | `authModel` |
|
|
36
36
|
| deploy-cloudflare-workers | 12101-12899 | 13xx | shipped v1.0.0 | `deploymentTarget` |
|
|
37
37
|
| persistence-data-d1 | 13101-13899 | 14xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
38
|
-
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.
|
|
38
|
+
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.1.0 | `healthProbes`, `readinessSemantics` |
|
|
39
39
|
|
|
40
40
|
Suffix-family ids (ADR, TAC): SPA numbers in the 2xx range, this package takes 3xx (ADR-301 to ADR-308, TAC-301 to TAC-306); the next blueprint should take 4xx.
|
|
41
41
|
|
|
@@ -26,7 +26,7 @@ Any project whose primary surface is an HTTP API meant to be consumed by clients
|
|
|
26
26
|
|
|
27
27
|
## What a good outcome looks like
|
|
28
28
|
|
|
29
|
-
Attack the finished service from the outside and try to catch it lying: fetch /docs and call an endpoint straight from the spec, send garbage JSON, reuse an idempotency key with a different body, hammer a public endpoint past its limit, kill the database and watch
|
|
29
|
+
Attack the finished service from the outside and try to catch it lying: fetch /docs and call an endpoint straight from the spec, send garbage JSON, reuse an idempotency key with a different body, hammer a public endpoint past its limit, kill the database and watch the resolved readiness path tell the truth while the resolved liveness path stays up, grep the logs for the bearer token you just used. A build that honours this doc set answers every one of those correctly. That is the measure: what an integrating client and an on-call engineer get out of the box.
|
|
30
30
|
|
|
31
31
|
## Your decisions that remain open
|
|
32
32
|
|
|
@@ -39,3 +39,7 @@ Attack the finished service from the outside and try to catch it lying: fetch /d
|
|
|
39
39
|
## Cost honesty
|
|
40
40
|
|
|
41
41
|
This doc set makes an API slower to declare done, on purpose: 117 criteria is the price of "no endpoint ships undocumented, unmeasured, or unguarded". If you are prototyping a throwaway integration, that price is wrong; skip the blueprint rather than opting out of half of it. If other people's code will call this service, the price is the product.
|
|
42
|
+
|
|
43
|
+
## Composing with observability-probe-endpoints and observability-essentials (v2.0.0)
|
|
44
|
+
|
|
45
|
+
From v2.0.0 this blueprint no longer binds literal probe path strings. The three probe surfaces (liveness, readiness, startup) are served at the RESOLVED paths supplied by either the composed observability-probe-endpoints blueprint (Kubernetes profile default `/live`, `/ready`, and, when enabled, `/startup`; `loadBalancer` profile default `/health`) or by project configuration under `probeInterface.paths` in the essentials-alone case. The auth-middleware installer consumes exactly the exempt path set that observability-probe-endpoints emits via TAC-1501 `getExemptPathSet` (or the exact set derived from `probeInterface.paths` in the essentials-alone case); adjacent routes never fall under the same exemption. The generated OpenAPI document names each probe surface and its resolved path at documentation-generation time. The three-way composition invariants live in `packages/rcf-lite/test/blueprint/probe-path-alignment.test.js`.
|
|
@@ -33,14 +33,14 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
33
33
|
| hello-panel (walkthrough exemplar) | 4101-4899 | 4xx | doc-reserved; teaching exemplar in `packages/rcf-lite/docs/blueprint-authoring-walkthrough.md`, not shipped as a blueprint directory | `operatorPanel` |
|
|
34
34
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
35
35
|
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
36
|
-
| observability-essentials | 7101-7899 | 8xx | shipped
|
|
36
|
+
| observability-essentials | 7101-7899 | 8xx | shipped v2.0.0 | `statusPageContract` |
|
|
37
37
|
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
38
38
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
39
39
|
| security-auth-oauth2 | 10101-10899 | 11xx | shipped v1.0.0 | `authModel` |
|
|
40
40
|
| security-auth-keycloak | 11101-11899 | 12xx | shipped v1.0.0 | `authModel` |
|
|
41
41
|
| deploy-cloudflare-workers | 12101-12899 | 13xx | shipped v1.0.0 | `deploymentTarget` |
|
|
42
42
|
| persistence-data-d1 | 13101-13899 | 14xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
43
|
-
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.
|
|
43
|
+
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.1.0 | `healthProbes`, `readinessSemantics` |
|
|
44
44
|
|
|
45
45
|
SPA v1.1.0 stays on the LOW end of its band: v1.0.0 occupied US-1101 through US-1128; v1.1.0 adds US-1129 and US-1130, leaving headroom above 1130 for future minor bumps and for project-side stories that mechanically derive to the 11xx numeric range.
|
|
46
46
|
|
|
@@ -41,14 +41,14 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
41
41
|
| hello-panel (walkthrough exemplar) | 4101-4899 | 4xx | doc-reserved; teaching exemplar in `packages/rcf-lite/docs/blueprint-authoring-walkthrough.md`, not shipped as a blueprint directory | `operatorPanel` |
|
|
42
42
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
43
43
|
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
44
|
-
| observability-essentials | 7101-7899 | 8xx | shipped
|
|
44
|
+
| observability-essentials | 7101-7899 | 8xx | shipped v2.0.0 | `statusPageContract` |
|
|
45
45
|
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
46
46
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
47
47
|
| security-auth-oauth2 | 10101-10899 | 11xx | shipped v1.0.0 | `authModel` |
|
|
48
48
|
| security-auth-keycloak | 11101-11899 | 12xx | shipped v1.0.0 | `authModel` |
|
|
49
49
|
| deploy-cloudflare-workers | 12101-12899 | 13xx | shipped v1.0.0 | `deploymentTarget` |
|
|
50
50
|
| persistence-data-d1 | 13101-13899 | 14xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
51
|
-
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.
|
|
51
|
+
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.1.0 | `healthProbes`, `readinessSemantics` |
|
|
52
52
|
|
|
53
53
|
US 6101-6110 sit at the LOW end of the 6101-6899 band on purpose. A project-side story that mechanically derives from `delivery-ci-workflows-REQ-011` into the number `6111` would collide against delivery-ci-workflows-US-6111 in this package; the band leaves headroom at the HIGH end (US 6181-6899) so a project's own stories anchored to delivery-ci-workflows REQs can allocate without conflict. The watchpost run4 lesson applies here too.
|
|
54
54
|
|
|
@@ -27,14 +27,14 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
27
27
|
| hello-panel (walkthrough exemplar) | 4101-4899 | 4xx | doc-reserved; teaching exemplar in `packages/rcf-lite/docs/blueprint-authoring-walkthrough.md`, not shipped as a blueprint directory | `operatorPanel` |
|
|
28
28
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
29
29
|
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
30
|
-
| observability-essentials | 7101-7899 | 8xx | shipped
|
|
30
|
+
| observability-essentials | 7101-7899 | 8xx | shipped v2.0.0 | `statusPageContract` |
|
|
31
31
|
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
32
32
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
33
33
|
| security-auth-oauth2 | 10101-10899 | 11xx | shipped v1.0.0 | `authModel` |
|
|
34
34
|
| security-auth-keycloak | 11101-11899 | 12xx | shipped v1.0.0 | `authModel` |
|
|
35
35
|
| deploy-cloudflare-workers | 12101-12899 | 13xx | shipped v1.0.0 | `deploymentTarget` |
|
|
36
36
|
| persistence-data-d1 | 13101-13899 | 14xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
37
|
-
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.
|
|
37
|
+
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.1.0 | `healthProbes`, `readinessSemantics` |
|
|
38
38
|
|
|
39
39
|
US 12101-12112 sit at the LOW end of the 12101-12899 band on purpose. A project-side story that mechanically derives from a deploy-cloudflare-workers REQ id into the number `12112` would collide against deploy-cloudflare-workers-US-12112 in this package; the band leaves headroom at the HIGH end (US 12181-12899) so a project's own stories anchored to deploy-cloudflare-workers REQs can allocate without conflict. The watchpost run4 lesson applies here too. Band spacing between the last shipped block (security-secrets-management, 8101-8899, 9xx) and this one (12101-12899, 13xx) leaves the 9xxx-11xxx US bands and the 10xx-12xx suffix blocks open for concurrent-lane authoring so a peer authoring another blueprint in the same PR window does not collide with this one.
|
|
40
40
|
|
|
@@ -23,14 +23,14 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
23
23
|
| hello-panel (walkthrough exemplar) | 4101-4899 | 4xx | doc-reserved; teaching exemplar in `packages/rcf-lite/docs/blueprint-authoring-walkthrough.md`, not shipped as a blueprint directory | `operatorPanel` |
|
|
24
24
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
25
25
|
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
26
|
-
| observability-essentials | 7101-7899 | 8xx | shipped
|
|
26
|
+
| observability-essentials | 7101-7899 | 8xx | shipped v2.0.0 | `statusPageContract` |
|
|
27
27
|
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
28
28
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
29
29
|
| security-auth-oauth2 | 10101-10899 | 11xx | shipped v1.0.0 | `authModel` |
|
|
30
30
|
| security-auth-keycloak | 11101-11899 | 12xx | shipped v1.0.0 | `authModel` |
|
|
31
31
|
| deploy-cloudflare-workers | 12101-12899 | 13xx | shipped v1.0.0 | `deploymentTarget` |
|
|
32
32
|
| persistence-data-d1 | 13101-13899 | 14xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
33
|
-
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.
|
|
33
|
+
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.1.0 | `healthProbes`, `readinessSemantics` |
|
|
34
34
|
|
|
35
35
|
US 4101-4106 sit at the LOW end of the 4101-4899 band on purpose. A project-side story that mechanically derives from an email-smtp-resend REQ id into the number `4106` (leading `4` + sequence `106`) would collide against email-smtp-resend-US-4106 in this package; the band leaves headroom at the HIGH end (US 4181-4899) so a project's own stories anchored to email-smtp-resend REQs can allocate without conflict. The watchpost run4 lesson applies here too.
|
|
36
36
|
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
# Observability blueprint (
|
|
1
|
+
# Observability blueprint (v2.0.0)
|
|
2
2
|
|
|
3
|
-
The fifth content blueprint on the rcf-build-lite blueprint mechanism (design brief v2, ratified; Phase 5 of the blueprint programme). Scope: two HTTP health probes (liveness
|
|
3
|
+
The fifth content blueprint on the rcf-build-lite blueprint mechanism (design brief v2, ratified; Phase 5 of the blueprint programme). Scope: two HTTP health probes (liveness and readiness, path-neutral from v2.0.0: liveness answering strictly on in-process state, readiness aggregating over an explicit boot-time-declared dependency set with strict-any-fail semantics), a public status page rendering a declared component list plus stable-fielded incident notices, and a durable notification-outcome sink recording every attempt's outcome for later query by recipient and window. Targeted at small greenfield rcf-lite projects. Historical uptime charts, metrics export, and distributed tracing are documented future variants; the v2.0.0 blueprint ships the current-state contract only.
|
|
4
|
+
|
|
5
|
+
## Breaking change in v2.0.0 (2026-09-04)
|
|
6
|
+
|
|
7
|
+
This blueprint no longer claims the shelf-wide `healthProbes` or `readinessSemantics` global topics. Path binding moved to `observability-probe-endpoints` (spec `projects/rcf-lite-wsd/specs/rcf-lite-probe-path-alignment-spec-2026-09-04.md`, section 4). Essentials-alone projects now supply `probeInterface.paths.liveness` and `probeInterface.paths.readiness` at boot (a one-line configuration change per environment). Projects that compose `observability-probe-endpoints` v1.1.0 or later inherit its resolved path set automatically and see no functional change beyond the topic ownership. See CHANGELOG.md for the full migration checklist.
|
|
4
8
|
|
|
5
9
|
## Apply
|
|
6
10
|
|
|
@@ -1,45 +1,137 @@
|
|
|
1
1
|
{
|
|
2
2
|
"slug": "observability-essentials",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"category": "observability",
|
|
5
5
|
"contributions": [
|
|
6
|
-
{
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
{
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
{
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
{
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
6
|
+
{
|
|
7
|
+
"id": "observability-essentials-REQ-001",
|
|
8
|
+
"kind": "req",
|
|
9
|
+
"path": "requirements/observability-essentials-req-001.json"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "observability-essentials-REQ-002",
|
|
13
|
+
"kind": "req",
|
|
14
|
+
"path": "requirements/observability-essentials-req-002.json"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "observability-essentials-REQ-003",
|
|
18
|
+
"kind": "req",
|
|
19
|
+
"path": "requirements/observability-essentials-req-003.json"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "observability-essentials-REQ-004",
|
|
23
|
+
"kind": "req",
|
|
24
|
+
"path": "requirements/observability-essentials-req-004.json"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "observability-essentials-REQ-005",
|
|
28
|
+
"kind": "req",
|
|
29
|
+
"path": "requirements/observability-essentials-req-005.json"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "observability-essentials-REQ-006",
|
|
33
|
+
"kind": "req",
|
|
34
|
+
"path": "requirements/observability-essentials-req-006.json"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "observability-essentials-REQ-007",
|
|
38
|
+
"kind": "req",
|
|
39
|
+
"path": "requirements/observability-essentials-req-007.json"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "observability-essentials-REQ-008",
|
|
43
|
+
"kind": "req",
|
|
44
|
+
"path": "requirements/observability-essentials-req-008.json"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "observability-essentials-REQ-009",
|
|
48
|
+
"kind": "req",
|
|
49
|
+
"path": "requirements/observability-essentials-req-009.json"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "observability-essentials-REQ-010",
|
|
53
|
+
"kind": "req",
|
|
54
|
+
"path": "requirements/observability-essentials-req-010.json"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "observability-essentials-US-7101",
|
|
58
|
+
"kind": "us",
|
|
59
|
+
"path": "user-stories/observability-essentials-us-7101.json"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "observability-essentials-US-7102",
|
|
63
|
+
"kind": "us",
|
|
64
|
+
"path": "user-stories/observability-essentials-us-7102.json"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "observability-essentials-US-7103",
|
|
68
|
+
"kind": "us",
|
|
69
|
+
"path": "user-stories/observability-essentials-us-7103.json"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "observability-essentials-US-7104",
|
|
73
|
+
"kind": "us",
|
|
74
|
+
"path": "user-stories/observability-essentials-us-7104.json"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "observability-essentials-US-7105",
|
|
78
|
+
"kind": "us",
|
|
79
|
+
"path": "user-stories/observability-essentials-us-7105.json"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "observability-essentials-US-7106",
|
|
83
|
+
"kind": "us",
|
|
84
|
+
"path": "user-stories/observability-essentials-us-7106.json"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "observability-essentials-US-7107",
|
|
88
|
+
"kind": "us",
|
|
89
|
+
"path": "user-stories/observability-essentials-us-7107.json"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "observability-essentials-US-7108",
|
|
93
|
+
"kind": "us",
|
|
94
|
+
"path": "user-stories/observability-essentials-us-7108.json"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "observability-essentials-US-7109",
|
|
98
|
+
"kind": "us",
|
|
99
|
+
"path": "user-stories/observability-essentials-us-7109.json"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "observability-essentials-US-7110",
|
|
103
|
+
"kind": "us",
|
|
104
|
+
"path": "user-stories/observability-essentials-us-7110.json"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "TAC-801-observability-essentials-liveness-probe",
|
|
108
|
+
"kind": "tac",
|
|
109
|
+
"path": "tacs/tac-801-observability-essentials-liveness-probe.json"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "TAC-802-observability-essentials-readiness-probe",
|
|
113
|
+
"kind": "tac",
|
|
114
|
+
"path": "tacs/tac-802-observability-essentials-readiness-probe.json"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "TAC-803-observability-essentials-status-page",
|
|
118
|
+
"kind": "tac",
|
|
119
|
+
"path": "tacs/tac-803-observability-essentials-status-page.json"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "TAC-804-observability-essentials-notification-outcome",
|
|
123
|
+
"kind": "tac",
|
|
124
|
+
"path": "tacs/tac-804-observability-essentials-notification-outcome.json"
|
|
125
|
+
},
|
|
30
126
|
{
|
|
31
127
|
"id": "ADR-801-observability-essentials-health-probes",
|
|
32
128
|
"kind": "adr",
|
|
33
|
-
"path": "adrs/adr-801-observability-essentials-health-probes.json"
|
|
34
|
-
"scope": "global",
|
|
35
|
-
"topic": "healthProbes"
|
|
129
|
+
"path": "adrs/adr-801-observability-essentials-health-probes.json"
|
|
36
130
|
},
|
|
37
131
|
{
|
|
38
132
|
"id": "ADR-802-observability-essentials-readiness-semantics",
|
|
39
133
|
"kind": "adr",
|
|
40
|
-
"path": "adrs/adr-802-observability-essentials-readiness-semantics.json"
|
|
41
|
-
"scope": "global",
|
|
42
|
-
"topic": "readinessSemantics"
|
|
134
|
+
"path": "adrs/adr-802-observability-essentials-readiness-semantics.json"
|
|
43
135
|
},
|
|
44
136
|
{
|
|
45
137
|
"id": "ADR-803-observability-essentials-status-page-contract",
|
|
@@ -48,7 +140,15 @@
|
|
|
48
140
|
"scope": "global",
|
|
49
141
|
"topic": "statusPageContract"
|
|
50
142
|
},
|
|
51
|
-
{
|
|
52
|
-
|
|
143
|
+
{
|
|
144
|
+
"id": "ADR-804-observability-essentials-probe-secrecy",
|
|
145
|
+
"kind": "adr",
|
|
146
|
+
"path": "adrs/adr-804-observability-essentials-probe-secrecy.json"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"id": "ADR-805-observability-essentials-notification-outcome-model",
|
|
150
|
+
"kind": "adr",
|
|
151
|
+
"path": "adrs/adr-805-observability-essentials-notification-outcome-model.json"
|
|
152
|
+
}
|
|
53
153
|
]
|
|
54
154
|
}
|