Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dag/extdeps/tools/grep.dag
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module extdeps.tools.grep

import std.types { NonEmptyStr, Bool }
import std.types { NonEmptyStr, Bool, Unit }
import extdeps.external_authority { ExternalAuthority }
import extdeps.uri { Uri, Https }
import extdeps.tools { CliTool, SourceCoreutils }
Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/hostname.dag
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module extdeps.tools.hostname

import std.types { String, List, Bool, Int, NonEmptyStr, Unit }
import std.types { List, Bool, Int, NonEmptyStr, Unit }
import std.string_type { String }
import std.algebra { Empty }
import v2.std.algebra { fold_list, list_append, list_snoc_item }
import v2.std.collection { Map, empty_map, map_insert }
Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/id.dag
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module extdeps.tools.id

import std.types { String, NonEmptyStr, List, Bool }
import std.types { NonEmptyStr, List, Bool, Unit }
import std.string_type { String }
import extdeps.external_authority { ExternalAuthority }
import extdeps.uri { Uri, Https }

Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/jq.dag
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
module extdeps.tools.jq

import std.occurrence_identity { OccurrenceSynthetic }
import std.types { NonEmptyStr, String, Bool, Int, List }
import std.types { NonEmptyStr, Bool, Int, List, Unit }
import std.string_type { String }
import std.algebra { Cons, Empty, trim }
import v2.std.algebra { list_append, list_snoc_item, fold_list }
import v2.std.collection { Map, empty_map, map_insert, map_lookup }
Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/node.dag
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module extdeps.tools.node

import std.types { NonEmptyStr, String, Bool }
import std.types { NonEmptyStr, Bool, Unit }
import std.string_type { String }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.uri { Uri, Https }
Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/npm.dag
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module extdeps.tools.npm

import std.types { NonEmptyStr, String, Bool, FilePath }
import std.types { NonEmptyStr, Bool, FilePath, Unit }
import std.string_type { String }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.uri { Uri, Https }
Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/rustfmt.dag
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ module extdeps.tools.rustfmt
import extdeps.external_authority { ExternalAuthority }
import extdeps.uri { Uri, Https }
import extdeps.tools { CliTool, SourceRustup }
import std.types { Bool, String, FilePath }
import std.types { Bool, FilePath, Unit }
import std.string_type { String }

data extdeps_external_authority_anchor: ExternalAuthority = ExternalAuthority {
uri: Uri {
Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/sed.dag
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module extdeps.tools.sed

import std.types { NonEmptyStr, String, Bool, Int }
import std.types { NonEmptyStr, Bool, Int, Unit }
import std.string_type { String }
import extdeps.external_authority { ExternalAuthority }
import extdeps.uri { Uri, Https }
import extdeps.exec.command { ArgvCommand, argv_command }
Expand Down
5 changes: 3 additions & 2 deletions dag/extdeps/tools/sha256sum.dag
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
module extdeps.tools.sha256sum

import std.types { NonEmptyStr, String, Bool }
import std.types { NonEmptyStr, Bool, Unit }
import std.string_type { String }
import extdeps.external_authority { ExternalAuthority }
import extdeps.uri { Uri, Https }
import extdeps.tools { CliTool, SourceCoreutils }
import gunbc.output_policy { OutcomeIsData }
import extdeps.shell
import extdeps.filesystem.filesystem_io
import extdeps.filesystem.filesystem_io { Filesystem }
import extdeps.crypto.hash { Digest, sha256_digest }
import std.roster_frontier { FrontierRow, frontier_row_decl }
import std.dissolution { unbound_dissolution }
Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/sha512sum.dag
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ module extdeps.tools.sha512sum

import std.algebra { trim }

import std.types { NonEmptyStr, String, Bool, FilePath }
import std.types { NonEmptyStr, Bool, FilePath, Unit }
import std.string_type { String }
import std.content_hash { Sha512Digest, sha512_hex_digest }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/sleep.dag
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module extdeps.tools.sleep

import std.types { NonEmptyStr, Bool }
import std.types { NonEmptyStr, Bool, Unit }
import std.string_type { String }
import std.measure { Second, second_count }
import std.disposition { Disposition, Scaffold, RealizationDispatch }
import std.decl_ref { DeclarationRef, WholeDeclaration }
Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/stat.dag
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module extdeps.tools.stat

import std.types { Bool, String, NonEmptyStr, List }
import std.types { Bool, NonEmptyStr, List, Unit }
import std.string_type { String }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import extdeps.uri { Uri, Https }
Expand Down
3 changes: 2 additions & 1 deletion dag/extdeps/tools/xorriso.dag
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module extdeps.tools.xorriso

import std.types { NonEmptyStr }
import std.types { NonEmptyStr, Unit }
import std.string_type { String }
import extdeps.version { VersionConstraint }
import extdeps.external_authority { ExternalAuthority }
import extdeps.uri { Uri, Https }
Expand Down
123 changes: 61 additions & 62 deletions src/v1/stage0/src/namespace_wave_admission.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1707,69 +1707,68 @@ pub struct TransitionAdmission {
/// and the deletion is paid here. The rows below are a DIFFERENT relocation, not that one restored:
/// empty was the resting state and one change authoring rows back into it is the ordinary motion.
///
/// gunbc#11071 LinuxKernelRelease rehome (2026-09-11). `gunbc.served_surface_browser_observation`
/// authored `LinuxKernelRelease`, the brand for what `uname -r` answers. That is a fact the Linux
/// kernel owns, and it was declared inside a downstream RECEIPT module — so when
/// `extdeps.linux.edac` needed to key its GHES/APEI topology facts to a kernel release it could not
/// reach the brand at all: an extdeps module may not import a gunbc one. The only two landings were
/// re-coining the brand upstream, which is the §3 fork, or moving it. It moved, to the new
/// `extdeps.linux.kernel`, and both prior consumers import it from there.
///
/// WHY `TargetChanged` IS THE CORRECT CLASSIFICATION. The spelling `LinuxKernelRelease` is authored
/// on both sides in all three declarations below, and what changed is which declaration it admits:
/// base `{gunbc.served_surface_browser_observation}`, head `{extdeps.linux.kernel}`. That is the
/// motion this wall exists to make an author say out loud. It is not `AuthoredReferenceResolution`:
/// the name was bound to a real declaration that this change deliberately relocated.
///
/// WHAT MAKES IT SAFE TO ADMIT, adjudicated rather than asserted. The moved declaration is
/// byte-identical to the one it replaces — same name, same `NonEmptyStr where brand(...)` body, same
/// brand STRING, so every `as LinuxKernelRelease` ascription in the corpus denotes the same brand it
/// did at the base; a changed brand string would have changed what the ascriptions mean and this row
/// would be admitting a semantic change under a relocation's name. The two consumers are the
/// complete population: `LinuxKernelRelease` resolved to exactly
/// `gunbc.served_surface_browser_observation` and
/// `test.claim.served_surface_browser_observation_witness` at the base, and both are edited here, so
/// no third site is left resolving through a module that no longer authors the name. The witness
/// suite over the consuming module passes on this head. The closure blast radius the same run
/// measured is 4 modules — `extdeps.linux.kernel` imports only the citation vocabulary the base
/// consumer already reached (`std.types`, `std.decl_ref`, `extdeps.external_authority`,
/// `extdeps.uri`), so nothing downstream gained reach it did not have.
///
/// TRIGGER: these rows go when #11071 merges. The base then authors `LinuxKernelRelease` in
/// `extdeps.linux.kernel`, the delta stops being producible, and CONSUMED comes due on the roster's
/// next touch — adjudicated by the declaring-module join, not by this sentence.
pub const NAMESPACE_TRANSITION_ADMISSIONS: &[TransitionAdmission] = &[
TransitionAdmission {
label: "gunbc#11071 LinuxKernelRelease rehome",
subject: AdmissionSubject::Binding {
module: "gunbc.served_surface_browser_observation",
in_declaration: "ContainerVisibleHostKernel",
spelling: "LinuxKernelRelease",
target: "extdeps.linux.kernel",
},
disposition: NamespaceDeltaDisposition::TargetChanged,
/// THIRTY-FIFTH DISSOLUTION (2026-09-12, gunbc#11137). The three `gunbc#11071 LinuxKernelRelease
/// rehome` rows are deleted and their description with them. #11071 merged, so the base authors
/// `LinuxKernelRelease` in `extdeps.linux.kernel`, the delta stopped being producible, and the
/// required floor on this branch reported all three as `CONSUMED ADMISSION ... already satisfied
/// at the base`. A consumed row's deletion comes due on this roster's OWN next touch; this change
/// is that touch, so the debt is paid here rather than inherited by an unrelated lane. Their
/// TRIGGER, recorded at the time as "these rows go when #11071 merges", is what fired.
///
/// gunbc#11137 sha256sum names Filesystem instead of reaching it (2026-09-12). The row below is a
/// DIFFERENT delta that this change produces, not that one restored: empty is the resting state
/// and one change authoring a row back into it is the ordinary motion.
///
/// WHAT THE CHANGE DID. `extdeps.tools.sha256sum` called `Filesystem.Write` while importing
/// `extdeps.filesystem.filesystem_io` with NO name list. A bare module import drags the whole
/// module into the candidate set for every name it declares, so filesystem_io's copy of
/// `extdeps_external_authority_anchor` -- the per-module convention row some 315 modules each
/// author -- was a candidate at this site. The import now names `{ Filesystem }`.
///
/// WHY `TargetChanged` IS THE CORRECT CLASSIFICATION. The spelling is authored on both sides and
/// what moved is which declarations it admits: base `{extdeps.filesystem.filesystem_io,
/// extdeps.shell, extdeps.tools.sha256sum}`, head `{extdeps.shell, extdeps.tools.sha256sum}`.
///
/// WHAT MAKES IT SAFE TO ADMIT, adjudicated rather than asserted. NO RESOLUTION CHANGES.
/// `extdeps.tools.sha256sum` authors its own `extdeps_external_authority_anchor`, and a module's
/// own declaration wins inside the authored region, so the site resolved to sha256sum's row at the
/// base and resolves to sha256sum's row at the head -- the removed candidate could not have won
/// either way. What narrowed is the SET, from three modules to two, which is the qualification's
/// whole purpose: the resolution stopped depending on a module the author never named. That no
/// consumer changed behaviour is the required floor's verdict on this head, re-derived by
/// `claim_executor --required-ci --source-root dag --source-root src/v2 --required-lane witnesses`
/// and read off its own `required-floor:` verdict line -- named rather than transcribed, because a
/// copied count rots without anyone touching either end (DESIGN §6).
///
/// WHY THE `String` REQUALIFICATION IN THE SAME CHANGE NEEDS NO ROW, which is a fair question to
/// ask of a diff that moves ten import lines onto `std.string_type`. It is not this adjudication's
/// assertion; it is the wave phase's own measurement. That phase compares the binding table on both
/// sides, and on this head it reported exactly ONE `TargetChanged binding` delta -- the row below --
/// and none for `String`. The ten `String` sites appear instead as
/// `ExplicitlyEvaluatedZeroDelta membership <module> -> std.string_type ... reached by a name this
/// module authors`: explicitly evaluated, zero delta. The reason is that `std.types` declares no
/// `String` at all, so `import std.types { String }` bound nothing and the read fell through to the
/// shared slot, where scope precedence already answered `std.string_type`. Naming that module
/// changes the read's AUTHORIZATION -- from an accident of precedence to something the author
/// wrote -- without changing which declaration answers it. A delta row adjudicates a changed
/// binding; there is no changed binding here to adjudicate.
///
/// TRIGGER: this row goes when #11137 merges. The base then carries the named import, the delta
/// stops being producible, and CONSUMED comes due on the roster's next touch.
pub const NAMESPACE_TRANSITION_ADMISSIONS: &[TransitionAdmission] = &[TransitionAdmission {
label: "gunbc#11137 extdeps.tools.sha256sum names Filesystem instead of reaching it",
// The rationale, the safety adjudication and the trigger are in the doc comment on this
// const rather than repeated here. In one line: the bare `import
// extdeps.filesystem.filesystem_io` became `{ Filesystem }`, which narrowed this
// spelling's candidate set without changing what it resolves to.
subject: AdmissionSubject::Binding {
module: "extdeps.tools.sha256sum",
in_declaration: "extdeps_external_authority_anchor",
spelling: "extdeps_external_authority_anchor",
target: "extdeps.tools.sha256sum",
},
TransitionAdmission {
label: "gunbc#11071 LinuxKernelRelease rehome",
subject: AdmissionSubject::Binding {
module: "gunbc.served_surface_browser_observation",
in_declaration: "playwright_chromium_151_linux_arm64_headless_navigation_run",
spelling: "LinuxKernelRelease",
target: "extdeps.linux.kernel",
},
disposition: NamespaceDeltaDisposition::TargetChanged,
},
TransitionAdmission {
label: "gunbc#11071 LinuxKernelRelease rehome",
subject: AdmissionSubject::Binding {
module: "test.claim.served_surface_browser_observation_witness",
in_declaration: "witness_run_owns_one_execution_identity",
spelling: "LinuxKernelRelease",
target: "extdeps.linux.kernel",
},
disposition: NamespaceDeltaDisposition::TargetChanged,
},
];
disposition: NamespaceDeltaDisposition::TargetChanged,
}];

/// The denominators a green must name (DESIGN §5): a run that cannot say what it covered is an
/// instrument failure wearing coverage's clothes.
Expand Down
Loading