Repository navigation
Retire 10 legacy extdeps frontier rows whose module defines exactly one declaration - #12967
Conversation
7215983 to
306f2e7
Compare
…single declaration The 45 kept rows are the modules defining exactly one candidate declaration (type, data or fn; helper/authority names excluded) -- the rule the 464 hand-adopted carriers already on main follow in every single-declaration case (114/114, no counterexamples). Multi-declaration modules keep their frontier rows until each subject is certified by a per-module reading, a split, or a vocabulary extension. - manifest 382 -> 337 (single-column frozen artifact, remove-only) - carrier list 464 -> 509; rosters disjoint; three-way cover holds - placement-gate route comment corrected (gate is rostered and executing) - generated mirrors: extdeps_languages_python_types.rs via --regen-round-cost (converged; v1_rt.rs/lib.rs byte-identical to main) - touches nothing outside dag/extdeps, the frontier artifact, its carrier roster, the gate instrument comment, and that one mirror
306f2e7 to
0eca339
Compare
|
Fixed by a surgical rebuild — new head The 180-file commit was a working-tree accident, not an intended change: unrelated dirty state from an older base (fleet deletions, The rebuilt branch was constructed from The four substantive review points are answered in the rewritten PR body: the subject-selection rule and its 114/114 validation against the hand-adopted precedent, the 203 → 45 walk-back (multi-declaration modules returned to the frontier rather than covered by a scripted scope), the explicit "placement declared, not grounded" statement with the |
…s; total the placement gate's status match Per review and floor findings on 0eca339: - the frontier carrier roster is rebuilt from current origin/main (which had migrated more rows in parallel), so no parallel-migration content is reverted; the stale inherited carrier row for bmc/ipmi_boot_selection.dag (file carries no scope, manifest row untouched) is dropped as disk-contradicting - retirement tightens to modules defining exactly one top-level declaration of any kind; ipmi.dag, openbmc.dag, tcgplayer/store.dag and 32 others go back to the frozen frontier - the placement gate's diff-added-paths fold names all nine GitDiffChangeStatus variants (no wildcard), per the NonFoldResidue affected-set check; no residue roster row needed - regen: first_generation_equal=true; suite 28 PASS / 0 FAIL
|
Both findings fixed and pushed as
Also, per the floor's NonFoldResidue affected-set check (two unrostered wildcard arms in my route): the placement gate's |
Candidates drawn only from legacy_extdeps_scope_frontier.tsv rows at fresh origin/main; each module declares exactly one non-anchor declaration, so the subject is forced (same certified bar as #12967): - hardware.dag -> Hardware - securities.dag -> Securities - vendor.dag -> Vendor (bare identifier; extractor grammar excludes generics) - advertising/types.dag -> AdPriceDetermination - test/http_pilot.dag -> HttpPilotPost - tailscale/acl_api.dag -> TailscaleAclApiError Frontier manifest 368 -> 362; roster +6, all declaring scope on disk. Witnesses: scope suite 28/28 PASS (resolve-grain included), residue 5/5 PASS, regen first_generation_equal=true (162/162). Module content based on this branch's parent (eb2b296); acl_api.dag had a fresh-main import refactor that is deliberately NOT carried here — resolve at rebase.
briansrls
left a comment
There was a problem hiding this comment.
Approved at eb2b2963e1. The ten migrated modules really do have one local modeled declaration, each scope cites that declaration symbolically, and the carrier/frontier/legacy-manifest moves are symmetric. Removing the stale bmc/ipmi_boot_selection.dag carrier row while leaving it on the frontier is also correct.
One wording correction remains in the PR description: boot/framebuffer.dag cites wiki.osdev.org, so the claim that all ten anchors are “non-wiki” is false as written. This is not barred by the current ExternalModelScope law, which requires one subject and one-or-more citations but has no primary-source tier. Please say “non-Wikipedia” or explicitly record OSDev Wiki as the accepted specialized reference; source-tier enforcement would be a separate policy change.
…ment-gate site The mechanism commit totalled extdeps_scope_placement_gate.dag's diff_added_paths_observation (GitDiffChangeStatus match, 9/9 arms), meeting the row's nfr_dissolve_owning_fold dissolution. Main's roster still carried the row, which refused merge_group run 37052103708 (NonFoldResidueRosterDiverged stale=1) when composed with the branch.
briansrls
left a comment
There was a problem hiding this comment.
Re-approved at c2b6da4. Post-eb2b2963e1 branch history contains only two origin/main merge commits and 18ea2b6, whose sole change deletes the NFR row for dag/gunbc/instruments/extdeps_scope_placement_gate.dag::diff_added_paths_observation. That is exactly the site already totalled by the approved mechanism: its GitDiffChangeStatus match names Added, Copied, Renamed, Deleted, Modified, PairingBroken, TypeChanged, Unmerged, and Unknown, with no wildcard. The current PR-owned diff is therefore the approved 10-row migration plus that one now-stale roster deletion; no other branch-authored content changed. The PR body now correctly distinguishes OSDev Wiki from Wikipedia and reconciles the shipped population to 10. All four required jobs are green at this head, and GitHub reports it mergeable.
What
10 extdeps modules declare
extdeps_model_scope: ExternalModelScope(subject = the module's single declaration, citation = the module's pre-existingextdeps_external_authority_anchor) and their rows leave the frozen legacy manifestdag/gunbc/legacy_extdeps_scope_frontier.tsvin the same change — the manifest's own prescribed migration shape (add scope + carrier row + delete manifest row, remove-only, line-grain enforced by the placement gate).Frontier: 382 → 372 rows (372 = 382 − 10. Main's manifest is 382 — the session-start baseline — and has not changed since 2026-09-26, #12341; there was no parallel shrink. This PR's 10 rows are exactly main's current manifest minus these ten.) Carrier roster rebuilt from current main + 10 (rosters disjoint; three-way cover holds).
This is a walk-back of this PR's first push (203 rows) in response to review: 158 of those modules are returned to the frontier. The review was right — see "Subject selection" below.
Subject selection: the rule, and why only 45 rows could carry it
The scope's subject is a
DeclarationRefthat must name the declaration the module exists to model. For 158 of the original 203, the pick was positional (first declaration), and positional picks are guesses:github.CodeSearch), and among type-subjects the hand-picks agree with the local reference-DAG root only ~half the time.bmc/ipmi.dagpair one type with a service and helper declarations) — where uniqueness does the reading — and returns the rest to the frontier: 122 multi-root type modules, 24 multi-fact modules, 2 ambiguous data/fn modules, 35 single-type-but-multi-declaration modules (one type plus a service and/or helper declarations — e.g.bmc/ipmi.dag), plusllm/cli.dag(three anchors spanning Anthropic and OpenAI products — independently versioned upstreams; DESIGN 3 wants a split or per-product modules before any single scope).access/aws_iam.dag, where the composite root isPolicyDocument, notEffect) were treated as ambiguous and reverted: an orphan root can equally be a second subject's component (access/posix.daghas two disjoint type components), so the root test alone is not a reading.Per review point
first_citationreuses the anchor each module already carries. Anchor audit: all 10 kept modules' anchors cite real, non-self upstreams that are not Wikipedia (uri + locator). One of the ten,boot/framebuffer.dag, cites the OSDev Wiki (wiki.osdev.org) — accepted as the specialized reference for VGA hardware programming, which is exactly the hardware the module models; the exclusion that keeps the other 24 anchor modules on the frontier is the general encyclopedia (en.wikipedia.org) as a domain-shape citation, not a specialized reference wiki. On "declared version":external_model_scope_lawrecords the operator verdict (gunbc#7571) that the scope deliberately carries no revision field — a subject module legitimately models multiple releases, and an exact revision is a fact on the module's data rows (fact grain), never a property of the module scope. The 28 self-cited and 24 wiki-cited anchor modules stay on the frontier, where they remain until §3 rules on self-citation and non-versioned sources.carriers_declare_scope_on_disk(hermetic suitedag/test/claim/external_model_scope_witness_test.dag). Shown red on this branch: stripping one kept module's scope → exit 1, exactly one failing claim, all 27 other claims (incl. thered_*machinery self-checks) still pass; restore → 28 PASS. Shown red at base: atorigin/main, stripping adopted carriervendor/microsoft.dag's scope → the suite refuses at resolve grain (the adopted-vendor claim referencesextdeps.vendor.microsoft.extdeps_model_scopedirectly), exit 1.decl_nameresolves. The natural closure is an index-grain host factdeclaration_resolves(module_path, decl_name)wired into the frontier roster exactly like the floor's host-suppliedis_carried; proposed as a follow-up.Controls (final tree)
GitDiffChangeStatusvariants with no wildcard.first_generation_equal=true(zero drift;extdeps_languages_python_types.rsupdated via the sanctioned--regen-round-costround).RosterStale(yaml/types.dag#get) is gone: that row's discharge came from this PR'sstd.decl_refimport pullingstd.methods(which declaresgetas a method) into the file's provider closure; withyaml/types.dagback on the frontier the pair is carried again and the debt roster is byte-identical to main.What remains (372 rows), classified
(The class table below was drawn at the intermediate 45-row pass, whose remainder was 337 = 382 − 45. This PR ships 10, so the live remainder is 372 = 337 + 35 — the 35 single-type-but-multi-declaration modules tightened out last (see subject selection) rejoin the frontier and are being reclassified by the follow-up batches.)
service-shaped bodiesInherited stale row
Current main's carrier roster carried a row for
bmc/ipmi_boot_selection.dagalthough that file declares no scope (it also sits in the frozen manifest). The suite only gates PRs, so main never noticed. This PR drops that one disk-contradicting carrier row (its manifest row is untouched — the file stays tracked on the frontier); flagged to the roster's owners.