docs(discovery): add the ADR Discovery test plan - #54
Merged
Conversation
Specifies how the endpoint collector is measured end to end: three virtual machines, one per operating system, a manifest of real AI tools installed on each, and a comparison of what was installed against what the collector reports. VMs rather than containers because launchd, the Windows registry, Task Scheduler and GUI application bundles are precisely the surfaces several probes exist to read, and no container has any of them. Each run restores a clean snapshot, scans for a baseline, installs the manifest, scans again, and scores the delta - so a reported asset can always be attributed to something deliberately installed. The manifest is grouped the way the collector reports: AI tools split by evidence channel, MCP servers split into declaration sites and launch forms, the programmable surface of skills and hooks, and agents by liveness. Negative controls are a first-class table, because without them a collector that reports everything scores perfectly on every other one. Scoring separates duplicates from true positives, since one install reported twice inflates a fleet inventory rather than partially succeeding. This is a specification. Nothing in it is implemented yet, and the collector it describes is not on main.
The manifest named categories but not contents, so an implementer could not tell which tools to put on the VMs. Every item is now enumerated with a stable id: 120 entries across 50 AI tools, 29 MCP servers, 19 skills and hooks, 12 agents and 10 negative controls. The id is the unit the runner executes, that a run records an outcome against, and that a scorecard reports a miss under. Install-channel variants are named individually rather than described, skills are exact paths rather than directories, and negative controls are specific software. Verified: 120 ids, none duplicated, per-category counts matching the summary table, and all 42 catalog entries covered.
Collaborator
Author
|
Pushed a second commit ( The manifest is now a complete enumerated inventory: 120 entries, each with a stable id, replacing the vague parts. "At least three of the above are installed a second way" became eight named The PR description above has been updated to match. Diff is unchanged in shape — still one file, no code. |
lghupan
approved these changes
Aug 22, 2026
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.
Adds
Discovery/tests/README.md, the specification for how the ADR Discovery endpoint collector is measured end to end. One file, no code.The method
Install a known set of AI tools on a real machine, scan it, and check the collector reports exactly that set — no misses, no inventions, right facts about each one. The comparison between the install manifest and the snapshot is the test result.
Three virtual machines, one per operating system (macOS, Ubuntu LTS, Windows 11). VMs rather than containers because launchd, the Windows registry, Task Scheduler and GUI application bundles are precisely the surfaces several probes exist to read, and no container has any of them. Each run restores a clean snapshot, scans for a baseline, installs the manifest, scans again, and scores the delta — so every reported asset can be attributed to something deliberately installed.
The manifest is a complete, executable inventory
120 entries, each with a stable id. The id is the unit the runner executes, that a run records an outcome against, and that a scorecard reports a miss under. Nothing is left as "and a few others" — an entry not listed is not tested.
T-CLI-01…12·T-APP-01…16·T-EXT-01…05·T-RT-01…09·T-CHAN-01…08M-SITE-01…14·M-PIN-01…09·M-SP-01…06S-01…19AG-01…12N-01…10Grouped the way the collector reports, so each table maps onto a slice of the snapshot:
T-CHAN-04is the usr-merge pair that duplicated every PATH-installed agent on mainstream Linux.~/.claude/skills/pdf-filler/SKILL.md, not "the skills directory".Verified, not asserted
That last property is worth keeping: a catalog entry with no manifest row is a tool the collector claims to recognize but that nothing ever verifies.
Reviewer notes
This is a specification, not an implementation. There is no VM provisioning, no manifest runner and no scoring script. Nothing here runs.
It documents a module that is not on
mainyet. The collector lives on an unmerged branch, so the document references things this repository does not currently contain —FIXTURE_SUITE.md, theadr-discoveryCLI,diff_snapshots, and the 42-entry catalog the manifest was written against. A reviewer cannot verify the coverage claim frommainalone.Merging this puts a test plan in the tree ahead of the thing it tests. That is a deliberate choice to review the methodology on its own; if you would rather it land with the collector, close this and it will come in with that branch instead.
🤖 Generated with Claude Code