fix(validator): close four validator gaps from adopter housekeeping (closes #215)#298
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
otel,metric/métrica,span,trace,dashboard,collector,alert,slog,histogram,telemetr, …). The rule only fires on docs already taggedobservabilidad/observability, so the tag is the real signal.execution_ailogs(close-time aggregation for a spec-originated Charter) +context_spec(area context for an AILOG-originated one), keepingoriginating_*mutually exclusive. Wired into the architectureimplementedoverlay + KG edges;CHARTER-AILOG-REF/SPEC-REFcover the new fields.(external)/(removed)/(relocated: <path>)exemption markers alongside(new). Unmarked missing paths (e.g. unsubstitutedAILOG-YYYY-MM-NNNplaceholders — the 3 real bugs in the report) are still flagged.done/completed/closed→accepted, …) + Levenshtein fallback for typos — and enumerate the lifecycle vocabulary inline in the AILOG template.Design notes
Severityhas onlyError/Warning(noInfo), 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.not:{required:[originating_ailogs, originating_spec]}exactly-one rule; the new fields are not subject to it.Scope
charter.rs(struct),architecture/gather.rs,entities.rs,charter_files.rs(FileExemption).validation.rs(Gaps 1, 2-refs, 3, 4),charter_schema.rstests.charter.schema.v0.json, charter + AILOG templates (EN/es/zh-CN),straymark-charter-newskill (4 variants, codex regenerated).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).status: done→Did you mean 'accepted'?; charteroriginating_spec+execution_ailogs→ no mutual-exclusion error;(external)/(removed)paths not flagged while an unmarked missing path still is; AILOG tagged observability withOTel/dashboard→ no OBS-001.🤖 Generated with Claude Code