Repository navigation
Conversation
From the 2026-08-22 four-lane review. Each fix was confirmed to fail against the unfixed code before being kept, not merely to pass against the fixed one. CRITICAL -- the diagram subsystem was unreachable by any user. `catalog diagram` imported `diagram_repo` from drydock.diagram.mermaid, a function that had never existed in any commit, behind an `except ImportError` that reported "diagram module not available" -- blaming a module that was present and importable the whole time. All four generators were unit-tested, correct, and reachable by nothing. `diagram_repo` is now written, and `drydock diagram <path>` exists as a top-level command: docs/concepts/diagrams.md had documented it in detail across 290 lines, and drawing a picture of a directory should not require ingesting it into a catalog first. That also makes `component_diagram` reachable for the first time. All four kinds were validated through mermaid-cli, not a regex. `--kind` is now validated against one list shared by the help text, the error message and the dispatch, and the markdown branch goes through `_emit` so `-o` is no longer accepted and dropped. CRITICAL -- the suite's only cross-cutting invariant was switched off. `test_all_import_refs_no_spaces` asserts a property across every parser and every file, and its docstring says it "would have caught Bug B". It could not: the assertion sat inside `except Exception: pass`, and AssertionError is an Exception, so the test ate its own failure. The handler now catches only what the parser raises, and a counter makes the test fail rather than pass vacuously if the fixture ever stops producing imports. Reintroducing the literal Bug B shape now fails the suite; before this it passed. CRITICAL -- docs/concepts/diagrams.md documented a command that did not exist. Every command on the page now runs. The `seams` kind was also misspelled (the real kind is `seam`) and `--seam` takes a contract file, not a type name. HIGH -- identical input produced different architecture. `_depths()` iterated a set, and because the cycle break is memoized, neighbour order decided which node in a cycle got depth 0. Layer counts flipped between consecutive runs on any project with a cycle; Drydock is acyclic, which is why dogfooding never showed it. HIGH -- bridge files changed between runs. `boundaries.py` iterated `all_files` raw and sorted on connection count alone, so ties kept walk order and the `[:30]` truncation dropped a different set each time. The ordering is now a module-level `rank_bridges` with a total key. HIGH -- the git analyzer found zero stable files in a stable repo, from the analyzer whose entire purpose is finding stable extraction candidates. `change_ratio = changes / max_changes` was purely relative: with a 90-day maximum of 3 changes, a file touched once scored 0.33, cleared the `> 0.3` bar and was reported as "high changes, concentrated risk" -- 87 files on Drydock. Churn is now absolute, against a busy line drawn from the 75th percentile with a floor, and a `moderate` category closes the dead zone the old bands left between 0.1 and 0.3, so the counts finally sum to the number of files analysed. Drydock now reports 186 stable of 198, summing exactly. Two of the new regression tests were vacuous on first writing and were rewritten until they actually failed against the unfixed code: the determinism tests had to move into subprocesses with varying PYTHONHASHSEED, because set order is stable within a single process, and the depths fixture had to become dense enough that neighbour order could vary at all. 549 tests pass on 3.10-3.13; container smoke 14/14 plus the new command; no new lint findings. Six high findings remain, listed in SESSIONS/2026-08-22.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The four-lane review, what was fixed, and the six high findings left open with enough detail to resume cold. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This branch has not been deployed
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.
From the four-lane review of
a4d7dae. Full report: https://claude.ai/code/artifact/8b1df379-403b-4c2c-a866-29c541c25a45Every fix was confirmed to fail against the unfixed code, not merely to pass against the fixed one.
Critical
The diagram subsystem was unreachable by any user.
catalog diagramimporteddiagram_repofromdrydock.diagram.mermaid— a function that had never existed in any commit — behind anexcept ImportErrorthat reported "diagram module not available", blaming a module that was present and importable the whole time. All four generators were unit-tested, correct, and reachable by nothing.diagram_repois now written, anddrydock diagram <path>exists as a top-level command —docs/concepts/diagrams.mdhad documented it across 290 lines, and drawing a picture of a directory shouldn't require ingesting it into a catalog first. That makescomponent_diagramreachable for the first time. All four kinds validated through mermaid-cli, not a regex.--kindnow validates against one list shared by help text, error message and dispatch; the markdown branch goes through_emitso-ois no longer accepted and dropped.The suite's only cross-cutting invariant was switched off.
test_all_import_refs_no_spacesasserts a property across every parser and file, and its docstring says it "would have caught Bug B". It couldn't — the assertion sat insideexcept Exception: pass, andAssertionErroris anException. Reintroducing the literal Bug B shape now fails the suite; before this it passed.docs/concepts/diagrams.mddocumented a command that didn't exist. Every command on the page now runs.High
architecturelayer count flipped between identical runs (9 8 8 9 9 9 9 9)_depths()iterates sorted — the memoized cycle break no longer depends on set orderboundariesbridge membership varied with hash seedrank_bridgeswith a total keygitfound zero stable files in a stable repomoderatecategory closes the dead zone. Now 186 stable of 198, summing exactlyThe git one is worth spelling out:
change_ratio = changes / max_changeswas purely relative, so with a 90-day maximum of 3 changes a file touched once scored 0.33, cleared the> 0.3bar and was reported as "high changes, concentrated risk" — 87 files on this repo, from the analyzer whose entire purpose is finding stable extraction candidates.On the tests
Two of the new regression tests were vacuous on first writing and passed against the unfixed code. Both were rewritten until they actually failed:
PYTHONHASHSEED— set order is stable within a single process, so an in-process loop cannot observe hash-order nondeterminism at all.rank_bridgesand tested directly under shuffling.Verification
549 tests pass on 3.10–3.13. Container smoke 14/14 plus the new
diagramcommand. No new lint findings.Six high findings remain, documented with repros in
SESSIONS/2026-08-22.md.