@afokapu/atdd-bun 0.6.2 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -3
- package/conventions/coder.bun/coder.bun.telemetry-forbidden-properties.convention.yaml +51 -0
- package/conventions/coder.bun/coder.bun.telemetry-implementation-binding.convention.yaml +45 -0
- package/conventions/coder.bun/coder.bun.telemetry-raw-string-emit.convention.yaml +53 -0
- package/conventions/coder.bun/coder.bun.telemetry-source-binding.convention.yaml +48 -0
- package/conventions/coder.bun/coder.bun.telemetry-vendor-sdk.convention.yaml +51 -0
- package/conventions/planner.telemetry/planner.telemetry.acceptance-decision.convention.yaml +58 -0
- package/conventions/planner.telemetry/planner.telemetry.logical-ownership.convention.yaml +50 -0
- package/conventions/planner.telemetry/planner.telemetry.metric-cardinality.convention.yaml +47 -0
- package/conventions/planner.telemetry/planner.telemetry.tracking-plan-schema.convention.yaml +75 -0
- package/conventions/tester.bun/tester.bun.telemetry-captured-sink.convention.yaml +47 -0
- package/conventions/tester.bun/tester.bun.telemetry-identity-assertion.convention.yaml +44 -0
- package/conventions/tester.bun/tester.bun.telemetry-required-item-coverage.convention.yaml +44 -0
- package/conventions/tester.bun/tester.bun.telemetry-test-binding.convention.yaml +52 -0
- package/conventions/tester.bun/tester.bun.telemetry-timing-semantics.convention.yaml +53 -0
- package/detectors/bun_telemetry_code/atdd.implementation.yaml +24 -0
- package/detectors/bun_telemetry_code/calls.mjs +104 -0
- package/detectors/bun_telemetry_code/checks/t_forbidden_properties.mjs +46 -0
- package/detectors/bun_telemetry_code/checks/t_implementation_binding.mjs +41 -0
- package/detectors/bun_telemetry_code/checks/t_raw_string_emit.mjs +34 -0
- package/detectors/bun_telemetry_code/checks/t_source_binding.mjs +48 -0
- package/detectors/bun_telemetry_code/checks/t_vendor_sdk.mjs +38 -0
- package/detectors/bun_telemetry_code/detect.mjs +50 -0
- package/detectors/bun_telemetry_code/fixtures/clean/plan/commons/E001.yaml +10 -0
- package/detectors/bun_telemetry_code/fixtures/clean/plan/commons/E002.yaml +7 -0
- package/detectors/bun_telemetry_code/fixtures/clean/plan/commons/_commons.yaml +6 -0
- package/detectors/bun_telemetry_code/fixtures/clean/src/wagons/commons/features/ingress/domain/accept-response.ts +8 -0
- package/detectors/bun_telemetry_code/fixtures/clean/src/wagons/commons/features/ingress/infrastructure/otel-adapter.ts +8 -0
- package/detectors/bun_telemetry_code/fixtures/clean/telemetry/commons/response-invocation-accepted/event.be.json +16 -0
- package/detectors/bun_telemetry_code/fixtures/clean/telemetry/commons/response-invocation-accepted/metric.be.duration.json +19 -0
- package/detectors/bun_telemetry_code/fixtures/clean/tests/wagons/commons/features/ingress/unit/accept-response.telemetry.test.ts +13 -0
- package/detectors/bun_telemetry_code/fixtures/clean/tests/wagons/commons/features/ingress/unit/accept-response.test.ts +9 -0
- package/detectors/bun_telemetry_code/fixtures/dirty/plan/commons/E001.yaml +8 -0
- package/detectors/bun_telemetry_code/fixtures/dirty/plan/commons/_commons.yaml +6 -0
- package/detectors/bun_telemetry_code/fixtures/dirty/src/wagons/commons/features/ingress/domain/accept-response.ts +13 -0
- package/detectors/bun_telemetry_code/fixtures/dirty/src/wagons/commons/features/ingress/domain/tracing.ts +3 -0
- package/detectors/bun_telemetry_code/fixtures/dirty/telemetry/commons/response-invocation-accepted/event.be.json +16 -0
- package/detectors/bun_telemetry_code/fixtures/dirty/tests/wagons/commons/features/ingress/unit/probe.test.ts +7 -0
- package/detectors/bun_telemetry_code/registry.mjs +34 -0
- package/detectors/bun_telemetry_test/_shared.mjs +92 -0
- package/detectors/bun_telemetry_test/atdd.implementation.yaml +24 -0
- package/detectors/bun_telemetry_test/checks/t_captured_sink.mjs +35 -0
- package/detectors/bun_telemetry_test/checks/t_identity_assertion.mjs +45 -0
- package/detectors/bun_telemetry_test/checks/t_required_item_coverage.mjs +37 -0
- package/detectors/bun_telemetry_test/checks/t_test_binding.mjs +56 -0
- package/detectors/bun_telemetry_test/checks/t_timing_semantics.mjs +51 -0
- package/detectors/bun_telemetry_test/detect.mjs +50 -0
- package/detectors/bun_telemetry_test/fixtures/clean/plan/commons/E001.yaml +10 -0
- package/detectors/bun_telemetry_test/fixtures/clean/plan/commons/E002.yaml +7 -0
- package/detectors/bun_telemetry_test/fixtures/clean/plan/commons/_commons.yaml +6 -0
- package/detectors/bun_telemetry_test/fixtures/clean/src/wagons/commons/features/ingress/domain/accept-response.ts +8 -0
- package/detectors/bun_telemetry_test/fixtures/clean/telemetry/commons/response-invocation-accepted/event.be.json +16 -0
- package/detectors/bun_telemetry_test/fixtures/clean/telemetry/commons/response-invocation-accepted/metric.be.duration.json +19 -0
- package/detectors/bun_telemetry_test/fixtures/clean/tests/wagons/commons/features/ingress/unit/accept-response.telemetry.test.ts +13 -0
- package/detectors/bun_telemetry_test/fixtures/clean/tests/wagons/commons/features/ingress/unit/accept-response.test.ts +7 -0
- package/detectors/bun_telemetry_test/fixtures/dirty/plan/commons/E001.yaml +10 -0
- package/detectors/bun_telemetry_test/fixtures/dirty/plan/commons/E002.yaml +7 -0
- package/detectors/bun_telemetry_test/fixtures/dirty/plan/commons/_commons.yaml +6 -0
- package/detectors/bun_telemetry_test/fixtures/dirty/src/wagons/commons/features/ingress/domain/accept-response.ts +8 -0
- package/detectors/bun_telemetry_test/fixtures/dirty/telemetry/commons/response-invocation-accepted/event.be.json +16 -0
- package/detectors/bun_telemetry_test/fixtures/dirty/telemetry/commons/response-invocation-accepted/metric.be.duration.json +19 -0
- package/detectors/bun_telemetry_test/fixtures/dirty/tests/wagons/commons/features/ingress/unit/dangling.telemetry.test.ts +9 -0
- package/detectors/bun_telemetry_test/fixtures/dirty/tests/wagons/commons/features/ingress/unit/loose.telemetry.test.ts +11 -0
- package/detectors/bun_telemetry_test/fixtures/dirty/tests/wagons/commons/features/ingress/unit/unbound.telemetry.test.ts +10 -0
- package/detectors/planner_telemetry_plan/atdd.implementation.yaml +22 -0
- package/detectors/planner_telemetry_plan/detect.mjs +9 -0
- package/detectors/planner_telemetry_plan/fixtures/clean/plan/commons/E001.yaml +10 -0
- package/detectors/planner_telemetry_plan/fixtures/clean/plan/commons/E002.yaml +7 -0
- package/detectors/planner_telemetry_plan/fixtures/clean/plan/commons/_commons.yaml +6 -0
- package/detectors/planner_telemetry_plan/fixtures/clean/src/wagons/commons/features/ingress/domain/accept-response.ts +8 -0
- package/detectors/planner_telemetry_plan/fixtures/clean/telemetry/commons/response-invocation-accepted/event.be.json +16 -0
- package/detectors/planner_telemetry_plan/fixtures/clean/telemetry/commons/response-invocation-accepted/metric.be.duration.json +19 -0
- package/detectors/planner_telemetry_plan/fixtures/clean/tests/wagons/commons/features/ingress/unit/accept-response.telemetry.test.ts +13 -0
- package/detectors/planner_telemetry_plan/fixtures/dirty/plan/commons/E001.yaml +9 -0
- package/detectors/planner_telemetry_plan/fixtures/dirty/plan/commons/E002.yaml +4 -0
- package/detectors/planner_telemetry_plan/fixtures/dirty/plan/commons/E003.yaml +7 -0
- package/detectors/planner_telemetry_plan/fixtures/dirty/plan/commons/_commons.yaml +6 -0
- package/detectors/planner_telemetry_plan/fixtures/dirty/telemetry/commons/extra.json +1 -0
- package/detectors/planner_telemetry_plan/fixtures/dirty/telemetry/commons/orphan-artifact/event.be.json +14 -0
- package/detectors/planner_telemetry_plan/fixtures/dirty/telemetry/commons/response-invocation-accepted/event.be.json +16 -0
- package/detectors/planner_telemetry_plan/fixtures/dirty/telemetry/commons/response-invocation-accepted/metric.be.duration.json +22 -0
- package/detectors/planner_telemetry_plan/fixtures/dirty/telemetry/commons/response-invocation-accepted/notes.json +1 -0
- package/integrity.json +94 -11
- package/lib/scan.mjs +37 -0
- package/package.json +1 -1
- package/planner-schemas/acceptance.schema.json +70 -1
- package/planner-schemas/telemetry-plan.schema.json +133 -0
- package/relationships.yaml +174 -0
- package/src/enforce.ts +2 -1
- package/src/index.ts +2 -0
- package/src/integrity.ts +25 -9
- package/src/setup.ts +17 -1
- package/src/telemetry-plan.ts +223 -0
- package/src/topology.ts +3 -1
- package/templates/github/atdd-bun.yml +5 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// URN: test:commons:ingress:E001-UNIT-001
|
|
2
|
+
// Acceptance: acc:commons:E001-UNIT-001
|
|
3
|
+
// Telemetry: telemetry:event:be:commons:unknown-item
|
|
4
|
+
import { expect, mock, test } from "bun:test";
|
|
5
|
+
|
|
6
|
+
test("proves nothing yet", () => {
|
|
7
|
+
const emit = mock(() => {});
|
|
8
|
+
expect(emit).not.toHaveBeenCalled();
|
|
9
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// URN: test:commons:ingress:E001-UNIT-001
|
|
2
|
+
// Acceptance: acc:commons:E001-UNIT-001
|
|
3
|
+
// Telemetry: telemetry:event:be:commons:response-invocation-accepted
|
|
4
|
+
import { expect, test } from "bun:test";
|
|
5
|
+
import { acceptResponse } from "../../../../../src/wagons/commons/features/ingress/domain/accept-response";
|
|
6
|
+
|
|
7
|
+
test("accepts the response", () => {
|
|
8
|
+
const done: string[] = [];
|
|
9
|
+
acceptResponse({ id: "r-1" }, { emit: (id) => done.push(id) });
|
|
10
|
+
expect(done.length).toBeGreaterThan(0);
|
|
11
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// URN: test:commons:ingress:E001-UNIT-001
|
|
2
|
+
// Telemetry: telemetry:event:be:commons:response-invocation-accepted
|
|
3
|
+
import { expect, mock, test } from "bun:test";
|
|
4
|
+
import { acceptResponse } from "../../../../../src/wagons/commons/features/ingress/domain/accept-response";
|
|
5
|
+
|
|
6
|
+
test("emits the planned event", () => {
|
|
7
|
+
const emit = mock(() => {});
|
|
8
|
+
acceptResponse({ id: "r-1" }, { emit });
|
|
9
|
+
expect(emit).toHaveBeenCalledWith("telemetry:event:be:commons:response-invocation-accepted", { response_id: "r-1", outcome: "accepted" });
|
|
10
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
schema_version: "1.0.0"
|
|
2
|
+
kind: implementation
|
|
3
|
+
subtype: validator
|
|
4
|
+
implementation_id: planner.telemetry.impl
|
|
5
|
+
targets_workspace: atdd.workspace.bun
|
|
6
|
+
contract_version: "1.0.0"
|
|
7
|
+
# The telemetry tracking plan: the versioned telemetry/ registry, wagon ownership of logical
|
|
8
|
+
# artifacts, and the explicit per-acceptance telemetry decision. Runs only under the telemetry
|
|
9
|
+
# profile and is inert until the repository adopts the capability (telemetry root present, or
|
|
10
|
+
# any acceptance declaring a telemetry decision).
|
|
11
|
+
emits_rule_ids:
|
|
12
|
+
- planner.telemetry.tracking-plan-schema
|
|
13
|
+
- planner.telemetry.logical-ownership
|
|
14
|
+
- planner.telemetry.acceptance-decision
|
|
15
|
+
- planner.telemetry.metric-cardinality
|
|
16
|
+
realizes_convention:
|
|
17
|
+
- planner.telemetry.tracking-plan-schema
|
|
18
|
+
- planner.telemetry.logical-ownership
|
|
19
|
+
- planner.telemetry.acceptance-decision
|
|
20
|
+
- planner.telemetry.metric-cardinality
|
|
21
|
+
entrypoint: detect.mjs
|
|
22
|
+
report: detect.mjs
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { validateTelemetryPlan } from "../../src/telemetry-plan.ts";
|
|
4
|
+
|
|
5
|
+
const roots = JSON.parse(process.env.ATDD_SCAN_ROOTS ?? "[]"), report = process.env.ATDD_VIOLATIONS_REPORT;
|
|
6
|
+
if (!report) throw new Error("ATDD_VIOLATIONS_REPORT is required");
|
|
7
|
+
const violations = (await Promise.all(roots.map(validateTelemetryPlan))).flat().map(item => ({ ...item, line: 1, col: 1, source_line: "" }));
|
|
8
|
+
await mkdir(dirname(report), { recursive: true });
|
|
9
|
+
await writeFile(report, JSON.stringify({ violations }, null, 2));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
urn: wmbt:commons:E001
|
|
2
|
+
acceptances:
|
|
3
|
+
- identity:
|
|
4
|
+
urn: acc:commons:E001-UNIT-001
|
|
5
|
+
telemetry:
|
|
6
|
+
disposition: required
|
|
7
|
+
events:
|
|
8
|
+
- telemetry:event:be:commons:response-invocation-accepted
|
|
9
|
+
metrics:
|
|
10
|
+
- telemetry:metric:be:commons:response-invocation-accepted:duration
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Telemetry: telemetry:event:be:commons:response-invocation-accepted
|
|
2
|
+
// Telemetry: telemetry:metric:be:commons:response-invocation-accepted:duration
|
|
3
|
+
export type TelemetryPort = { emit(id: string, properties: Record<string, unknown>): void };
|
|
4
|
+
|
|
5
|
+
export function acceptResponse(response: { id: string }, telemetry: TelemetryPort): void {
|
|
6
|
+
telemetry.emit("telemetry:event:be:commons:response-invocation-accepted", { response_id: response.id, outcome: "accepted" });
|
|
7
|
+
telemetry.emit("telemetry:metric:be:commons:response-invocation-accepted:duration", { outcome: "accepted" });
|
|
8
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "telemetry:event:be:commons:response-invocation-accepted",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"logical_artifact": "telemetry:commons:response-invocation-accepted",
|
|
5
|
+
"kind": "event",
|
|
6
|
+
"plane": "be",
|
|
7
|
+
"owner": "commons",
|
|
8
|
+
"purpose": "Records that a response invocation passed acceptance so ingress health can be audited.",
|
|
9
|
+
"acceptances": ["acc:commons:E001-UNIT-001"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"response_id": { "type": "string", "classification": "internal", "cardinality": "high" },
|
|
12
|
+
"outcome": { "type": "string", "allowed_values": ["accepted"] }
|
|
13
|
+
},
|
|
14
|
+
"required": ["response_id", "outcome"],
|
|
15
|
+
"forbidden_properties": ["raw_payload", "secret", "prompt"]
|
|
16
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "telemetry:metric:be:commons:response-invocation-accepted:duration",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"logical_artifact": "telemetry:commons:response-invocation-accepted",
|
|
5
|
+
"kind": "metric",
|
|
6
|
+
"plane": "be",
|
|
7
|
+
"measure": "duration",
|
|
8
|
+
"instrument": "histogram",
|
|
9
|
+
"unit": "ms",
|
|
10
|
+
"owner": "commons",
|
|
11
|
+
"purpose": "Bounds how long an accepted response invocation takes to complete end to end.",
|
|
12
|
+
"acceptances": ["acc:commons:E001-UNIT-001"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"outcome": { "type": "string", "classification": "internal", "cardinality": "low" }
|
|
15
|
+
},
|
|
16
|
+
"required": ["outcome"],
|
|
17
|
+
"dimensions": [{ "name": "outcome", "cardinality": "low" }],
|
|
18
|
+
"timing": ["post-commit"]
|
|
19
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// URN: test:commons:ingress:E001-UNIT-001
|
|
2
|
+
// Acceptance: acc:commons:E001-UNIT-001
|
|
3
|
+
// Telemetry: telemetry:event:be:commons:response-invocation-accepted
|
|
4
|
+
// Telemetry: telemetry:metric:be:commons:response-invocation-accepted:duration
|
|
5
|
+
import { expect, mock, test } from "bun:test";
|
|
6
|
+
import { acceptResponse } from "../../../../../src/wagons/commons/features/ingress/domain/accept-response";
|
|
7
|
+
|
|
8
|
+
test("emits the planned event once the invocation commits", () => {
|
|
9
|
+
const emit = mock(() => {});
|
|
10
|
+
acceptResponse({ id: "r-1" }, { emit });
|
|
11
|
+
expect(emit).toHaveBeenCalledWith("telemetry:event:be:commons:response-invocation-accepted", { response_id: "r-1", outcome: "accepted" });
|
|
12
|
+
expect(emit).toHaveBeenCalledWith("telemetry:metric:be:commons:response-invocation-accepted:duration", { outcome: "accepted" });
|
|
13
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "telemetry:event:be:commons:orphan-artifact",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"logical_artifact": "telemetry:commons:orphan-artifact",
|
|
5
|
+
"kind": "event",
|
|
6
|
+
"plane": "be",
|
|
7
|
+
"owner": "commons",
|
|
8
|
+
"purpose": "Records an outcome no wagon has declared ownership of, to exercise the ownership rule.",
|
|
9
|
+
"acceptances": ["acc:commons:E001-UNIT-001"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"outcome": { "type": "string" }
|
|
12
|
+
},
|
|
13
|
+
"required": ["outcome"]
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "telemetry:event:be:commons:renamed-artifact",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"logical_artifact": "telemetry:commons:response-invocation-accepted",
|
|
5
|
+
"kind": "event",
|
|
6
|
+
"plane": "be",
|
|
7
|
+
"owner": "commons",
|
|
8
|
+
"purpose": "Records that a response invocation passed acceptance so ingress health can be audited.",
|
|
9
|
+
"acceptances": ["acc:commons:E099-UNIT-001"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"response_id": { "type": "string", "classification": "internal", "cardinality": "high" },
|
|
12
|
+
"outcome": { "type": "string", "allowed_values": ["accepted"] }
|
|
13
|
+
},
|
|
14
|
+
"required": ["response_id", "outcome"],
|
|
15
|
+
"forbidden_properties": ["raw_payload", "secret", "prompt"]
|
|
16
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "telemetry:metric:be:commons:response-invocation-accepted:duration",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"logical_artifact": "telemetry:commons:response-invocation-accepted",
|
|
5
|
+
"kind": "metric",
|
|
6
|
+
"plane": "be",
|
|
7
|
+
"measure": "duration",
|
|
8
|
+
"instrument": "histogram",
|
|
9
|
+
"unit": "ms",
|
|
10
|
+
"owner": "commons",
|
|
11
|
+
"purpose": "Bounds how long an accepted response invocation takes to complete end to end.",
|
|
12
|
+
"acceptances": ["acc:commons:E001-UNIT-001"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"outcome": { "type": "string", "classification": "internal", "cardinality": "low" },
|
|
15
|
+
"response_id": { "type": "string", "classification": "internal", "cardinality": "high" }
|
|
16
|
+
},
|
|
17
|
+
"required": ["outcome"],
|
|
18
|
+
"dimensions": [
|
|
19
|
+
{ "name": "response_id", "cardinality": "high" },
|
|
20
|
+
{ "name": "outcome", "cardinality": "low" }
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
package/integrity.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.7.1",
|
|
3
3
|
"files": {
|
|
4
4
|
"HOOK_AUDIT.md": "5329d840db37671b1918f688ead26865473b87db73dbc75f7c8b2a8bbe8d6d43",
|
|
5
5
|
"PLANNER_PORT.md": "fb5935bac8b7ac18994de21e43ace3a5ef8cd55f85b0e3349fca261280054f11",
|
|
6
|
-
"README.md": "
|
|
6
|
+
"README.md": "4e612f6344fab29c38269ce0303b73c32f75911dfef16a3acefe382f068329a3",
|
|
7
7
|
"bunfig.toml": "b9fc65eca9014c5179380259d70e76385a6a80788fa9a2df5fb3eaa5554fd2fe",
|
|
8
8
|
"conventions/atdd-bun.planner/atdd-bun.planner.acceptance-identity.convention.yaml": "81c5c773d5ee15e8d99a2c237aa9846b110b2533df45ebf407d0e3ec6ed3dd03",
|
|
9
9
|
"conventions/atdd-bun.planner/atdd-bun.planner.identity-required.convention.yaml": "e96d7c1455d0c221072d82e7f2b55da1c4f9ceb17718eb6ed96affdeef37675b",
|
|
@@ -78,6 +78,11 @@
|
|
|
78
78
|
"conventions/coder.bun/coder.bun.security-sql-injection.convention.yaml": "b4cbc3a446bbbf874762fd13c873305eaf7417c45a6206133163509b97267faa",
|
|
79
79
|
"conventions/coder.bun/coder.bun.station-master-interlocking-routing.convention.yaml": "b0b0572a79b4dd6f35db350980652afbdd797646d613c552b7c5595f72efdee8",
|
|
80
80
|
"conventions/coder.bun/coder.bun.station-master-journey-routing.convention.yaml": "5f0c26b860c85ae5a22f3d63dd0a243b7cdda39812dc291591ecc5fe75a894a7",
|
|
81
|
+
"conventions/coder.bun/coder.bun.telemetry-forbidden-properties.convention.yaml": "7dd411af2180e70a84f4bad99c568060504bb5ff5e7ccb9fc1b6fd4b3aadcbcd",
|
|
82
|
+
"conventions/coder.bun/coder.bun.telemetry-implementation-binding.convention.yaml": "5eb854948cdb8a1510fe808e3e5be13840d02b6bf07b4aa6d6ca94739128e7a7",
|
|
83
|
+
"conventions/coder.bun/coder.bun.telemetry-raw-string-emit.convention.yaml": "7fb7c83a916078184862c89edf1bf3bc6332ffd6bc8e2f17d96a221af1a40007",
|
|
84
|
+
"conventions/coder.bun/coder.bun.telemetry-source-binding.convention.yaml": "60a4eaa9c625be88d4aee642ef6f615113e8bafd4652b232eee86fcc1abd610e",
|
|
85
|
+
"conventions/coder.bun/coder.bun.telemetry-vendor-sdk.convention.yaml": "8ed29a99c1c46deaeedd29cc656f62ca472fad44115c226c057c51270bef0257",
|
|
81
86
|
"conventions/coder.bun/coder.bun.wagon-honours-its-contract.convention.yaml": "712e8c8f3f3b1c0d7bb61c4b54a19823ff1c125a109b64db9cb48addd620581a",
|
|
82
87
|
"conventions/coder.htmx/coder.htmx.fragment-escapes-interpolation.convention.yaml": "3f1fbb316074d0b79f5a209cd1a9afbf1b8f5235bb5a13f646b2fe8d89a1a893",
|
|
83
88
|
"conventions/coder.htmx/coder.htmx.swap-no-inline-handler.convention.yaml": "17510aff81e41085dfa22f3d56d1d6a1d3c9d5ba5de887b66015525e491c51b7",
|
|
@@ -96,6 +101,10 @@
|
|
|
96
101
|
"conventions/planner.docs/planner.docs.journey-view-current.convention.yaml": "5892d4213d72342dc568c37f13942139bbdce4c0d5716075de579dc8060fc969",
|
|
97
102
|
"conventions/planner.docs/planner.docs.reference-integrity.convention.yaml": "34310088114ac7cc58bc74443a76366e3e644121aaa3ff39b6602a0d15e03293",
|
|
98
103
|
"conventions/planner.docs/planner.docs.undeclared-change.convention.yaml": "102a0706b00e074a74dbe38a6a389075929aa12bc38dcfb155d7a5d52afe6abc",
|
|
104
|
+
"conventions/planner.telemetry/planner.telemetry.acceptance-decision.convention.yaml": "67dc840e0993c6940a431403b47439484ed557855a7dee82d75abd1479f3151e",
|
|
105
|
+
"conventions/planner.telemetry/planner.telemetry.logical-ownership.convention.yaml": "6dd666a22fd7fd0cb6e5fe5505665c8889a504ee929fdebf3aee019df4aac2b4",
|
|
106
|
+
"conventions/planner.telemetry/planner.telemetry.metric-cardinality.convention.yaml": "e61831f207ad4f09be983b300cbedc40f6ad08a4b2483612fc195e2343be93f6",
|
|
107
|
+
"conventions/planner.telemetry/planner.telemetry.tracking-plan-schema.convention.yaml": "5453cdf438dc5bdc72bbe5828b089e4090b865112f6a1550bb70e2c7c72a0cdf",
|
|
99
108
|
"conventions/tester.bun/tester.bun.acceptance-binding-declared.convention.yaml": "46b9db88cdb978bc75b85b17d19a627233263da5b4fc6456a21fa870646ae1d0",
|
|
100
109
|
"conventions/tester.bun/tester.bun.acceptance-covers-tag-well-formed.convention.yaml": "8dd55d2dc36d255ab553fba8cf6f5cd7de1ba286e687d290458d3b5681fbb40f",
|
|
101
110
|
"conventions/tester.bun/tester.bun.acceptance-resolves-to-declared.convention.yaml": "6c5cc0719749dbcdd3eb02877799a40998e77b433b2f17d27ac1dbca44292610",
|
|
@@ -111,7 +120,12 @@
|
|
|
111
120
|
"conventions/tester.bun/tester.bun.security-input.convention.yaml": "3118299e1e6a71b21be730f26377baab922b1c3d8b175b9b35f10d38d9ebaeb0",
|
|
112
121
|
"conventions/tester.bun/tester.bun.smoke-no-collaborator-substitution.convention.yaml": "76187d91e6298ae9b89a39c2ebf9cb6f769e1d3ce08d7a9ea21727aadc6a019a",
|
|
113
122
|
"conventions/tester.bun/tester.bun.smoke-observable-assertion.convention.yaml": "1d35f17221b7de3f9ad6bb3c1ced486bec401e1d024e2476147f4f9e52f05674",
|
|
123
|
+
"conventions/tester.bun/tester.bun.telemetry-captured-sink.convention.yaml": "7f1156dc041fc44d4becd18f379cd1fb68b99cd1e888b9a8f6dee4201ad5337b",
|
|
114
124
|
"conventions/tester.bun/tester.bun.telemetry-emit.convention.yaml": "440ba54de6c23e25786d363d80a9c337f29aa2eaf59bc8b5c24d391cc1c3d3b7",
|
|
125
|
+
"conventions/tester.bun/tester.bun.telemetry-identity-assertion.convention.yaml": "25f7cc3dcb21e70a183638be9416802ef081323482a98eba604223fabf389b55",
|
|
126
|
+
"conventions/tester.bun/tester.bun.telemetry-required-item-coverage.convention.yaml": "1cf7430a496c0f6760e46b8ceac629e753cd91ec08018bfc5f16b52a50b61459",
|
|
127
|
+
"conventions/tester.bun/tester.bun.telemetry-test-binding.convention.yaml": "4566199fd401cd8666e08466cd3a5236f23ef356364e673b36a2e3c5ec78638d",
|
|
128
|
+
"conventions/tester.bun/tester.bun.telemetry-timing-semantics.convention.yaml": "5494744872deb34c175d741dfc79e9cfa720808dd7efaf118f709af417a1dd39",
|
|
115
129
|
"conventions/tester.bun/tester.bun.test-carries-urn-identity.convention.yaml": "4c5846bae7f9671eabf808f43ee3f134a67214113f0e15e9a60705dbdcbe8d10",
|
|
116
130
|
"conventions/tester.bun/tester.bun.test-imports-bun-test.convention.yaml": "b447312046391cdac30f76d35624b23dc1a72cb87225d0f2a4610fb3188425dc",
|
|
117
131
|
"conventions/tester.bun/tester.bun.test-isolation-no-live-state.convention.yaml": "3488af16431ea461e9128d15dbb0ad86324f4446bf36d5a662fab73687e8860e",
|
|
@@ -506,6 +520,55 @@
|
|
|
506
520
|
"detectors/bun_security_hygiene_detector/fixtures/dirty/logging.ts": "0ea2ba99eb5c0c123b0ca0863dfc6899fdf86dc0b867e59ae9be760bfe7d0978",
|
|
507
521
|
"detectors/bun_security_hygiene_detector/fixtures/dirty/routes.ts": "6f57048a821675e0424205986195c678701a015c1c3b195b17a1898d95147266",
|
|
508
522
|
"detectors/bun_security_hygiene_detector/fixtures/dirty/secrets.ts": "2341490d46aafccce99a12381cf0ee806b66588deb244c0bca154f5e8cb25cba",
|
|
523
|
+
"detectors/bun_telemetry_code/atdd.implementation.yaml": "d7fd2e3e4a564458b13abdc29f109b385686dfdd2f76163c9b53ee401a274b38",
|
|
524
|
+
"detectors/bun_telemetry_code/calls.mjs": "9bb40a5d721d1f251c4c58c501a6fd14e36db23a7cc9fe6194963941783c2862",
|
|
525
|
+
"detectors/bun_telemetry_code/checks/t_forbidden_properties.mjs": "9a73e096371b5e9f3fd7cbaaa7776d6e535fa1549b9f64c3bb91a7cedee2fc55",
|
|
526
|
+
"detectors/bun_telemetry_code/checks/t_implementation_binding.mjs": "8ac2074b3d95a148b1a9b8cb6fa0a1f7f129fb403b21eade3e91c2964e0bb223",
|
|
527
|
+
"detectors/bun_telemetry_code/checks/t_raw_string_emit.mjs": "6532e22a362d9f990b1e3444c65118b554a616eb4cdcb97132f2b9f3ae0867d9",
|
|
528
|
+
"detectors/bun_telemetry_code/checks/t_source_binding.mjs": "917809194779f60c7e4a0c8a58bc6b2eca39540aa331dfb82cd0c2ab530cf792",
|
|
529
|
+
"detectors/bun_telemetry_code/checks/t_vendor_sdk.mjs": "41efc80ac2e6c8aefcf22a0ed7c020836193f1f909c51885a998f73af35fa0a3",
|
|
530
|
+
"detectors/bun_telemetry_code/detect.mjs": "f35662fc4e53eb6db55a9850a2851ba8048e831434977b05446bc6ba89c8e7af",
|
|
531
|
+
"detectors/bun_telemetry_code/fixtures/clean/plan/commons/E001.yaml": "f7f28a3eceb175ed53e32da5c98e3bea98ac7b892a487406ede0e48d699fa3e3",
|
|
532
|
+
"detectors/bun_telemetry_code/fixtures/clean/plan/commons/E002.yaml": "fcd06986619212291e88d6d68954ef77d50e5b6870728b6e8040bb160007112f",
|
|
533
|
+
"detectors/bun_telemetry_code/fixtures/clean/plan/commons/_commons.yaml": "2d047360373c4faec6efb9a1c14222478d65fdc5de8af16a38ad04fd3d854a04",
|
|
534
|
+
"detectors/bun_telemetry_code/fixtures/clean/src/wagons/commons/features/ingress/domain/accept-response.ts": "4933c935805bb4a371024a91cbaeb3f5376486cc93d274db0691aec4a5496a3a",
|
|
535
|
+
"detectors/bun_telemetry_code/fixtures/clean/src/wagons/commons/features/ingress/infrastructure/otel-adapter.ts": "bd45a7ac1260bc763222b885c9730781123452f9c65773aa255e9bb017e098f9",
|
|
536
|
+
"detectors/bun_telemetry_code/fixtures/clean/telemetry/commons/response-invocation-accepted/event.be.json": "cbf0ca07f717745edd88876a1c75880d7ae5755292cae4af10e1f9a2b8fccc9a",
|
|
537
|
+
"detectors/bun_telemetry_code/fixtures/clean/telemetry/commons/response-invocation-accepted/metric.be.duration.json": "9a132102d4bf2b1c0bd9f62449e48c61cd34cf09f45481ffd3ef73c190e16cc3",
|
|
538
|
+
"detectors/bun_telemetry_code/fixtures/clean/tests/wagons/commons/features/ingress/unit/accept-response.telemetry.test.ts": "ee953cd9f899127180a08dbfcb8eb3254dc3d751454a0af3d9a6784693d2071a",
|
|
539
|
+
"detectors/bun_telemetry_code/fixtures/clean/tests/wagons/commons/features/ingress/unit/accept-response.test.ts": "97a33e0df211711a4f330e72c4c69171c098dfa640c8e3f43f0bab536397ec14",
|
|
540
|
+
"detectors/bun_telemetry_code/fixtures/dirty/plan/commons/E001.yaml": "09d20ca9748af660908c3829a2a494825a3d1f5b24fd9aa03a1dbcb1a0b462d7",
|
|
541
|
+
"detectors/bun_telemetry_code/fixtures/dirty/plan/commons/_commons.yaml": "2d047360373c4faec6efb9a1c14222478d65fdc5de8af16a38ad04fd3d854a04",
|
|
542
|
+
"detectors/bun_telemetry_code/fixtures/dirty/src/wagons/commons/features/ingress/domain/accept-response.ts": "411e7208f920eea69f6c049a3f90db3110b5edd1834b85de7682a04149c919c7",
|
|
543
|
+
"detectors/bun_telemetry_code/fixtures/dirty/src/wagons/commons/features/ingress/domain/tracing.ts": "1280062d3acbaaf58c7fe61b499f080848bbc00c7e48fdfab770d7958301f181",
|
|
544
|
+
"detectors/bun_telemetry_code/fixtures/dirty/telemetry/commons/response-invocation-accepted/event.be.json": "cbf0ca07f717745edd88876a1c75880d7ae5755292cae4af10e1f9a2b8fccc9a",
|
|
545
|
+
"detectors/bun_telemetry_code/fixtures/dirty/tests/wagons/commons/features/ingress/unit/probe.test.ts": "4dca357fbeb14c6423975e422a047b6bec3e352b2b687a809fb6d59b8f66ee0c",
|
|
546
|
+
"detectors/bun_telemetry_code/registry.mjs": "ccb169a31f02d7a6af379a8c1d6a548ef688a7885e925826a43c1e0bcf670097",
|
|
547
|
+
"detectors/bun_telemetry_test/_shared.mjs": "425340b41f958c4164f4e808633d8f5b27533280f516b7b176f58f1531da9e6c",
|
|
548
|
+
"detectors/bun_telemetry_test/atdd.implementation.yaml": "0bbe065a0cdebdf581b4a9a17b258421cb3619070d21fe44f0dbc7e765f47681",
|
|
549
|
+
"detectors/bun_telemetry_test/checks/t_captured_sink.mjs": "bc616b5fbf76cde18dc6a70256a8293a2cfad98bd6a656b11608ebb1befe0d0f",
|
|
550
|
+
"detectors/bun_telemetry_test/checks/t_identity_assertion.mjs": "10f089ac696cc1bb6024c6dea831d928843037395458f5a6882ecd72041b7f2d",
|
|
551
|
+
"detectors/bun_telemetry_test/checks/t_required_item_coverage.mjs": "975d229aedfad2af1002c6e314d480c7becd9e21bc5dad240cca848ea5dbe9ee",
|
|
552
|
+
"detectors/bun_telemetry_test/checks/t_test_binding.mjs": "401a8050568c8012a1a3a202180f2fa9ed57aac6e9147aa3852ce167a7238bdf",
|
|
553
|
+
"detectors/bun_telemetry_test/checks/t_timing_semantics.mjs": "80a29900674eb911261189e0318454aeec7535be199293c869cd760d3afc72f1",
|
|
554
|
+
"detectors/bun_telemetry_test/detect.mjs": "4de9f33be5eeb1b16dff8f4e54d377c380698e31cfc2c7d4a26ca93f5bc2ce47",
|
|
555
|
+
"detectors/bun_telemetry_test/fixtures/clean/plan/commons/E001.yaml": "f7f28a3eceb175ed53e32da5c98e3bea98ac7b892a487406ede0e48d699fa3e3",
|
|
556
|
+
"detectors/bun_telemetry_test/fixtures/clean/plan/commons/E002.yaml": "fcd06986619212291e88d6d68954ef77d50e5b6870728b6e8040bb160007112f",
|
|
557
|
+
"detectors/bun_telemetry_test/fixtures/clean/plan/commons/_commons.yaml": "2d047360373c4faec6efb9a1c14222478d65fdc5de8af16a38ad04fd3d854a04",
|
|
558
|
+
"detectors/bun_telemetry_test/fixtures/clean/src/wagons/commons/features/ingress/domain/accept-response.ts": "4933c935805bb4a371024a91cbaeb3f5376486cc93d274db0691aec4a5496a3a",
|
|
559
|
+
"detectors/bun_telemetry_test/fixtures/clean/telemetry/commons/response-invocation-accepted/event.be.json": "cbf0ca07f717745edd88876a1c75880d7ae5755292cae4af10e1f9a2b8fccc9a",
|
|
560
|
+
"detectors/bun_telemetry_test/fixtures/clean/telemetry/commons/response-invocation-accepted/metric.be.duration.json": "9a132102d4bf2b1c0bd9f62449e48c61cd34cf09f45481ffd3ef73c190e16cc3",
|
|
561
|
+
"detectors/bun_telemetry_test/fixtures/clean/tests/wagons/commons/features/ingress/unit/accept-response.telemetry.test.ts": "ee953cd9f899127180a08dbfcb8eb3254dc3d751454a0af3d9a6784693d2071a",
|
|
562
|
+
"detectors/bun_telemetry_test/fixtures/clean/tests/wagons/commons/features/ingress/unit/accept-response.test.ts": "78f1ce1b38aeeeaa29446dd03db9a5678b0f5f1f06eee8b4491161a65253fa91",
|
|
563
|
+
"detectors/bun_telemetry_test/fixtures/dirty/plan/commons/E001.yaml": "f7f28a3eceb175ed53e32da5c98e3bea98ac7b892a487406ede0e48d699fa3e3",
|
|
564
|
+
"detectors/bun_telemetry_test/fixtures/dirty/plan/commons/E002.yaml": "fcd06986619212291e88d6d68954ef77d50e5b6870728b6e8040bb160007112f",
|
|
565
|
+
"detectors/bun_telemetry_test/fixtures/dirty/plan/commons/_commons.yaml": "2d047360373c4faec6efb9a1c14222478d65fdc5de8af16a38ad04fd3d854a04",
|
|
566
|
+
"detectors/bun_telemetry_test/fixtures/dirty/src/wagons/commons/features/ingress/domain/accept-response.ts": "4933c935805bb4a371024a91cbaeb3f5376486cc93d274db0691aec4a5496a3a",
|
|
567
|
+
"detectors/bun_telemetry_test/fixtures/dirty/telemetry/commons/response-invocation-accepted/event.be.json": "cbf0ca07f717745edd88876a1c75880d7ae5755292cae4af10e1f9a2b8fccc9a",
|
|
568
|
+
"detectors/bun_telemetry_test/fixtures/dirty/telemetry/commons/response-invocation-accepted/metric.be.duration.json": "9a132102d4bf2b1c0bd9f62449e48c61cd34cf09f45481ffd3ef73c190e16cc3",
|
|
569
|
+
"detectors/bun_telemetry_test/fixtures/dirty/tests/wagons/commons/features/ingress/unit/dangling.telemetry.test.ts": "74d71386d52ee470969462f85858afd1ab1dd91a8a2a8cc9b77e29838efcff80",
|
|
570
|
+
"detectors/bun_telemetry_test/fixtures/dirty/tests/wagons/commons/features/ingress/unit/loose.telemetry.test.ts": "edc391e4932db7a0c0aaeab8e4dd357231c5d30fa05e69c8b43d52a06ce69fef",
|
|
571
|
+
"detectors/bun_telemetry_test/fixtures/dirty/tests/wagons/commons/features/ingress/unit/unbound.telemetry.test.ts": "f62e81465e3b0701c97ee31d18134cd169bf7f60480d1abbf8e9d6c9405b7f42",
|
|
509
572
|
"detectors/bun_tester_discipline_detector/atdd.implementation.yaml": "bad18659c327b2165b5db7cf07530581b29d8ae8c41a42e730b82e56d23e771e",
|
|
510
573
|
"detectors/bun_tester_discipline_detector/checks/_map.json": "d28273b975c4fbcda64026178b918dc9a84315d6312f29ae5221a0a9cb4c0b44",
|
|
511
574
|
"detectors/bun_tester_discipline_detector/checks/t_acceptance_binding.mjs": "17861380275433ff79e191803456417454e2efa23801d9ac72bf6f8206337522",
|
|
@@ -864,9 +927,27 @@
|
|
|
864
927
|
"detectors/planner_static_validators/fixtures/dirty/plan/dup/E001.yaml": "ba27e24435a55c9cf27c3603377666a0856f5394cf5ab1ce1c9af11b3a6d895d",
|
|
865
928
|
"detectors/planner_static_validators/fixtures/dirty/plan/dup/_dup.yaml": "7dba1f53c3c45d9d3daff2637e38196984c0810d511c4e4db5162daa6599276b",
|
|
866
929
|
"detectors/planner_static_validators/fixtures/dirty/plan/dup/features/bad.yaml": "2a78ee5d50e119e2b1ab400ac5606a6625c0ebab60391f51a7bc294d8649d3ec",
|
|
930
|
+
"detectors/planner_telemetry_plan/atdd.implementation.yaml": "897d1b4499d1b216b68e88dc7c20cd7d35f9ca8e457fd43aaf88e0c632dffbc9",
|
|
931
|
+
"detectors/planner_telemetry_plan/detect.mjs": "1ad009c9b1df5484c4ad3bd38c6255f3f36f87809f37a1e9445e81a32b406764",
|
|
932
|
+
"detectors/planner_telemetry_plan/fixtures/clean/plan/commons/E001.yaml": "f7f28a3eceb175ed53e32da5c98e3bea98ac7b892a487406ede0e48d699fa3e3",
|
|
933
|
+
"detectors/planner_telemetry_plan/fixtures/clean/plan/commons/E002.yaml": "fcd06986619212291e88d6d68954ef77d50e5b6870728b6e8040bb160007112f",
|
|
934
|
+
"detectors/planner_telemetry_plan/fixtures/clean/plan/commons/_commons.yaml": "2d047360373c4faec6efb9a1c14222478d65fdc5de8af16a38ad04fd3d854a04",
|
|
935
|
+
"detectors/planner_telemetry_plan/fixtures/clean/src/wagons/commons/features/ingress/domain/accept-response.ts": "4933c935805bb4a371024a91cbaeb3f5376486cc93d274db0691aec4a5496a3a",
|
|
936
|
+
"detectors/planner_telemetry_plan/fixtures/clean/telemetry/commons/response-invocation-accepted/event.be.json": "5d18430be2033ec41a6add2b21ddd6564e91ec824d2d76a0e3ddb1a4207e6ad6",
|
|
937
|
+
"detectors/planner_telemetry_plan/fixtures/clean/telemetry/commons/response-invocation-accepted/metric.be.duration.json": "9a132102d4bf2b1c0bd9f62449e48c61cd34cf09f45481ffd3ef73c190e16cc3",
|
|
938
|
+
"detectors/planner_telemetry_plan/fixtures/clean/tests/wagons/commons/features/ingress/unit/accept-response.telemetry.test.ts": "ee953cd9f899127180a08dbfcb8eb3254dc3d751454a0af3d9a6784693d2071a",
|
|
939
|
+
"detectors/planner_telemetry_plan/fixtures/dirty/plan/commons/E001.yaml": "94c9ebd2b449520df0fcde7cbd29b589d725062f38666cc3fc9384544ae07124",
|
|
940
|
+
"detectors/planner_telemetry_plan/fixtures/dirty/plan/commons/E002.yaml": "7240cf7e1212f8e352dbacc8049e1a2a5413f43ffa0e5b7f4e09b0a18435d5fe",
|
|
941
|
+
"detectors/planner_telemetry_plan/fixtures/dirty/plan/commons/E003.yaml": "acbfea8905f614fa6d2415deb490e1d1df24d9a181f62adafb89567af9f9c2f2",
|
|
942
|
+
"detectors/planner_telemetry_plan/fixtures/dirty/plan/commons/_commons.yaml": "2d047360373c4faec6efb9a1c14222478d65fdc5de8af16a38ad04fd3d854a04",
|
|
943
|
+
"detectors/planner_telemetry_plan/fixtures/dirty/telemetry/commons/extra.json": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356",
|
|
944
|
+
"detectors/planner_telemetry_plan/fixtures/dirty/telemetry/commons/orphan-artifact/event.be.json": "044318a994420585e36851d1e661a26abf0093a63e4526b45aa9dd41d1cc12b1",
|
|
945
|
+
"detectors/planner_telemetry_plan/fixtures/dirty/telemetry/commons/response-invocation-accepted/event.be.json": "2086b0cc839b58930796ee01f979f0e0f507c8d6777b966dbc79d503ead95e84",
|
|
946
|
+
"detectors/planner_telemetry_plan/fixtures/dirty/telemetry/commons/response-invocation-accepted/metric.be.duration.json": "df1bf74716d5f7c4edcd04643b1ac7baab0aa4ac2454d92839a718238722b4be",
|
|
947
|
+
"detectors/planner_telemetry_plan/fixtures/dirty/telemetry/commons/response-invocation-accepted/notes.json": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356",
|
|
867
948
|
"lib/frontend.mjs": "d6d9b29c3d7f2d162cda03bb34b20a3224a82887b6be3db7cab375510913c9a3",
|
|
868
949
|
"lib/imports.mjs": "3db4979269488fa26f6e7aefded6ece9c646be6587a10e249821a5a208109962",
|
|
869
|
-
"lib/scan.mjs": "
|
|
950
|
+
"lib/scan.mjs": "8aa21e400ec415e23d49e0cc90fba2744822b8855261c85614e89c7cf35c4700",
|
|
870
951
|
"planner-nodes/ENFORCEMENT_SCOPE.yaml": "d8ec7039c219857f3d77af5d4d84612b533b69c1a5fcef935fbf46470adafed4",
|
|
871
952
|
"planner-nodes/nodes/planner.acceptance.abstract-fields-required.convention.yaml": "bd565693f0ae861f0561ad2f7a91a8c55f9a209c3acd59c5750cfcffd96a85d8",
|
|
872
953
|
"planner-nodes/nodes/planner.acceptance.authoring-guidelines.convention.yaml": "16348dceed5868041b832bde766e9c8d4a950d4032f1f3066b357644081a3b17",
|
|
@@ -1064,7 +1145,7 @@
|
|
|
1064
1145
|
"planner-nodes/nodes/planner.wmbt.statement-template.convention.yaml": "71e0c507577d6e71d36f8fc5d95f30f452b46d0e8b72e47fd6d6860533f905a2",
|
|
1065
1146
|
"planner-nodes/nodes/planner.wmbt.step-code-vocabulary.convention.yaml": "848f7cc7573b64de080a3496ff097f6191eb54dfc1b9b8faf174456642c1c943",
|
|
1066
1147
|
"planner-nodes/nodes/planner.wmbt.urn-naming.convention.yaml": "87a5fae8d5dc7beac5ddd5b5082ae6bc590f75fdb3667ab0738882289e2d896c",
|
|
1067
|
-
"planner-schemas/acceptance.schema.json": "
|
|
1148
|
+
"planner-schemas/acceptance.schema.json": "6d1f6cce37905470b8e8dde4249b79f5f7cf2f3aa20921c4e087895ba23697ac",
|
|
1068
1149
|
"planner-schemas/appendix.schema.json": "68ca8a2301c0804a0ee3dbfc3bc8acc8fd52de84cd08211e217de036681edd36",
|
|
1069
1150
|
"planner-schemas/author/convention-node.schema.json": "e776db0f79ffab175b5fc545512cec8e90a2b2d89dd8be462ae51d77296e7242",
|
|
1070
1151
|
"planner-schemas/author/gate.schema.json": "3d451f9bf171b524e0155f73a27f151c4b6fa750fbd3a6cb27b9a6b0344aa05d",
|
|
@@ -1079,33 +1160,35 @@
|
|
|
1079
1160
|
"planner-schemas/registry-index.schema.json": "ffd5643da662ced4052707eeb270eb02908f2e48365103ff0638ec7ba146f430",
|
|
1080
1161
|
"planner-schemas/substrate-lock.schema.json": "9f15294314dbb9b9fbb8a4d6f2d19b273918a4ef44b72e48f6d4c6563b5ec938",
|
|
1081
1162
|
"planner-schemas/substrate.schema.json": "ed4b899173e6a2fcdd63bb65e0f4129544179d0e71815e42a5b40b0729d916eb",
|
|
1163
|
+
"planner-schemas/telemetry-plan.schema.json": "5cade612a623a63f569d9e484e59ae9ebce512260cdac7aa5c2e8bccf1601184",
|
|
1082
1164
|
"planner-schemas/theme-registry.schema.json": "a79b3d0a73c25d62a91c1b552c14731be3a1d96fa3445a7a39b51302dd060f76",
|
|
1083
1165
|
"planner-schemas/train-interlocking-registry.schema.json": "fd741b5a3909d54cef225fffde80b04359416690a26aca5718b7d91027f3934b",
|
|
1084
1166
|
"planner-schemas/train-interlocking.schema.json": "67914979977f23652298b5272adf3df298576ecafbff3e5084574848be8c33d8",
|
|
1085
1167
|
"planner-schemas/train.schema.json": "d6fbac9067c1bffeb84eb79a71228441055af6e6e7ba141dd4e0bcb079345ec0",
|
|
1086
1168
|
"planner-schemas/wagon.schema.json": "57b98f1ade998d745538eb3d72fb3014a50042006870f90bce47028eea336eb4",
|
|
1087
1169
|
"planner-schemas/wmbt.schema.json": "7a3a5693bfcf01340667c2be4a3c48e74f34b1af7e8dc13372c0de06b7f4fe12",
|
|
1088
|
-
"relationships.yaml": "
|
|
1170
|
+
"relationships.yaml": "5a183ce8e30df351d5e9d25cbc7a0468cd915daf47537ed6a3c8a0f27c1c1a1e",
|
|
1089
1171
|
"src/agent.ts": "dfbd20cbd5958cc59aca94bd06d21ff5062f71820226230fac1c1d3ff34f29d5",
|
|
1090
1172
|
"src/ci.ts": "899125ec76d14f7d0126a5db2249913e373e3a325cbc98d7f053e1351bdf47af",
|
|
1091
1173
|
"src/cli.ts": "bb2047cee60f48bfe3eaee4c1b3dcd3538a0e1edc170cf58e87686117bea07a7",
|
|
1092
1174
|
"src/docs-capability.ts": "0feae94b7697dd53d8a457b24765e81fcf804c774f0cc4b6035cb3da822e486a",
|
|
1093
|
-
"src/enforce.ts": "
|
|
1175
|
+
"src/enforce.ts": "d7232331c9f0fdd150f2ca4bbf1bd2e877de111c684d46b690fd7acdae59f39c",
|
|
1094
1176
|
"src/hooks.ts": "adbb72f7a83f53d596fd217f01f4ce32c5a59a23ab81993fed226fb96fd1cbd1",
|
|
1095
|
-
"src/index.ts": "
|
|
1096
|
-
"src/integrity.ts": "
|
|
1177
|
+
"src/index.ts": "b3cc97f9867bd605aefa95650a6b8b773e32e6e52e58792d0dbf6736dd3406be",
|
|
1178
|
+
"src/integrity.ts": "fddc8abd1ca039d31584d3288c061badd44c5f8300f62db5861ea6bb0ebf95d9",
|
|
1097
1179
|
"src/journey-docs.ts": "994d229376244c84212cff951032823068a76565dd2fd427b9d44e341bd14853",
|
|
1098
1180
|
"src/planner-kernel.ts": "5d3f5305fb59becb2cc97d8a03aca6b104f385805d91cc0410856e289dd6fbb1",
|
|
1099
1181
|
"src/planner-schema-validator.ts": "ce529c0936171075e93c7539b3655fe895a98dd2973ebda5775958e6ebc316d9",
|
|
1100
1182
|
"src/planner-validators.ts": "99adeb65f579af923c11f21a8f55cfb9993b007fd8df59c5f764696b55379cfc",
|
|
1101
1183
|
"src/register.ts": "6a2f1c6b8df0dc9c8f45df8ec9fac2be29044e048b08c8ffe423410e94dadedd",
|
|
1102
1184
|
"src/release.ts": "7b0fe444ee81f476f53b9c21b6c347ef588ee616c60211419cf984132be768ba",
|
|
1103
|
-
"src/setup.ts": "
|
|
1104
|
-
"src/
|
|
1185
|
+
"src/setup.ts": "8e69ffc4f49ad7240243728db3c0c495d2c4d66f04652cd735a0a90c79ca4246",
|
|
1186
|
+
"src/telemetry-plan.ts": "cdb1e8bfff414f3ea81977388973da2cf6d89567d9e060dc9d5989a33600f153",
|
|
1187
|
+
"src/topology.ts": "9779ee48e1c453abb76363163d4ab363463fa14e359571139f6d1f1fcc51ae2c",
|
|
1105
1188
|
"templates/agents/AGENTS.block.md": "c45d831e57976b874d2a6dc6e5e929b6e9ea3f928fe8c6683c2bab71676817c7",
|
|
1106
1189
|
"templates/agents/atdd-bun.integrity.test.ts": "dec6f6e5f65a08d9512fc703b367c163f8c9da1f6aa7fd466835c1ec30348a41",
|
|
1107
1190
|
"templates/agents/atdd/SKILL.md": "b621abe22851a75b30fc0e6c339a2c0a3ed6bbf78b8c17000a4ce301e05df96d",
|
|
1108
1191
|
"templates/github/atdd-bun-release.yml": "d9547e9e6ef3ae010d53d55314f6a54567f88bd900f7e50d994cd308601d2684",
|
|
1109
|
-
"templates/github/atdd-bun.yml": "
|
|
1192
|
+
"templates/github/atdd-bun.yml": "b54fe01661e7141ae70b6db881a4870c4a09c11b1be29ed8364ace35dc4e0564"
|
|
1110
1193
|
}
|
|
1111
1194
|
}
|
package/lib/scan.mjs
CHANGED
|
@@ -248,3 +248,40 @@ export function templateLiterals(text) {
|
|
|
248
248
|
}
|
|
249
249
|
return found;
|
|
250
250
|
}
|
|
251
|
+
|
|
252
|
+
// Blank line comments and block comments with spaces, preserving every line and
|
|
253
|
+
// column offset — but KEEP string literals. maskLiteralsAndComments is for checks
|
|
254
|
+
// that must not fire on rule prose inside strings; this is for checks whose payload
|
|
255
|
+
// IS the string (telemetry identities passed to emit-like calls).
|
|
256
|
+
export function maskComments(text) {
|
|
257
|
+
const out = text.split("");
|
|
258
|
+
const blank = (from, to) => {
|
|
259
|
+
for (let k = from; k < to && k < text.length; k++) if (out[k] !== "\n") out[k] = " ";
|
|
260
|
+
};
|
|
261
|
+
let i = 0;
|
|
262
|
+
while (i < text.length) {
|
|
263
|
+
const ch = text[i], next = text[i + 1];
|
|
264
|
+
if (ch === "/" && next === "/") {
|
|
265
|
+
let j = i;
|
|
266
|
+
while (j < text.length && text[j] !== "\n") j++;
|
|
267
|
+
blank(i, j);
|
|
268
|
+
i = j;
|
|
269
|
+
} else if (ch === "/" && next === "*") {
|
|
270
|
+
let j = text.indexOf("*/", i + 2);
|
|
271
|
+
j = j === -1 ? text.length : j + 2;
|
|
272
|
+
blank(i, j);
|
|
273
|
+
i = j;
|
|
274
|
+
} else if (ch === '"' || ch === "'" || ch === "`") {
|
|
275
|
+
let j = i + 1;
|
|
276
|
+
while (j < text.length) {
|
|
277
|
+
if (text[j] === "\\") { j += 2; continue; }
|
|
278
|
+
if (text[j] === ch || text[j] === "\n") break;
|
|
279
|
+
j++;
|
|
280
|
+
}
|
|
281
|
+
i = text[j] === ch ? j + 1 : j;
|
|
282
|
+
} else {
|
|
283
|
+
i++;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return out.join("");
|
|
287
|
+
}
|
package/package.json
CHANGED
|
@@ -323,6 +323,57 @@
|
|
|
323
323
|
}
|
|
324
324
|
},
|
|
325
325
|
|
|
326
|
+
"telemetry": {
|
|
327
|
+
"type": "object",
|
|
328
|
+
"description": "The acceptance's explicit telemetry decision. `required` names the concrete telemetry items whose emission this acceptance must observe; `not-applicable` records why nothing beyond the tested return value is externally useful. This block supersedes the DESCRIPTIVE half of `signal` (metrics/traces/logs/events); it does not touch the EXECUTABLE bar `signal.metric` + `signal.threshold`, which is a gate, not telemetry.",
|
|
329
|
+
"$comment": "Introduced with the telemetry tracking-plan profile. Every acceptance in an adopting repository carries exactly one of the two dispositions — the false choice between 'test every debug log' and 'have no observability requirement' is what this block removes. Items listed here must resolve to tracking-plan files under telemetry/ (planner.telemetry.acceptance-decision).",
|
|
330
|
+
"required": ["disposition"],
|
|
331
|
+
"additionalProperties": false,
|
|
332
|
+
"properties": {
|
|
333
|
+
"disposition": {
|
|
334
|
+
"type": "string",
|
|
335
|
+
"enum": ["required", "not-applicable"]
|
|
336
|
+
},
|
|
337
|
+
"rationale": {
|
|
338
|
+
"type": "string",
|
|
339
|
+
"minLength": 20,
|
|
340
|
+
"description": "Required with disposition: not-applicable — why no observable outcome beyond the tested return value is externally useful."
|
|
341
|
+
},
|
|
342
|
+
"events": {
|
|
343
|
+
"type": "array",
|
|
344
|
+
"minItems": 1,
|
|
345
|
+
"items": {"$ref": "#/definitions/telemetry_event_urn"}
|
|
346
|
+
},
|
|
347
|
+
"metrics": {
|
|
348
|
+
"type": "array",
|
|
349
|
+
"minItems": 1,
|
|
350
|
+
"items": {"$ref": "#/definitions/telemetry_metric_urn"}
|
|
351
|
+
},
|
|
352
|
+
"traces": {
|
|
353
|
+
"type": "array",
|
|
354
|
+
"minItems": 1,
|
|
355
|
+
"items": {"$ref": "#/definitions/telemetry_trace_urn"}
|
|
356
|
+
},
|
|
357
|
+
"logs": {
|
|
358
|
+
"type": "array",
|
|
359
|
+
"minItems": 1,
|
|
360
|
+
"items": {"$ref": "#/definitions/telemetry_log_urn"}
|
|
361
|
+
}
|
|
362
|
+
},
|
|
363
|
+
"allOf": [
|
|
364
|
+
{
|
|
365
|
+
"$comment": "not-applicable forbids item lists: an acceptance cannot simultaneously require nothing and require something.",
|
|
366
|
+
"if": {"properties": {"disposition": {"const": "not-applicable"}}, "required": ["disposition"]},
|
|
367
|
+
"then": {"not": {"anyOf": [{"required": ["events"]}, {"required": ["metrics"]}, {"required": ["traces"]}, {"required": ["logs"]}]}}
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"$comment": "required declares at least one concrete item; resolution against the tracking plan is a cross-artifact validator concern.",
|
|
371
|
+
"if": {"properties": {"disposition": {"const": "required"}}, "required": ["disposition"]},
|
|
372
|
+
"then": {"anyOf": [{"required": ["events"]}, {"required": ["metrics"]}, {"required": ["traces"]}, {"required": ["logs"]}]}
|
|
373
|
+
}
|
|
374
|
+
]
|
|
375
|
+
},
|
|
376
|
+
|
|
326
377
|
"metadata": {
|
|
327
378
|
"type": "object",
|
|
328
379
|
"required": ["wagon"],
|
|
@@ -389,8 +440,26 @@
|
|
|
389
440
|
"author": {"type": "string"},
|
|
390
441
|
"created": {"type": "string"}
|
|
391
442
|
}
|
|
392
|
-
}
|
|
443
|
+
},
|
|
444
|
+
"telemetry": {"$ref": "#/properties/telemetry"}
|
|
393
445
|
}
|
|
446
|
+
},
|
|
447
|
+
"telemetry_event_urn": {
|
|
448
|
+
"$comment": "Concrete telemetry URNs accepted in an acceptance's telemetry decision. Same grammar as telemetry-plan.schema.json's id, where path and ownership coherence are additionally checked.",
|
|
449
|
+
"type": "string",
|
|
450
|
+
"pattern": "^telemetry:event:(ui|ux|be|nw|db|st|tm|sc|au|fn|if):[a-z][a-z0-9-]*:[a-z][a-z0-9-]*$"
|
|
451
|
+
},
|
|
452
|
+
"telemetry_trace_urn": {
|
|
453
|
+
"type": "string",
|
|
454
|
+
"pattern": "^telemetry:trace:(ui|ux|be|nw|db|st|tm|sc|au|fn|if):[a-z][a-z0-9-]*:[a-z][a-z0-9-]*$"
|
|
455
|
+
},
|
|
456
|
+
"telemetry_log_urn": {
|
|
457
|
+
"type": "string",
|
|
458
|
+
"pattern": "^telemetry:log:(ui|ux|be|nw|db|st|tm|sc|au|fn|if):[a-z][a-z0-9-]*:[a-z][a-z0-9-]*$"
|
|
459
|
+
},
|
|
460
|
+
"telemetry_metric_urn": {
|
|
461
|
+
"type": "string",
|
|
462
|
+
"pattern": "^telemetry:metric:(ui|ux|be|nw|db|st|tm|sc|au|fn|if):[a-z][a-z0-9-]*:[a-z][a-z0-9-]*:(latency|duration|throughput|error_rate|success_rate|count|size|age|staleness|freshness)$"
|
|
394
463
|
}
|
|
395
464
|
}
|
|
396
465
|
}
|