Skip to content

fix(validator): close four validator gaps from adopter housekeeping (closes #215)#298

Merged
montfort merged 1 commit into
mainfrom
fix/validator-gaps-215
Jun 20, 2026
Merged

fix(validator): close four validator gaps from adopter housekeeping (closes #215)#298
montfort merged 1 commit into
mainfrom
fix/validator-gaps-215

Conversation

@montfort

Copy link
Copy Markdown
Contributor

Closes #215.

Adopter feedback from the Sentinel 150-doc housekeeping pass (PR #110). All four gaps were verified unaddressed against the current code before implementing.

Changes

Gap Class Fix
1 — OBS-001 False positives (19/19) Widen the observability content check to a broad, case-insensitive vocabulary (otel, metric/métrica, span, trace, dashboard, collector, alert, slog, histogram, telemetr, …). The rule only fires on docs already tagged observabilidad/observability, so the tag is the real signal.
2 — dual-origin Schema vs guidance (N=5) Bless canonical execution_ailogs (close-time aggregation for a spec-originated Charter) + context_spec (area context for an AILOG-originated one), keeping originating_* mutually exclusive. Wired into the architecture implemented overlay + KG edges; CHARTER-AILOG-REF/SPEC-REF cover the new fields.
3 — CHARTER-FILES-EXIST Historical-record noise (16/19) Add (external) / (removed) / (relocated: <path>) exemption markers alongside (new). Unmarked missing paths (e.g. unsubstituted AILOG-YYYY-MM-NNN placeholders — the 3 real bugs in the report) are still flagged.
4 — META-003 Authoring UX (28/93) Suggest the nearest canonical status — semantic alias map (done/completed/closedaccepted, …) + Levenshtein fallback for typos — and enumerate the lifecycle vocabulary inline in the AILOG template.

Design notes

  • Severity has only Error/Warning (no Info), and a closed Charter's table is the place the placeholder bugs live — so Gap 3 uses explicit markers rather than the issue's alternative "downgrade to info on closed", which would have sacrificed that detection.
  • Gap 2 keeps the schema's not:{required:[originating_ailogs, originating_spec]} exactly-one rule; the new fields are not subject to it.

Scope

  • core: charter.rs (struct), architecture/gather.rs, entities.rs, charter_files.rs (FileExemption).
  • CLI: validation.rs (Gaps 1, 2-refs, 3, 4), charter_schema.rs tests.
  • Framework: charter.schema.v0.json, charter + AILOG templates (EN/es/zh-CN), straymark-charter-new skill (4 variants, codex regenerated).
  • No version bumps or tags — release prepared separately (touches core + CLI + framework).

Verification

  • cargo test — full workspace green (348 lib + integration; new unit/integration tests per gap).
  • cargo build --release — clean. cargo clippy — no new warnings in touched files.
  • gen_codex_skills --check — in sync (15 skills).
  • Dogfood on a temp project: status: doneDid you mean 'accepted'?; charter originating_spec + execution_ailogs → no mutual-exclusion error; (external)/(removed) paths not flagged while an unmarked missing path still is; AILOG tagged observability with OTel/dashboard → no OBS-001.

🤖 Generated with Claude Code

…loses #215)

Adopter feedback from the Sentinel 150-doc housekeeping pass (#215):

- Gap 1 (OBS-001): widen the observability content check to a broad, case-
  insensitive vocabulary (OTel, metric/métrica, span, trace, dashboard,
  collector, alert, slog, histogram, telemetr…). The narrow literal set gave
  19/19 false positives; the tag itself is the real signal.
- Gap 2 (Charter dual-origin): bless canonical `execution_ailogs` (close-time
  aggregation for a spec-originated Charter) and `context_spec` (area context
  for an AILOG-originated one), keeping originating_ailogs/originating_spec
  mutually exclusive. Resolves the schema-vs-guidance contradiction (N=5).
  Wired into the architecture `implemented` overlay (gather.rs) and the KG
  edges (entities.rs); CHARTER-AILOG-REF/SPEC-REF now cover the new fields.
- Gap 3 (CHARTER-FILES-EXIST): add `(external)` / `(removed)` /
  `(relocated: <path>)` exemption markers alongside `(new)` so a closed
  Charter's historical table can carry cross-repo / relocated / removed paths
  without de-backticking workarounds. Unmarked missing paths (e.g. unsubstituted
  placeholders) are still flagged.
- Gap 4 (META-003): suggest the nearest canonical status — semantic alias map
  (done/completed/closed → accepted, …) plus a Levenshtein fallback for typos —
  and enumerate the lifecycle vocabulary inline in the AILOG template.

Framework: charter schema + charter/AILOG templates (EN/es/zh-CN) + the
straymark-charter-new skill (4 variants, codex regenerated). No version bumps
or tags (release prepared separately).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@montfort montfort merged commit 0af95aa into main Jun 20, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant