lint: no drift check ties the GitLab status vocabulary across fixture, probe and GL_JQ_PIPEMAP #415
Labels
No labels
component:adapters
component:lifecycle
component:qa
component:setup
component:shared
component:worktrees
phase/accepted
phase/backlog
phase/deployed
phase/developing
phase/integrating
phase/planning
phase/qa
phase/requirements
phase/uat
priority:critical
priority:critical
priority:high
priority:high
priority:low
priority:low
priority:medium
priority:medium
type:bug
type:chore
type:docs
type:feature
type:infra
type:tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
jbr870/devwork-skills#415
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Deferred from #47 QA round 1, finding
CR-7(qa-report:v1domain=code phase=validate, comment 2201). Dispositiondefer-to-issue, decided by the operator on 2026-08-26.The gap
The GitLab pipeline status vocabulary is maintained in three independent places, with nothing tying them together:
.devwork/feature-release-pipeline-status-attributable-answer/external-contracts/gitlab-pipelines.sample.json— the captured contract (status_vocabulary_accepted_as_filter).plugin/skills/_shared/procedures/test/pipeline-identity.sh— theAC6_CASEShere-string, hand-transcribed from the fixture.plugin/skills/glab-cli/bin/_lib.sh—GL_JQ_PIPEMAP, the map actually under test.Grepping the probe for
external-contractshits only comments. The fixture is read by a human when authoring the test; it is never read by the test.Why it matters
A future re-capture of the GitLab contract (a new GitLab version adds or removes a status) updates the JSON, and nothing forces
AC6_CASESorGL_JQ_PIPEMAPto follow. The probe stays green while testing a vocabulary the fixture itself says is stale — a green that has stopped meaning what it did.This is the same class the feature's own AC-14 check closes for a different pair (
_GATED_PRIMSin the shared tier vs the contract's Kind column), so the shape of the fix is already established in this repo.Proposed fix
A mechanical drift check in
scripts/lint-conventions.sh, in the same shape as the AC-14_GATED_PRIMScheck that #47 added: parse the vocabulary from the fixture, parse the keys fromGL_JQ_PIPEMAP, parseAC6_CASES, and fail the gate on any divergence between the three.Note the fence-awareness rule in CLAUDE.md if the check has to read markdown; here all three sources are
.json/.sh, so it should not need it.Why it was not fixed in #47
New lint capability against a surface #47 does not otherwise change. #47's own drift check (AC-14) covers the required-vs-gated classification only.
Filed by
/dev:develop→ QA round 1 on issue #47. Component:component:shared(the probe and the lint gate) with acomponent:adaptersedge (glab-cli/bin/_lib.sh).