docs(research): 31 cohort test artifacts exist, 6 run in CI (#342) - #436
docs(research): 31 cohort test artifacts exist, 6 run in CI (#342)#436tucktuck101 wants to merge 1 commit into
Conversation
Signed-off-by: tucktuck101 <jeffreytaylorrobertson@gmail.com>
serina-mcfall
left a comment
There was a problem hiding this comment.
Blocker — the headline "31" is 32, and the note's own table says so
Using the note's own definition (a test_*.py or test-*.sh file under launchpad/), at the pinned SHA:
$ git ls-tree -r --name-only f75085d5c -- launchpad | grep -cE '/test_[^/]*\.py$'
18
$ git ls-tree -r --name-only f75085d5c -- launchpad | grep -cE '/test-[^/]*\.sh$'
14
18 + 14 = 32. The note's own coverage table sums the same way — 6 + 13 + 5 + 6 + 1 + 1 = 32. deploy/test-run-guard.sh appears as a row in the table and is then dropped from the total.
The same off-by-one surfaces twice more from the same root:
- line 49 — "26 shell scripts of which 13 are tests." Fourteen match
test-*.sh; 13 is the count forlaunchpad/scriptsalone. - line 13 — "13 production shell scripts." 26 − 14 = 12.
Why this blocks rather than files: 31 is the PR title, the frontmatter description, and the denominator of "6 of 31" (line 90), "25 unrun test artifacts" (line 128), and the criterion-8 phrasing. Those become 6 of 32, 26 unrun, 14 shell test scripts. This is exactly the figure that gets lifted into #290 and never re-derived — and #290's criterion 8 is being written from it.
Low — .yaml vs .yml
Lines 13 and 163 say "34 YAML files". The count is right; every one of them is .yml. The label will send the next person grepping for the wrong glob.
What is right — and it is nearly all of it
The number that actually matters, "6 run in CI", is correct, and so is essentially every supporting figure. Verified independently:
- Extension totals reproduce exactly:
62 py / 26 sh / 34 yml. - Production Python by directory reproduces exactly: scripts 11, review-agent 24 (21 + 3 in
dimensions/), project-intelligence 6, agents 3 (1 + 2 inthe-professor/tools/) = 44; 44 + 18 = 62. Thelaunchpad/scriptsshell figure of 16 is right too (14 in the directory + 2 intestdata/). - The complete
run:inventory across the fivelaunchpad-*.ymlworkflows reproduces line for line — including the detail that the threediscoverinvocations differ (adr-checkbare at :63,pr-checkwith-t … -vat :100,security-auditnarrowed with-p "test_security_audit*.py"at :56). That is the kind of distinction most inventories flatten. - No workflow references
launchpad/project-intelligence,launchpad/agents, or anylaunchpad/scripts/test-*.sh. The singlelaunchpad/deploymention repo-wide isdocker.yml:142, and it is a comment — exactly as claimed. - The
CONTROLSlist is verbatim: 13 entries, none a test module. suite.pyreferences none of the fivetest_*.pymodules.
Your "Not checked" list is honest and includes the sharpest question in the whole area — whether discover actually collects all six, given that empty discovery reads as a pass. That one is worth its own issue whatever happens to the count.
The fix here is arithmetic, not research. The research is sound.
Reviewed at head f75085d5c. The recount was run by me directly at that SHA.
🤖 Review drafted by Claude Code (claude-opus-5) for @serina-mcfall.
Summary
Answers #342 with the denominator criterion 3 was missing: 44 production Python modules, 13 production shell scripts and 34 YAML files under
launchpad/, guarded by 31 test artifacts (18 Python test files, 13test-*.sh). CI invokes exactly two things and covers 6 of the 31. The two unnamed gaps are the 13 shell test scripts, which no workflow runs, andreview-agent's five unittest suites, which are easy to confuse with its containment controls.Related issue
Closes #342
Issue type
Task
Agent provenance
Objective
Add
launchpad/Research/342-cohort-executable-inventory.mdenumerating cohort-owned executables underlaunchpad/and, per test artifact, whether any CI workflow runs it.Impacted components
launchpad/Research/342-cohort-executable-inventory.md
Approach and rejected alternatives
Enumerated from
git ls-filesso the method is mechanical and reproducible, then listed everyrun:line across all fivelaunchpad-*.ymlworkflows and matched the two sets. #342 asked specifically for a reproducible mechanical method rather than a remembered list, because the failure mode is a forgotten directory.Rejected trusting the workflow names.
launchpad-review-agent-controls.ymlsounds like it runs the review agent's tests; readingrun_controls.py's hardcodedCONTROLSlist shows it runs thirteencheck_*.pyscripts and none of the fivetest_*.pysuites. That distinction is the main thing this document contributes, and a name-level reading would have missed it.Verification
Command run:
Raw output:
Not verified
Whether the 13
test-*.shscripts pass. I inventoried them; I ran none. They may be green, stale or broken, and that changes the cost of wiring them in considerably.Whether
unittest discover -s launchpad/scriptsactually collects all six Python test files. It should by naming convention, but I did not run it and read the count — and #270 records that an empty discovery can read as a pass, which is exactly this hazard.Whether review-agent's 13
check_*.pycontrols subsume what its fivetest_*.pysuites assert. I established they are different invocations, not that the coverage is disjoint.The 34 YAML files were counted, not classified. Some are deploy configuration rather than executables, and the category boundary is genuinely arguable — as it is for
bin/lefthook(a cohort divergence under ADR-0017, executable, outsidelaunchpad/) and the five ADR-0005 deployment files (cohort-owned, not executable). This counts what is underlaunchpad/; it does not settle the category.Upstream's
scripts/directory is excluded, though the fork's CI depends on several of those scripts.Security implications
None from the document. One observation for reviewers:
launchpad/deploy/'s only test artifact,test-run-guard.sh, is not run by any workflow — and the deploy scripts are the code that touches the live relay host. That is the highest-consequence entry in the unrun column.Escalations
launchpad/scriptsthe full Python suite runs on every pull request, plusmutation_harness.py. And my own earlier sweep comment on prd: the cohort test suite — what we test that upstream doesn't #290 implied the review agent's suites run in CI — they do not. Editing the PRD is not mine to do.CONTROLS, or whether the controls already suffice, is a call for whoever owns that code.