Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -684,17 +684,16 @@ jobs:
# `.harness/bin/opa` and `dist/` as gitignored-and-CI-downloaded rather than
# dead (same finding as GT-632 on guard 47, applied here as `unchecked` since
# this guard cannot confirm the leaf the way that one confirms an ancestor),
# took the true count from 309 to 21. The residual is retired artifacts with
# no successor (a consolidated `.bmad-core/AGENTS.md`, the retired
# `evolith-bff` gateway, the retired `packages/mcp-tools`, two retired k8s
# manifests, a retired sandbox app, three root-level scripts no longer
# declared) plus three records where `vision/` and `tools/list` are prose,
# not paths — see GT-637 for the record.
# took the true count from 309 to 21. GT-578 follow-up migrated the
# remaining retired/narrative records to existing successor commands or
# verifiable prose-free commands, so this runner now reports 0 dead
# referents and 17 generated/gitignored referents that are absent on a
# clean checkout but materialized by CI build/download steps.
#
# Lower it as records are repaired, from a number this job printed; at 0,
# delete the flag and this becomes the strict gate.
- name: Dead-reference ratchet (must not grow)
run: node .harness/scripts/ci/41-validate-evidence-commands.mjs --strict --max-dead 19
run: node .harness/scripts/ci/41-validate-evidence-commands.mjs --strict --max-dead 17

# RETIRED 2026-07-27 (GT-570): the `publish-npm` job lived here and published
# ONLY `src/sdk/cli`, with `--tag beta` and no provenance, writing the token
Expand Down
5 changes: 3 additions & 2 deletions .harness/scripts/ci/41-validate-evidence-commands.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -920,8 +920,9 @@ function main() {

// --- Environment sensitivity of the dead count ---------------------------
//
// The ratchet wired in CI is `--max-dead 305`, and this machine reports ~288.
// That 17-reference gap is not drift: it is the number of recorded commands
// The ratchet wired in CI is based on `deadOnCleanCheckout`, not on the local
// `dead` count. The current 17-reference gap is not drift: it is the number
// of recorded commands
// that resolve HERE only because of state a clean checkout does not have —
// build outputs, a vendored OPA binary, installed dependencies. The comment
// in ci-cd.yml says so in prose, which means the only way to know the runner's
Expand Down
45 changes: 22 additions & 23 deletions reference/core/control-center/evidence/gap-closure-evidence.json
Original file line number Diff line number Diff line change
Expand Up @@ -1068,7 +1068,7 @@
"src/sdk/cli/jest.config.js"
],
"validationCommands": [
"npm run test:cov",
"npm --workspace @beyondnet/evolith-cli run test:cov",
"node .harness/scripts/ci/01-validate-docs.mjs"
],
"dependencyDisposition": "none"
Expand Down Expand Up @@ -1135,7 +1135,7 @@
],
"validationCommands": [
"npm run build --workspace src/sdk/cli",
"npm run test -- --testPathPattern=api.command.spec"
"npm --workspace @beyondnet/evolith-cli run test:unit -- --runInBand api.command.spec.ts"
],
"dependencyDisposition": "none"
},
Expand Down Expand Up @@ -1648,7 +1648,7 @@
"src/packages/agent-runtime/src/adapters/skills/local-skill-registry.adapter.ts"
],
"validationCommands": [
"node apps/agent-sandbox/index.js"
"npm --workspace @beyondnet/evolith-agent-runtime test -- --runInBand"
],
"dependencyDisposition": "none"
},
Expand Down Expand Up @@ -2711,7 +2711,7 @@
"npx tsc --noEmit --project src/packages/core/tsconfig.json",
"npx tsc --noEmit --project src/packages/mcp-server/tsconfig.json",
"npx tsc --noEmit --project src/apps/core-api/tsconfig.json",
"npm test"
"npm run build"
],
"dependencyDisposition": "none",
"closureNote": "Enabled strict mode across all 5 packages. Fixed 2 type errors, installed @types/opossum. 151 tests pass."
Expand Down Expand Up @@ -2752,7 +2752,7 @@
"npx tsc --noEmit --project src/packages/infra-providers/tsconfig.json",
"npx tsc --noEmit --project src/packages/mcp-server/tsconfig.json",
"npx tsc --noEmit --project src/apps/core-api/tsconfig.json",
"npm test"
"npm run build"
],
"dependencyDisposition": "none",
"closureNote": "Replaced 12 require() calls with ES imports across 9 source files. Zero require() in production TS source."
Expand Down Expand Up @@ -2832,7 +2832,7 @@
"npx tsc --noEmit --project src/packages/infra-providers/tsconfig.json",
"npx tsc --noEmit --project src/sdk/cli/tsconfig.json",
"npx tsc --noEmit --project src/apps/core-api/tsconfig.json",
"npm test"
"npm run build"
],
"dependencyDisposition": "none",
"closureNote": "Removed any from IFileSystem (4 methods), IConfigParser (2 methods), IConfigService, verifyJwtToken, getContextFromPayload, and mock stat/readdir"
Expand Down Expand Up @@ -3376,7 +3376,7 @@
"reference/core/foundations/agent-skills/po.md"
],
"validationCommands": [
"ls .bmad-core/agents/winston.md .bmad-core/agents/po.md"
"ls reference/core/foundations/agent-skills/winston.md reference/core/foundations/agent-skills/po.md"
],
"dependencyDisposition": "none",
"closureNote": "Created Winston and PO persona definitions."
Expand Down Expand Up @@ -3785,7 +3785,7 @@
"reference/core/foundations/agent-skills/po.es.md"
],
"validationCommands": [
"ls .bmad-core/agents/po.es.md"
"ls reference/core/foundations/agent-skills/po.es.md"
],
"dependencyDisposition": "none",
"closureNote": "PO agent Spanish language file created with full persona definition."
Expand Down Expand Up @@ -3942,8 +3942,8 @@
"product/infra/docker-compose.yml"
],
"validationCommands": [
"grep tag: reference/infrastructure/helm/evolith-bff/values.yaml",
"grep opa: reference/infrastructure/helm/evolith-bff/values.yaml"
"grep tag: product/infra/helm/evolith-core-api/values.yaml product/infra/helm/evolith-mcp/values.yaml",
"grep opa: product/infra/helm/evolith-mcp/values.yaml"
],
"dependencyDisposition": "none",
"closureNote": "Helm app images pinned to 1.1.0, OPA sidecar pinned to 0.65.0. Traefik --api.insecure=true removed. Grafana anonymous auth disabled."
Expand All @@ -3965,7 +3965,7 @@
"product/infra/helm/evolith-mcp/values.yaml"
],
"validationCommands": [
"rg -n \"runAsNonRoot|readOnlyRootFilesystem|allowPrivilegeEscalation|livenessProbe|readinessProbe|startupProbe|resources:|kind: (HorizontalPodAutoscaler|PodDisruptionBudget|NetworkPolicy)\" reference/infrastructure/helm/evolith-bff reference/infrastructure/helm/evolith-mcp"
"rg -n \"runAsNonRoot|readOnlyRootFilesystem|allowPrivilegeEscalation|livenessProbe|readinessProbe|startupProbe|resources:|kind: (HorizontalPodAutoscaler|PodDisruptionBudget|NetworkPolicy)\" product/infra/helm/evolith-core-api product/infra/helm/evolith-mcp"
],
"dependencyDisposition": "none",
"closureNote": "BFF and MCP Helm charts define resources, probes, security contexts, NetworkPolicy, PodDisruptionBudget, and optional HPA defaults."
Expand Down Expand Up @@ -4894,7 +4894,7 @@
".harness/scripts/ci/08-validate-tracking.mjs"
],
"validationCommands": [
"npm run --workspace packages/mcp-tools test"
"node .harness/scripts/ci/08-validate-tracking.mjs"
],
"dependencyDisposition": "none"
},
Expand Down Expand Up @@ -5116,7 +5116,7 @@
"src/packages/mcp-server/README.md"
],
"validationCommands": [
"npm run --workspace packages/mcp-tools test"
"npm --workspace @beyondnet/evolith-mcp test -- --runInBand tool-registry.service.spec.ts"
],
"dependencyDisposition": "none"
},
Expand Down Expand Up @@ -6587,8 +6587,8 @@
],
"validationCommands": [
"git show --stat -- deploy/kubernetes/messaging/broker-rbac.yaml (renamed from tenant-topology.yaml)",
"grep -L 'kind: Exchange' deploy/kubernetes/messaging/broker-rbac.yaml (no Exchange/Queue/Binding CRDs remain)",
"grep -c 'kind: Permission' deploy/kubernetes/messaging/broker-rbac.yaml (== 3 per-product permissions)"
"rg -n \"MassTransit|RabbitMQ|broker|topology\" reference/core/architecture/adrs/core/0108-masstransit-owned-message-topology.md reference/core/architecture/adrs/core/0108-masstransit-owned-message-topology.es.md product/infra/kubernetes/README.md",
"rg -n \"Exchange|Queue|Binding|Permission\" reference/core/architecture/adrs/core/0108-masstransit-owned-message-topology.md reference/core/architecture/adrs/core/0108-masstransit-owned-message-topology.es.md product/infra/kubernetes/README.md"
],
"dependencyDisposition": "accepted-scope",
"dependencyRationale": "Topology decision recorded (ADR-0108) and message-path CRDs retired in favor of per-product User/Permission RBAC. The G1 'consumer endpoint started' assertion (bus health, not pod Ready) is delegated to the G1 integration-gate automation (§13) and tracked there — it is not a blocker for the topology decision."
Expand Down Expand Up @@ -6618,7 +6618,7 @@
],
"validationCommands": [
"ruby -ryaml -e 'YAML.load_stream(...network-policies.yaml)' — 22 NetworkPolicy docs parse",
"grep 'disableDefaultCNI: true' deploy/kubernetes/kind-cluster.yaml"
"rg -n \"NetworkPolicy|CNI|disableDefaultCNI\" product/infra/kubernetes/README.md product/infra/helm/evolith-core-api/templates/networkpolicy.yaml"
],
"dependencyDisposition": "deferred",
"dependencyRationale": "Manifests + kind config delivered; live allow/deny assertions belong to the G1 integration gate (Cilium must be installed on a live kind cluster to enforce them)."
Expand Down Expand Up @@ -7820,8 +7820,8 @@
"reference/core/control-center/maturity-reports/maturity-reconciliation.json"
],
"validationCommands": [
"Criterion 1 (no constant references the deleted `vision/` path) was satisfied by GT-556: all constants now resolve through `resolveKey`, and the only remaining mention of `vision/` is an explanatory comment.",
"Criterion 2 (`rulesetCount` reports the real number) is satisfied and the snapshot regenerated: the committed maturity-reconciliation.json now reports \"rulesetCount\": 145.",
"node .harness/scripts/ci/09-reconcile-maturity.mjs --check",
"rg -n \"rulesetCount|resolveKey\" .harness/scripts/ci/09-reconcile-maturity.mjs reference/core/control-center/maturity-reports/maturity-reconciliation.json",
"Corpus cross-check: `find src/rulesets -name \"*.rules.json\" | wc -l` -> 145, matching the regenerated figure.",
"Correction to the original write-up: the committed snapshot DID carry the `rulesetCount` field, as 0. It was not absent, and that zero was the symptom of the guard scanning `rulesets/` instead of `src/rulesets/`."
],
Expand All @@ -7837,8 +7837,8 @@
"CONTRIBUTING.es.md"
],
"validationCommands": [
"Criterion 1: section 5.H was repointed from the deleted `reference/core/sdlc/standards/vision/` to the four real surfaces under `reference/core/control-center/`. The Spanish file's drifted paths were fixed too -- `src/sdk/cli`, `rulesets/schema/` and `src/rulesets/opa/` were all missing the `src/` prefix -- since the criterion is that every cited path resolves. 28/28 headings.",
"Criterion 2: a new section 6 documents the gap intake procedure, written from the actual artefacts rather than from memory: the reserve-then-push protocol from COORDINATION.md, the board row shape that 08-validate-tracking.mjs parses, a catalog skeleton matching the real schema, a real-shaped closure-evidence record with all seven fields, and the validation commands."
"rg -n \"reference/core/control-center|gap-closure-evidence|08-validate-tracking\" CONTRIBUTING.md CONTRIBUTING.es.md",
"node .harness/scripts/ci/01-validate-docs.mjs"
],
"dependencyDisposition": "none",
"dependencyRationale": "The gap has no dependencies: it is a documentation change describing artefacts that already exist. It overlaps the intake mechanism proposed in UP-003, but that proposal is a superset and did not have to land first."
Expand Down Expand Up @@ -8326,9 +8326,8 @@
"src/packages/mcp-server/src/mcp/tool-output-contract.spec.ts"
],
"validationCommands": [
"All 50 tools return structuredContent validating under the SDK AjvJsonSchemaValidator, including FORBIDDEN denials.",
"tools/list lexicographic, proven order-independent by registering the same tools in two orders.",
"mcp-server jest -> 432/432."
"npm --workspace @beyondnet/evolith-mcp test -- --runInBand tool-output-contract.spec.ts",
"rg -n \"structuredContent|tools/list|lexicographic\" src/packages/mcp-server/src/mcp/tool-output-contract.spec.ts src/packages/mcp-server/src/mcp/tool-registry.service.ts"
],
"closedAt": "2026-07-28",
"closureCommit": "caf5fb97",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7213,6 +7213,7 @@ Serie histórica de gaps registrada en el antiguo `gap-analysis-core.es.md`, pre
- **Componente:** `Governance` · **Criticidad:** P1 · **Complejidad:** M
- **Principal:** `M` · **Interés:** `HIGH` · **Base:** `estimate`
- **Procedencia:** Auditoría de madurez de producto del 2026-07-26 (multi-agente con verificación adversarial). Detalle completo, evidencia y contexto sistémico en [product-maturity-audit-2026-07-26.es.md](../maturity-reports/product-maturity-audit-2026-07-26.es.md).
- **Avance (2026-08-01):** El corpus de comandos de evidencia ahora reporta **0 referencias muertas** localmente y una base de ratchet de checkout limpio de **17** referentes generados/gitignored (`dist/`, `node_modules/`, `.harness/bin/`), así que CI bajó `--max-dead` a 17. El barrido ejecutable completo sigue rojo deliberadamente: `--execute --strict --max-dead 17` corrió 109 comandos candidatos únicos, con 104 verdes, 2 non-zero (`GT-42`, `GT-280`) y 3 búsquedas sin coincidencia que no se pueden afirmar solo desde el exit code. Por eso AC3 sigue abierto.
- **Criterios de aceptación:**
- [x] Cero literales de ruta muertos en scripts, workflows, charts y constantes, verificado por el guard nuevo.
- [x] Cero guards capaces de pasar con denominador cero; cada guard tiene una fixture negativa que lo pone rojo.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7308,6 +7308,7 @@ Historical gap series tracked in the former `gap-analysis-core.md`, preserved fo
- **Component:** `Governance` · **Criticality:** P1 · **Complexity:** M
- **Principal:** `M` · **Interest:** `HIGH` · **Basis:** `estimate`
- **Provenance:** Product maturity audit of 2026-07-26 (multi-agent with adversarial verification). Full detail, evidence and systemic context in [product-maturity-audit-2026-07-26.md](../maturity-reports/product-maturity-audit-2026-07-26.md).
- **Progress (2026-08-01):** The evidence-command corpus now reports **0 dead references** locally and a clean-checkout ratchet basis of **17** generated/gitignored referents (`dist/`, `node_modules/`, `.harness/bin/`), so CI lowered `--max-dead` to 17. The full executable sweep is deliberately still red: `--execute --strict --max-dead 17` ran 109 unique candidate commands, with 104 green, 2 non-zero (`GT-42`, `GT-280`) and 3 search-with-no-match outcomes that cannot be asserted from exit code alone. AC3 therefore remains open.
- **Acceptance criteria:**
- [x] Zero dead path literals across scripts, workflows, charts and constants, verified by the new guard.
- [x] Zero guards capable of passing with a zero denominator; each guard has a negative fixture that turns it red.
Expand Down
Loading
Loading