Skip to content

Restrict --tfm all to package discovery - #9915

Merged
richlander merged 11 commits into
mainfrom
claude/sweet-dirac-acgz5w
Oct 12, 2026
Merged

richlander merged 11 commits into
mainfrom
claude/sweet-dirac-acgz5w

Conversation

@richlander

@richlander richlander commented Oct 10, 2026 •

Copy link
Copy Markdown
Owner

Part of #9833 under #9240. This corrects #9904 and supersedes the document-only rule from #3885.

Summary

--tfm all is package discovery, in the manner of NuGet Package Explorer. It lists archive content across every framework by path and never touches the IL reader. Introspection across several frameworks has no meaningful answer, so --tfm all is accepted only by package. Every request that needs one selected framework, or reads an assembly or PDB, fails before acquisition.

Design basis:

  • Normative owner: a new focused document, All-frameworks package discovery.
  • Inventory: it consumes compile selection's existing available-slice inventory, and that contract is unchanged.
  • Cross-references: the other owners only point to it.

Changes

  • package-tfm-all-discovery.md (new owner)
    • Exact claim and admission table:
      • The default request returns a discovery projection. Files, Dependencies (every group) and archive- or metadata-only sections are admitted.
      • Package Info is admitted without its selected-framework, ecosystem and binary_signals fields.
      • --library, Dependency Hierarchy, assembly- or PDB-reading sections, and categories containing them fail.
      • package query fails.
      • Every non-package command with a package target fails and names package <id> --tfm all.
      • Every non-package target (--platform, local file, project) fails.
      • Admitted sections skip the package-wide binary-signal scan.
    • Discovery projection:
      • It is a Hierarchy of rows with framework, role and path cells, under framework context nodes ordered by TfmResolver priority.
      • Every candidate is a row. Explicit _._ markers are rows. Tool slices come from Package Info tool measurements, and a tool slice without a Library is also a row.
      • Tree is the native presentation. JSON, envelope, TSV, JSONL, table, Count and --rows observe the same rows.
      • Only rows in their framework's selected compile projection, and tool Library rows, are followed with --tfm <framework> --library <path>. The rest are discovery-only.
    • Adoption:
  • output-shapes.md: the Declare library --tfm all as one Library aggregate Table #9904 aggregate Table contract is replaced by a cross-reference.
  • section-cardinality.md: --tfm all has no Library row unit.
  • package-file-inventory.md: "--tfm all adds no predicate", and admission is deferred to the new owner.
  • package-library-scope.md: the children document is scoped to requests without --tfm all, and the --tfm all Library routes are retired rather than repopulated.
  • package-info-tool-measurements.md: the CLI all gate's selected-TFM assertions change with the adoption.
  • artifact-acquisition-and-workspaces.md: its two all-framework gate cases become rejection gates.

Not in this PR:

Validation

  • npx markdownlint-cli on all seven changed files: clean.
  • Current behaviors were observed with a NativeAOT build of main. They include EntityFramework@6.4.4, System.Linq@4.3.0, Microsoft.CSharp@4.7.0, dotnet-ef and tool packages.
  • Every doc, skill and the README were swept for all spellings of --tfm all. The remaining "all-framework" mentions describe the router's installed-framework platform search, which this change does not touch.
  • 11 adversarial review rounds. The maintainer approved continuing past the six-round checkpoint. Blocking findings per round went 2, 3, 2, 2, 1, 1, 1, 2, 1, 1, and round 11 was clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

#9904 declared library --package ... --tfm all as one Library aggregate
Table. The intent of --tfm all is narrower: package discovery in the
manner of a package explorer, listing archive content across every
framework by path without acquiring assembly metadata. Selecting one
Library, or introspecting sections, across several frameworks has no
meaningful answer.

Package file inventory now owns --tfm all as package-only discovery.
library ... --tfm all and package ... --library --tfm all fail before
acquisition and name package <id> --tfm all instead. Output shapes
replaces the aggregate Table contract with that rule, section
cardinality no longer gives --tfm all a Library row unit, and Package
library scope records that #9833 retires the --tfm all Library routes
and makes Package's default Library hierarchy honor --tfm all.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu
Round 1 review found that the package-discovery rule left assembly-
reading package sections and type/member package targets unplanned, and
that it assigned the all-framework population to Package library scope,
which excludes Package selection.

Compile selection owns target requests and already issues the binary-free
available-slice inventory, so it now owns --tfm all: not a target request,
selecting no projection, showing every available slice in the default
hierarchy. Any request that consumes a selected projection or reads an
assembly fails before acquisition, including library, type, and member
package targets, package --library, and package sections such as
SourceLink, Signals, and Package Info's selected-framework facts. The
other documents now cross-reference that owner, and the #9833 adoption
list names every route.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

Copy link
Copy Markdown
Owner Author

Round 1 reconciliation (candidate 0c5188e91)

The adversarial review (one seat) found 2 blocking findings. Both are accepted and fixed in 293acad56.

Finding Disposition
F1. "Never acquires assembly metadata" and "valid only on package discovery" conflict with package sections that still read every DLL under --tfm all. Examples: -S @SourceLink (8 libraries, PDB rows), -S Signals, and Package Info's selected-TFM facts. type --package P --tfm all fails after acquisition instead. None of these was in the adoption list. Accepted. The rule now states its admission criterion. A request that consumes a selected compile projection or reads an assembly fails before acquisition and names package <id> --tfm all. That covers library/type/member package targets, package --library, and assembly-reading package sections (SourceLink, Signals, Package Info's selected-framework facts). Sections that read only archive entries or package metadata are admitted. The #9833 adoption list names every route.
F2. The all-framework population was assigned to package-library-scope.md, which excludes Package selection and the native Package Tree. package-file-inventory.md's own scope is Files. Accepted. Compile selection owns target requests and already issues the binary-free available-slice inventory, so it now owns --tfm all:
  • --tfm all is not a target request and selects no projection.
  • The default hierarchy shows every available slice, in the inventory's deterministic order, with its ref/lib candidates by path and its explicit empty-group marker.
  • package-file-inventory.md, output-shapes.md, section-cardinality.md and package-library-scope.md now only cross-reference it.

Non-blocking observations:

  • Duplicate restatement: output-shapes.md now carries a one-sentence cross-reference instead of repeating the rule.
  • Stale current-mechanics docs: integrations.md, inspection-space.md, assembly-inspection-query.md, and the cli-row-selection.md exclusion lists go stale once Package Library population: one compile view, explicit RID implementation, no whole-package fallback #9833 removes the code.
  • Code strings: the CLI help at LibraryAddressCommandDefinitions.cs:464 and the error strings at LibraryCommand.cs:3780-3817 also change in that adoption.

Next: round 2 on 293acad56.


Generated by Claude Code

Round 2 review found that compile selection disclaims CLI behavior and
rendering, so it could not own cross-command admission; that the
assembly-read test left framework-selecting metadata sections such as
Dependencies and Dependency Hierarchy unclassified; and that find,
extensions, diff, and depends were missing from the covered routes.

All-frameworks package discovery is now the focused owner. It consumes
compile selection's existing available-slice inventory without changing
that contract, which is restored. Its admission table classifies every
route: the default hierarchy (including tool packages), Files,
Dependencies, manifest-only sections, and Package Info without its
selected-framework fields are admitted; --library, Dependency
Hierarchy, assembly- or PDB-reading sections, categories containing
them, and every non-package command fail before acquisition. Its
adoption section lists the observed current behaviors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

Copy link
Copy Markdown
Owner Author

Round 2 reconciliation (candidate 293acad56)

The adversarial review (one seat) found 3 blocking findings. All three are accepted and fixed in 64ae94b46.

Finding Disposition
B1. Compile selection's Composition section disclaims CLI behavior and rendering. It also has no inventory-only request and doesn't cover tool packages. So it could not own command admission, error text or hierarchy rendering, which repeats F2 at a different owner. Accepted. A new focused owner, All-frameworks package discovery, owns --tfm all. It consumes compile selection's existing available-slice inventory without changing that contract. The compile-selection edit is reverted, and the other four docs now only cross-reference the new owner.
B2. The "reads an assembly" test is the wrong criterion. -S Dependencies --tfm all returns 0 rows because it filters by the literal all. -S "Dependency Hierarchy" --tfm all throws an internal exception. Neither section was classified. Accepted. Admission now fails anything that "needs one selected framework, or reads an assembly or a PDB". The owner's admission table covers:
  • Dependencies: every dependency group.
  • Dependency Hierarchy: fails before acquisition.
  • Package Info: drops its selected-framework fields.
  • Manifest-only sections: unchanged.
  • A category containing a failing member: fails rather than dropping members.
B3. find, extensions, diff and depends accept --tfm all today and weren't in the covered list or the adoption list. Accepted. Every command with a package target other than package fails before acquisition and names package <id> --tfm all. The adoption section lists the observed find, extensions and diff behavior.

Non-blocking observations:

Next: round 3 on 64ae94b46.


Generated by Claude Code

Round 3 review found that Package Info still admitted ecosystem and
selected-status fields that read assemblies for a selected framework,
and that the --tfm all default Tree overlapped the Package children
document, whose rows promise --library paths the default framework
would reject.

Package Info now omits every field that needs a selected framework or
reads an assembly, named explicitly. The --tfm all default Tree is a
discovery projection this owner defines, grouped by framework in
descending priority with tool slices from Package Info tool
measurements; each row carries its framework so following it adds
--tfm. Package library scope records that boundary in one sentence.
The admission table adds archive-and-metadata sections, package query,
and workspace, and the adoption section corrects the depends, member,
and workspace observations and names two more stale documents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

Copy link
Copy Markdown
Owner Author

Round 3 reconciliation (candidate 64ae94b46)

The adversarial review (one seat) found 2 blocking findings. Both are accepted and fixed in 1e2ec9ea9.

Finding Disposition
R3-B1. Package Info still admitted fields that read assemblies for a selected framework: Ecosystem Dependencies and Ecosystem Dependency Status (the rollup of the Ecosystem Dependencies section, which fails), and Selected-TFM Status. Accepted. Package Info now omits every field that needs a selected framework or reads an assembly, and lists them: Selected TFM, Selected-TFM Status, the selected-TFM folder/library count/size measurements, Ecosystem Dependencies and Ecosystem Dependency Status.
R3-B2. The --tfm all default Tree overlapped the Package children document owned by package-library-scope.md. Its rows promise package P --library <path> navigation, and the default framework rejects other frameworks' paths. Accepted. The --tfm all default Tree is now a discovery projection the new owner defines, not the children document.
  • It is grouped by framework in descending priority, then by name.
  • It shows ref/lib candidates by path and explicit empty markers.
  • Tool packages group their tool slices per Package Info tool measurements.
  • Every row carries its framework, so following a row uses --tfm <framework> --library <path>.
  • package-library-scope.md records that boundary in one sentence, and its children-document population is unchanged.

Non-blocking observations:

  • Taken: section rows. A row for "sections that read only archive entries or package metadata" replaces the "manifest-only" label.
  • Taken: tool-slice owner. It is now linked, and the projection owns its own order.
  • Taken: adoption bullet corrected. Package-mode depends already fails before acquisition. Type-mode depends, member and workspace accept --tfm all, and package query returns zero matches.
  • Taken: package query classified. It fails before acquisition because it evaluates assemblies. workspace is added to the failing commands.
  • Taken: stale docs. cli-architecture.md and find-search-service.md are added to the adoption's stale-docs list.
  • Not taken: docs/overview.md authority entry. That file is release-managed, so its owner entry rides release preparation. The recent package-domain owners also have none.
  • Not taken: --library error text. The row's "names the section or flag" stands, and the frame wording was mine.

Next: round 4 on 1e2ec9ea9.


Generated by Claude Code

Round 4 review found that the discovery projection owned only the
default Tree, so JSON, row formats, Count, and --rows still came from
the selected-framework children document; and that admitted sections
still ran the package-wide binary-signal scan, whose binary_signals
result Package Info JSON emits.

The projection is now a Hierarchy of candidate-asset rows with
framework, role, and path cells under framework context nodes ordered
by TfmResolver priority. Every format and terminal of the default
request lowers those rows, and an empty inventory returns the typed
no-Library state. Admitted sections run without the binary-signal scan,
and Package Info excludes binary_signals. Package library scope scopes
its children-document sentence to requests without --tfm all, and the
adoption names the scan site, the QuerySpace declaration, and two more
documents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

Copy link
Copy Markdown
Owner Author

Round 4 reconciliation (candidate 1e2ec9ea9)

The adversarial review (one seat) found 2 blocking findings. Both are accepted and fixed in 586a27d88.

Finding Disposition
R4-B1. The discovery projection owned only the default Tree. Under --tfm all, JSON, the envelope, row formats, Count and --rows were still bound to the selected-framework children document. On main they report target_framework: netstandard2.1, Count 2, and netstandard2.1-only TSV. Accepted. The admission row is now "default request, in every format and terminal". The projection is a Hierarchy under Section shapes:
  • Its rows are candidate assets with framework, role and path cells.
  • They sit under framework context nodes, ordered by TfmResolver priority (highest first), then by name.
  • A slice with an explicit empty group shows its marker and contributes no rows.
  • Tool slices come from Package Info tool measurements.
  • An empty inventory returns the typed no-Library state with zero rows.
Tree is the native presentation. --tree, JSON, the envelope, TSV, JSONL and table output lower the same rows, Count counts them and --rows windows them. package-library-scope.md's children-document sentence is now scoped to requests without --tfm all. The adoption names the QuerySpace producer declaration, cli-reference.md and primary-subject-views.md.
R4-B2. Admitted sections still run the package-wide binary-signal scan (PackageInspector.InspectAsync, scanBinarySignals), which opens every DLL and PDB. Package Info JSON emits the result as binary_signals. Accepted. Admitted sections now produce their ordinary results without the binary-signal scan, and Package Info excludes binary_signals and every member derived from it. Adoption records the scan site, and #9833 skips the scan under --tfm all.

Non-blocking observations, taken:

  • Rank: named as TfmResolver priority.
  • Empty inventory: stated.
  • NoCompileAssets non-claim: clarified. Under --tfm all, such a package shows the empty state and is not searched.

Next: round 5 on 586a27d88. Round 6 is the checkpoint.


Generated by Claude Code

Round 5 review found that the empty-group sentence dropped a slice's
real candidates when the slice also had a marker, and left marker-only
frameworks visible in the Tree but absent from flat formats and Count.

Every candidate is now a row whatever markers its slice has, and each
explicit empty-group marker is itself a ref row at ref/<tfm>/_._, so
every framework appears in every lowering. The empty state applies to an
empty compile and tool inventory, the producer's placement and lack of a
Browser consumer are stated, and Package library scope scopes its
navigation sentence to requests without --tfm all.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

Copy link
Copy Markdown
Owner Author

Round 5 reconciliation (candidate 586a27d88)

The adversarial review (one seat) found 1 blocking finding. It is accepted and fixed in 40e1e8282. Everything from rounds 1-4 is confirmed resolved.

Finding Disposition
R5-B1. "A slice with an explicit empty group … contributes no rows" had two effects. It dropped real candidates from a slice that also has a marker, which compile selection allows. It also left marker-only frameworks in the Tree but absent from flat formats and Count. System.Linq@4.3.0 has 11 marker-only slices and 4 real ones: the Tree would show 15 frameworks, while TSV and Count would reflect 4. Accepted. Every candidate is a row, whatever markers its slice also has. Each explicit empty-group marker is itself a row with role ref and archive path ref/<tfm>/_._, so every framework appears in every lowering and in Count.

Non-blocking observations:

  • Taken: empty state. It now applies to an empty compile and tool inventory.
  • Taken: producer placement. The producer sits beside the Package children producer with its own QuerySpace declaration. It has no Browser/Wasm consumer, because Inspect Web has no --tfm all gesture.
  • Taken: --library navigation. In package-library-scope.md, "Without --tfm all," now scopes the navigation sentence.
  • Left: binary-scan adoption bullet. It is slightly broad, since the lightweight Target Frameworks path and cache hits don't rescan. The contract is unaffected.
  • Left: Audit Findings not named. The "reads an assembly or a PDB" criterion already classifies it.

Next: round 6 on 40e1e8282, which is the six-round checkpoint.


Generated by Claude Code

Copy link
Copy Markdown
Owner Author

Round 6 reconciliation (candidate 40e1e8282): six-round checkpoint

The adversarial review (one seat) found 1 blocking finding. Every finding from rounds 1-5 is confirmed resolved, and the reviewer reports nothing else blocking.

Finding Disposition
R6-B1. The rule "every row is followed with --tfm <framework> --library <path>" contradicts the row population. Rows include lib candidates shadowed by a real ref asset, and _._ marker rows, and neither is a valid --library target. On Microsoft.CSharp@4.7.0, --tfm netstandard2.0 --library lib/netstandard2.0/Microsoft.CSharp.dll and --tfm net45 --library ref/net45/_._ both exit 1. The lib-shadowing half was latent since round 4, and round 5's marker rows made the conflict unavoidable. Accepted, not yet fixed. Proposed one-sentence edit: a row is followed with --tfm <framework> --library <path> only when its path is in that framework's selected compile projection, or it is a tool row. Marker rows and shadowed or suppressed candidates are listed for discovery only. The R5-B1 population is kept, and compile selection is unchanged.

Non-blocking, left:

  • The marker path is rebuilt in the inventory's framework spelling, not the archive's exact casing.
  • lib/<tfm>/_._-only frameworks are not compile slices, so the projection omits them (-S Files still shows them).

The PR has reached the repository's six-round checkpoint, so I'm stopping here for a decision on further rounds.


Generated by Claude Code

Round 6 review found that the projection promised every row could be
followed with --tfm <framework> --library <path>, while its population
includes marker rows and lib candidates that a real ref asset shadows,
neither of which --library accepts.

Only a row in its framework's selected compile projection, or a tool
row, carries that navigation; marker rows and shadowed or suppressed
candidates are listed for discovery only. Marker paths are stated in the
inventory's framework spelling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

Copy link
Copy Markdown
Owner Author

The maintainer approved continuing past the six-round checkpoint. 9bb129528 fixes R6-B1:

  • Navigable rows: only a row whose path is in its framework's selected compile projection, or a tool row, is followed with --tfm <framework> --library <path>.
  • Discovery-only rows: marker rows, and candidates that a real ref asset shadows or a co-located marker suppresses, are listed for discovery only.
  • Marker spelling: marker paths are stated in the inventory's framework spelling.

Round 7 review is starting on 9bb129528.


Generated by Claude Code

Round 7 review found that Package Info tool measurements gates
`-S "Package Info" --tfm all` on the selected-TFM fields that the new
owner omits, with no cross-reference or adoption entry.

Package Info tool measurements now records that its CLI all gate's
selected-TFM assertions change with the All-frameworks package discovery
adoption under #9833, while its download and cold/warm assertions remain.
The new owner's adoption lists the current Package Info behavior and that
gate, and a tool slice without a Library is a row so it stays visible in
every format.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

Copy link
Copy Markdown
Owner Author

Round 7 reconciliation (candidate 9bb129528)

The adversarial review (one seat) found 1 blocking finding. It is accepted and fixed in 44c1fdd33. R6-B1 is confirmed resolved, and the reviewer found nothing else blocking.

Finding Disposition
B1. package-info-tool-measurements.md has a required gate, PackageCommand_DeclaredToolUsesAggregateToolMeasurementsColdAndWarm, that runs -S "Package Info" --tfm all and asserts the selected-TFM fields. The new owner omits those fields under --tfm all, without a cross-reference or an adoption entry. Accepted. The tool-measurements owner now records, below its gate table, that the CLI all gate's selected-TFM assertions change with the All-frameworks discovery adoption under #9833. Its download and cold/warm assertions are unchanged. The new owner's Adoption section lists current Package Info behavior (selected fields and Ecosystem Dependencies are kept) and that gate.

Non-blocking, taken: a tool slice without a Library is now a row with role tool and its slice directory path, so it stays visible in every format. That mirrors the R5-B1 marker fix.

Next: round 8 on 44c1fdd33.


Generated by Claude Code

Round 8 review found that --platform, local-file, and other non-package
targets accept --tfm all under three gated tests while the exact claim
says only package accepts it, and that two owners name a library
--package --tfm all audit test as a gate.

Following the maintainer's direction that --tfm all is only for
package, non-package targets now fail before acquisition and say so;
the adoption records the three gates and the CLI row selection gate row
it replaces. The Untrusted data threat model and Assembly audit gates
join the adoption's retirement list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

Copy link
Copy Markdown
Owner Author

Round 8 reconciliation (candidate 44c1fdd33)

The adversarial review (one seat) found 2 blocking findings. Both are accepted and fixed in 7cfd2108a. Everything from rounds 1-7 is confirmed resolved, and the whole-document check found nothing else blocking.

Finding Disposition
B1. Non-package targets (--platform, a local file) accept --tfm all, under three gated tests: BodyShapesSectionTests.TfmAll_StaysOutsideTheDeclaration, LibraryCommand_TfmAll_PlatformRouteRetainsSingleShapeOutput and LibraryCommand_TfmAll_LocalFileRetainsSingleShapeOutput. cli-row-selection.md also records a gate row for them. The exact claim says only package accepts --tfm all, but the table didn't classify these routes. Accepted, following the maintainer's direction that --tfm all should only be on package. A new admission row says any command with a non-package target fails before acquisition and states that --tfm all applies only to package. Adoption records the three gates and the row-selection gate row, which the #9833 adoption replaces with rejection gates.
B2. untrusted-data-threat-model.md and assembly-audit.md name LibraryCommand_TfmAll_PreservesHealthyIdentifierAuditResults as a per-framework audit gate, and Adoption didn't list them. Accepted. Both are now in Adoption's retirement list.

Next: round 9 on 7cfd2108a.


Generated by Claude Code

Round 9 review found that Artifact acquisition and workspaces gates
package --library --tfm all as a supported route through two test cases,
while the new owner fails it before acquisition.

That owner now records beside its gate that both all-framework cases
become rejection gates, and the discovery owner's adoption lists the
current behavior, the gate owner, and the Command transition model all-TFM
row. A sweep of every document for --tfm all spellings found no other
owner; the remaining all-framework mentions describe router platform
discovery, which this change does not touch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

Copy link
Copy Markdown
Owner Author

Round 9 reconciliation (candidate 7cfd2108a)

The adversarial review (one seat) found 1 blocking finding. It is accepted and fixed in 9c1c8fed1. Everything from rounds 1-8 is confirmed resolved.

Finding Disposition
B1. artifact-acquisition-and-workspaces.md gates package --library --tfm all as a supported route. One gate is the all-framework case of PackageCommand_ExplicitTfmPreservesSelectionAndUsesCompatibleArtifactRoles; the other is the all-frameworks case of PackageCommand_LocalInspectionSelectionPreservesSupportedShapes. Adoption didn't name that doc. Accepted. That owner now records beside its gate that both cases become rejection gates under the new owner. The discovery owner's Adoption lists the current behavior and the gate owner. It also adds the command-transition-model.md all-TFM row, which was non-blocking in the review.

Sweep: to stop finding these one per round, I searched every doc, skill and the README for --tfm all, all-framework, all-TFM, TfmAll, AllTfm and 'all'.

  • Every remaining owner is now referenced by the new doc.
  • The leftover "all-framework" mentions in cli-platform-type-routing.md and member-inspection-planning-and-metadata-projection.md are a different thing: the router's installed-framework platform search. This change doesn't affect them.

Next: round 10 on 9c1c8fed1.


Generated by Claude Code

Round 10 review found that a tool-slice row without a Library counted
as a followable tool row, although its slice directory path is no
--library target.

Navigation now applies to tool Library rows, and tool-slice rows
without a Library join markers and shadowed or suppressed candidates as
discovery-only rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018t8FB3ipLLs41ECJvLVNfu

Copy link
Copy Markdown
Owner Author

Round 10 reconciliation (candidate 9c1c8fed1)

The adversarial review (one seat) found 1 low-severity blocking finding. It is accepted and fixed in 2564cd8ac. The reviewer re-ran the doc/skill sweep and confirmed that every --tfm all owner is covered, and that the platform "all-framework" mentions are out of scope.

Finding Disposition
R10-B1. A tool-slice row without a Library was both followable (it is a "tool row") and implicitly discovery-only (its directory path is no --library target). Accepted. Navigation now applies to tool Library rows. Tool-slice rows without a Library join markers and shadowed or suppressed candidates as discovery-only rows.

Non-blocking, noted for #9833:

  • Several --tfm all tests are not named in any doc; they retire with the IL-reading paths.
  • The --library error wording is governed by the owner's row ("names the section or flag").

Next: round 11 on 2564cd8ac.


Generated by Claude Code

Copy link
Copy Markdown
Owner Author

Round 11 reconciliation (candidate 2564cd8ac)

The adversarial review (one seat) came back clean at 2564cd8ac. Every finding from rounds 1-10 is confirmed resolved, the ownership split is clean, and no target-contract text still treats library or package --library --tfm all as supported.

Non-blocking, left as they are:


Generated by Claude Code

@richlander richlander added the review-clean PR has met the adversarial review standard per AGENTS.md. label Oct 11, 2026 — with Claude
@richlander
richlander merged commit 3e3e45a into main Oct 12, 2026
15 checks passed
@richlander
richlander deleted the claude/sweet-dirac-acgz5w branch October 12, 2026 13:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation review-clean PR has met the adversarial review standard per AGENTS.md.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants