BOHICA-LABS / BOHICA-LABS/vsdd-factory

process-gap(orchestrator+adversary): ground-truth capture is test-runner-only; lint-class CI gates invisible to convergence (lint-parity analogue of #259/#298)

Open
#309 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
2
Forks
1
Avg merge
6h 43m
Merged PRs (30d)
29

Description

## Class of failure

Per-story adversarial convergence (BC-5.39.001) relies on the orchestrator capturing **ground truth** and attaching it to each fresh-context adversary prompt (the orchestrator-runs-the-suite mitigation discussed in #298 / #259, since the adversary is read-only). In practice that ground-truth capture has been **test-runner-only (GUT)**. The project's CI, however, gates merges on **two independent hard checks**: the test job *and* a separate `lint-gdscript` job. Lint-class defects are therefore invisible to every "ground truth" the adversary sees, and survive CLEAN/NITPICK_ONLY verdicts.

This is the lint-parity analogue of #259/#298 (which are about the *test* tally). Filing separately because the fix is distinct: ground-truth capture must include **every CI hard gate's tool**, not just the test runner.

## Pattern observed (external pilot, ftc-blue — Godot/GDScript)

Early adversarial passes on a story captured only GUT output. The CI `lint-gdscript` job runs `uvx --from gdtoolkit gdlint`. Three gdlint-class, CI-gating defects survived multiple passes that were declared CLEAN:
- `max-line-length: 120` violation in a test file (line 724)
- `max-returns` > 6 in a refactored function
- `function-variable-name` — function-scope locals with a leading underscore (`var _ignored = ...`), invalid under gdlint

None are detectable by GUT. All three would (and one did) fail the `lint-gdscript` hard gate at PR time, after the story had been declared converged. Fixes required additional post-convergence commits and reset the clean-pass streak.

Note: gdlint *also* does not catch tab/space indentation mixing (only Godot's parser does) — so even "GUT + gdlint" is not full parity with the runtime. The general principle stands: ground-truth must mirror **all** merge-blocking gates.

## Root cause

The ground-truth capture protocol named only the test runner. `lint-gdscript` is a separate hard gate. Without running the linter locally and attaching its output, neither orchestrator nor adversary can verify CI-gate parity, so lint defects are structurally invisible to convergence.

## Fix applied in the pilot

`gdlint` (via `uvx --from gdtoolkit gdlint `) is now permanently part of ground-truth capture for every adversarial pass; both test results and lint results are attached to each adversary prompt as verified artifacts.

## Request

Generalize in the orchestrator per-story-delivery template: **ground-truth capture for each adversarial pass must run, and attach the output of, every tool that is a hard merge gate in CI** (test runner + all linters/validators), not just the test runner. Ideally derive the list from the project's CI job definitions so it can't drift. Relates to #259 and #298.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.