Skip to content

run start: lint declared targets against project roots and adapter id conventions - #88

Merged
geuben merged 16 commits into
mainfrom
feat/71-target-lint
Aug 29, 2026
Merged

run start: lint declared targets against project roots and adapter id conventions#88
geuben merged 16 commits into
mainfrom
feat/71-target-lint

Conversation

@geuben

@geuben geuben commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary

  • Adds static target lint at tdd plan register and tdd run start (before the baseline claim) to catch two shapes of plan-author error before anything executes: (1) a target path that duplicates the project's root prefix, and (2) a separator spelling that can never match the adapter's collected-id grammar
  • Grammar rules per adapter: pytest (:: required), vitest (> required), gradle (/ required), xctest (three /-separated parts required); exec has no grammar rule
  • Root-prefix rule: when project.root != "." and the target's path starts with root/, flag it with a suggestion — unless the actual nested directory exists in the worktree (the filesystem-existence exemption passes genuine root/root/… paths)
  • Both gates refuse with reason: "target_lint" and a structured findings list; run start re-lints the stored contract against the current config to catch root/adapter drift since registration

Commits

673c8c8 docs: friction log for issue-71-target-lint
46bf7ca docs: extend register and run-start PRD rows with target lint
43bd20f feat: target lint gates run start before the baseline claim
e65bcbe test: run start re-lints the stored contract against current config
6fe3b74 refactor: register refuses a root-duplicated vitest target
503d5b8 refactor: a genuinely nested root-named path is not flagged
0aaf325 refactor: register refuses a target that duplicates the project root prefix
b6bcb78 feat: xctest lint_target_id flags ids without three slash-parts
baa62cc test: xctest grammar lint requires Bundle/Class/testMethod
b1b852 feat: gradle lint_target_id flags ids missing the / separator
58ea0fd test: gradle grammar lint requires the classname/method slash
aae238f refactor: a vitest target without ' > ' is flagged by the grammar hook
4ffdbf0 feat: vitest lint_target_id flags ids missing ' > '
7c997c0 test: vitest grammar lint requires the ' > ' separator
c1b262f feat: target lint — adapter id-grammar hook, wired into plan register
d6a8433 test: plan register refuses a pytest target with no ::

Test coverage note

All decision-point operators in new code are covered by at least one test (pseudo-mutation analysis passed). 8 cycles declared and delivered, 0 skipped. 3 red-first violations handled via sensitivity checks (cycles 5, 6, 7 passed on arrival due to complete implementation in cycle 1).

Closes #71

geuben added 16 commits August 28, 2026 17:07
TDD-Run: 13
TDD-Cycle: 1
TDD-Phase: red
TDD-Run: 13
TDD-Cycle: 2
TDD-Phase: red
TDD-Run: 13
TDD-Cycle: 2
TDD-Phase: green
TDD-Run: 13
TDD-Cycle: 3
TDD-Phase: red
TDD-Run: 13
TDD-Cycle: 3
TDD-Phase: green
TDD-Run: 13
TDD-Cycle: 4
TDD-Phase: red
TDD-Run: 13
TDD-Cycle: 4
TDD-Phase: green
…prefix

TDD-Run: 13
TDD-Cycle: 5
TDD-Phase: refactor
TDD-Run: 13
TDD-Cycle: 6
TDD-Phase: refactor
TDD-Run: 13
TDD-Cycle: 7
TDD-Phase: refactor
TDD-Run: 13
TDD-Cycle: 8
TDD-Phase: green
@geuben
geuben merged commit 70ec1b6 into main Aug 29, 2026
10 checks passed
@geuben geuben mentioned this pull request Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

run start: lint declared targets against project roots and adapter id conventions

1 participant