Skip to content

Hold only implicated Members in the Annotated Type Map - #10956

Open
richlander wants to merge 3 commits into
mainfrom
feature/map-implicated-members
Open

richlander wants to merge 3 commits into
mainfrom
feature/map-implicated-members

Conversation

@richlander

Copy link
Copy Markdown
Owner

Summary

A map answers its request and nothing else. Rows are the Members the request
implicates, and Count is their number: a request for unsafe Members counts the
unsafe Members. This PR amends the Annotated Type Map owner to say so.

  • One-version map: holds the Type's coordinate (exact Library and fully
    qualified metadata Type name), its outcome, and the annotations of the
    implicated Members and Type entries only.
    • A request naming no analysis returns the default document: the coordinate
      and outcome, with no rows.
    • A complete Member listing is a separate listing query, run from the
      coordinate.
  • Map diff: lists the Members that were added, removed, or changed, with
    their finding transitions.
    • Shape facts and fact streams are read from the version pair as inputs to
      the map diff. They are never content of a one-version map.
    • The map diff never compares two one-version maps.
    • The "Retained maps" gate becomes "Detached shape facts": the two sides' API
      shape facts compare without reopening an image.
    • The "One implementation" gate now requires the shared finding families
      instead.
    • A new gate, "Implicated Members", pins the unsafe-Members Count and the
      default document.
  • Planning:
    • A one-version result demands only its selected finding families, at every
      terminal.
    • A one-version request naming no analysis resolves with no demand.
    • Planning step 5 aligns step 2's resolution code with this.
  • Generation: one-version Rows holds only listed keys. The retained-maps
    comparison gate is replaced by an "Implicated Members" gate.
  • Diff capabilities: drops the retained-map comparison as a T1/T2 cache and
    its step 6 owner-change row, which this amendment supersedes.

PR #10954 (API shape family) is held until this merges. It will then take a
round 3 so that its producer, given no key set, returns only the Type's own
entry, and so that Finding Diff Any's whole-Type case passes every census
Member key explicitly.

Validation

npx markdownlint-cli passes on all four changed documents.

Tracked by #10215, under theme #10169.

🤖 Generated with Claude Code

A map answers its request: one version holds the Type's coordinate and
outcome and the Members the requested analyses implicate, so Count
counts them, and a request naming no analysis is the coordinate alone.
Shape facts and fact streams are inputs the map diff reads from the
pair, never one-version content, and no map diff compares two
one-version maps. Planning's one-version results demand only finding
families; generation and Diff capabilities follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@richlander richlander added the documentation Improvements or additions to documentation label Oct 30, 2026
@richlander

Copy link
Copy Markdown
Owner Author

Round 1 reconciliation (head 96aecc3b7)

The result is not clean: three blocking findings and five observations. The
reviewer was Claude opus, standing in for GPT-6 Sol because this harness
advertises no GPT models. The round 2 candidate takes everything except the
docs/overview.md sentence in B2, which is release-managed and needs the
maintainer's go-ahead.

  • B1 (accepted). Nothing produced the default document's outcome. The fix
    makes it come from coordinate resolution:

    • The map owner now says the host resolves a one-version coordinate to
      exactly one Type definition before asking for the map.
    • A coordinate that resolves to none or to several is a typed request
      failure, never a Complete map, so the default document's outcome is
      Complete. The Implicated Members gate pins this.
    • Planning's Focus section records that the host forms the one-version focus
      from a coordinate it has already resolved, and that planning reads no
      image.
    • Generation's Output section now holds the coordinate, and gives the
      outcome of a plan with no demand.
  • B2 (accepted; partly blocked). The superseded wording in
    diff-capabilities.md:437-439, "once per version when a host retains maps
    as a cache", is removed. The router entry at docs/overview.md:1076-1079 is
    release-managed, so I can't edit it without the maintainer's authorization.
    The proposed replacement:

    one Type's coordinate and the Members a request implicates, each with its
    findings, at one version, and the map diff of the Members added, removed,
    or changed, from the same families, with Rows as a projection, at Library,
    Type, and Member scope.

  • B3 (accepted). The map diff reads shape facts for every Member of both
    sides, and fact streams only for the Members it lists. These inputs serve
    the map diff and are never map content.

  • Observation 1 (taken). The planning definition of "map-carried" now says
    the map diff reads these contributions, and that the name is historical. The
    code-level trail reason is unchanged.

  • Observation 2 (taken). The Diff capabilities "Map diff" provision now
    reads shape facts in lockstep, and reads fact streams and findings only for
    listed rows.

  • Observation 3 (taken). The one-version answer is now "the Members those
    findings implicate".

  • Observation 4 (taken). Step 5 notes that the one-version map reads only
    finding families.

  • Observation 5 (acknowledged). Bringing the code into line remains
    planning step 5's work.

🤖 Generated with Claude Code

A one-version coordinate resolves to exactly one Type definition before
the map is asked for; none or several is a typed request failure, so the
default document is Complete. Generation's output holds the coordinate.
The map diff reads shape facts for every Member and fact streams only
for listed Members. Drop the retained-map cache wording from Diff
capabilities and recast map-carried as read by the map diff.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@richlander

Copy link
Copy Markdown
Owner Author

Round 2 reconciliation (head 7de3a6004)

The result is not clean: two blocking findings, both accepted and both fixed
in the round 3 candidate. The reviewer was Claude opus, standing in for GPT-6
Sol because this harness advertises no GPT models.

  • F1 (accepted). The map owner's Implementation section promised a
    census built only for listed Members, which planning and generation cannot
    deliver. It now says the map diff compares fact streams only for the
    Members it lists. Whether the census itself can be limited to listed Members
    needs the shape comparison to run before the census demand. Adoption steps 3
    and 5 measure that, as they did at base.
  • F2 (accepted). Count was inconsistent about the Type row. Count is now
    the number of listed rows, including the Type row when the Type's own code is
    implicated. A request for unsafe Members counts the unsafe Members, plus the
    Type row when, for example, its static constructor is unsafe. The Why
    section and the Implicated Members gate agree with the Exactness gate, and
    the gate now includes a fixture where only the static constructor is unsafe.
  • Observation 1 (taken). The One implementation gate is now
    outcome-level: a one-sided listed Member's Added or Removed findings
    equal that side's one-version findings.
  • Observation 2 (deferred). A Library-scope default document stays with
    step 4's Library-scope producer, per Non-claims.

The round 1 findings B1 and B3 and observations 1–3 and 5 are resolved.
Observation 4 stands as non-blocking. B2's docs/overview.md router entry is
still Blocked until the maintainer authorizes it.

🤖 Generated with Claude Code

Count is the number of listed rows, the Type row included when the
Type's own code is implicated. The map diff compares fact streams only
for listed Members; whether the census itself is limited to them stays
with adoption steps 3 and 5. The One implementation gate becomes
outcome-level.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@richlander

Copy link
Copy Markdown
Owner Author

Round 3 reconciliation (head 08c42f899)

CLEAN. The reviewer was Claude opus, standing in for GPT-6 Sol because
this harness advertises no GPT models.

Status of the earlier findings:

  • Round 1: B1 and B3 are resolved. Of B2, the Diff capabilities part is
    resolved, but the docs/overview.md router entry is still Blocked until
    the maintainer authorizes editing that release-managed file.
  • Round 2: F1 and F2 are resolved.

Three non-blocking observations are wording only, and I'm leaving them for the
next edit of these documents:

  • generation's Implicated Members gate does not mention the Type row;
  • planning step 5's wording still implies the one-version map depends on the
    shape-fact families;
  • a short line left in the map owner's Implementation section after reflowing.

🤖 Generated with Claude Code

@richlander richlander added the review-clean PR has met the adversarial review standard per AGENTS.md. label Oct 30, 2026

This branch has not been deployed

No deployments
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.

1 participant