Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
0eedb5e
WIP: Model the audience-observable failure chain for served surfaces:…
Aug 1, 2026
7800994
Ground browser error presentation observations
Aug 1, 2026
81e7f91
Pin Chromium error-page authority
Aug 1, 2026
0894024
Retain served-surface observation evidence
Aug 1, 2026
f5509a3
Distinguish absent and empty response bodies
Aug 1, 2026
0a21ec6
WIP: Model the audience-observable failure chain for served surfaces:…
Aug 1, 2026
8dc027c
WIP: Model the audience-observable failure chain for served surfaces:…
Aug 1, 2026
0b8bb74
Ground exact Chromium navigation specimens
Aug 1, 2026
4609ad1
Ground browser run operating system identity
Aug 1, 2026
fb3d240
Make specimen facts canonical projections
Aug 1, 2026
020c0de
Witness empty 502 presented document
Aug 1, 2026
17406ae
WIP: Model the audience-observable failure chain for served surfaces:…
Aug 1, 2026
c62f591
Bind exact specimens to their run identity
Aug 1, 2026
6285abb
Scope specimen type to the exact run
Aug 1, 2026
9e53090
Own empirical observations inside the exact run
Aug 1, 2026
0211123
WIP: Model the audience-observable failure chain for served surfaces:…
Aug 1, 2026
9801478
Merge remote-tracking branch 'origin/main' into session/neat-ferret-4…
Aug 1, 2026
3b485fb
WIP: chromium/playwright extdeps
Aug 1, 2026
28e0d31
Merge remote-tracking branch 'origin/main' into session/neat-ferret-4…
Aug 1, 2026
90b72b8
Close extdeps scope and byte-count runtime gaps
Aug 1, 2026
d4d1c4b
Route screenshot integrity through the wet frontier
Aug 1, 2026
8bcf775
Make exact browser specimens structural
Aug 1, 2026
a956cc8
Merge remote-tracking branch 'origin/main' into session/neat-ferret-4…
Aug 2, 2026
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
55 changes: 55 additions & 0 deletions dag/extdeps/automation/playwright.dag
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
module extdeps.automation.playwright

import std.types { NonEmptyStr }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.uri { Uri, Https }

data extdeps_external_authority_anchor: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "github.com/microsoft/playwright/tree/26a9e470a7b3c7822084b09fb7f13902c5f37b51"
}
}

data playwright_browser_provisioning_authority: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "playwright.dev/docs/browsers"
}
}

type Playwright
= | PlaywrightAutomationProject

data playwright: Playwright = PlaywrightAutomationProject

data extdeps_model_scope: ExternalModelScope = ExternalModelScope {
subject: ExternalSubjectRef {
declaration: DeclarationRef {
module_path: "extdeps.automation.playwright",
decl_name: "playwright",
field: WholeDeclaration
}
},
first_citation: extdeps.automation.playwright.extdeps_external_authority_anchor,
further_citations: [extdeps.automation.playwright.playwright_browser_provisioning_authority]
}

type PlaywrightVersion = NonEmptyStr where brand("PlaywrightVersion")
type PlaywrightSourceRevision = NonEmptyStr where brand("PlaywrightSourceRevision")

type PlaywrightBuild {
version: PlaywrightVersion
source_revision: PlaywrightSourceRevision
}

data playwright_1_62_1: PlaywrightBuild = PlaywrightBuild {
version: "1.62.1" as PlaywrightVersion,
source_revision: "26a9e470a7b3c7822084b09fb7f13902c5f37b51" as PlaywrightSourceRevision,
}

type PlaywrightBrowserBinaryProvenance
= | PlaywrightManagedChromiumDownload

data playwright_identity_boundary_note: NonEmptyStr = "PlaywrightBuild names the automation dependency. PlaywrightManagedChromiumDownload says only that Playwright provisioned and launched the tested Chromium binary; it does not reclassify that binary as Google Chrome or establish behavior for any browser distribution." as NonEmptyStr
66 changes: 66 additions & 0 deletions dag/extdeps/browser/chromium.dag
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
module extdeps.browser.chromium

import std.types { NonEmptyStr }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.uri { Uri, Https }

data extdeps_external_authority_anchor: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "chromium.googlesource.com/chromium/src/+/782af9cb30a53f54487e5d2e44738645a8ec457c"
}
}

data chromium_net_error_authority: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "chromium.googlesource.com/chromium/src/+/782af9cb30a53f54487e5d2e44738645a8ec457c/net/base/net_error_list.h"
}
}

type Chromium
= | ChromiumProject

data chromium: Chromium = ChromiumProject

data extdeps_model_scope: ExternalModelScope = ExternalModelScope {
subject: ExternalSubjectRef {
declaration: DeclarationRef {
module_path: "extdeps.browser.chromium",
decl_name: "chromium",
field: WholeDeclaration
}
},
first_citation: extdeps.browser.chromium.extdeps_external_authority_anchor,
further_citations: [extdeps.browser.chromium.chromium_net_error_authority]
}

type ChromiumVersion = NonEmptyStr where brand("ChromiumVersion")
type ChromiumSourceRevision = NonEmptyStr where brand("ChromiumSourceRevision")

type ChromiumSourceIdentity
= ChromiumSourceRevisionObserved { revision: ChromiumSourceRevision }
| ChromiumSourceRevisionUnobserved

type ChromiumBuild {
version: ChromiumVersion
source_identity: ChromiumSourceIdentity
}

data chromium_151_0_7922_34: ChromiumBuild = ChromiumBuild {
version: "151.0.7922.34" as ChromiumVersion,
source_identity: ChromiumSourceRevisionUnobserved,
}

type ChromiumNavigationError
= ChromiumErrConnectionRefused
| ChromiumErrHttpResponseCodeFailure

type ChromiumInternalDocument
= | ChromiumWebDataErrorDocument

type ChromiumInternalUrl
= | ChromiumWebDataErrorUrl

data chromium_identity_boundary_note: NonEmptyStr = "ChromiumBuild names the Chromium project build grounded by its reported version. The tested binary did not report its source revision, so ChromiumSourceRevisionUnobserved keeps that identity gap explicit; the pinned authority revision grounds the modeled Chromium vocabulary but is not attributed to the binary. ChromiumBuild is not a Google Chrome, Opera, Edge, or Playwright identity. ChromiumWebDataErrorUrl denotes the exact chrome-error://chromewebdata/ internal URL observed by the downstream receipt without reclassifying the binary as another browser distribution." as NonEmptyStr
32 changes: 32 additions & 0 deletions dag/extdeps/os/debian.dag
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
module extdeps.os.debian

import std.decl_ref { DeclarationRef, WholeDeclaration }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.uri { Uri, Https }

data extdeps_external_authority_anchor: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "www.debian.org/releases/bookworm/"
}
}

type Debian
= | DebianProject

data debian: Debian = DebianProject

data extdeps_model_scope: ExternalModelScope = ExternalModelScope {
subject: ExternalSubjectRef {
declaration: DeclarationRef {
module_path: "extdeps.os.debian",
decl_name: "debian",
field: WholeDeclaration
}
},
first_citation: extdeps.os.debian.extdeps_external_authority_anchor,
further_citations: []
}

type DebianRelease
= | Debian12Bookworm
20 changes: 19 additions & 1 deletion dag/extdeps/session_dashboard.dag
Original file line number Diff line number Diff line change
@@ -1,14 +1,32 @@
module extdeps.session_dashboard

import std.types { Bool, NonEmptyStr, String }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import v2.std.optional { Present, Absent }
import extdeps.external_authority { ExternalAuthority }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.uri { Uri, Https }

data extdeps_external_authority_anchor: ExternalAuthority = ExternalAuthority {
uri: Uri { scheme: Https, locator: "github.com/gunb-ai/session-dashboard" }
}

type SessionDashboard
= | GunbSessionDashboard

data session_dashboard: SessionDashboard = GunbSessionDashboard

data extdeps_model_scope: ExternalModelScope = ExternalModelScope {
subject: ExternalSubjectRef {
declaration: DeclarationRef {
module_path: "extdeps.session_dashboard",
decl_name: "session_dashboard",
field: WholeDeclaration
}
},
first_citation: extdeps.session_dashboard.extdeps_external_authority_anchor,
further_citations: []
}

type DashboardBaseUrl = NonEmptyStr where brand("DashboardBaseUrl")
type DashboardRelativePath = NonEmptyStr where brand("DashboardRelativePath")

Expand Down
84 changes: 84 additions & 0 deletions dag/extdeps/tools/wc.dag
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
module extdeps.tools.wc

import std.types { FilePath, String, NonEmptyStr }
import std.measure { ByteSize, byte_size_count }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.uri { Uri, Https }
import extdeps.tools { CliTool, SourceCoreutils }

data extdeps_external_authority_anchor: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "www.gnu.org/software/coreutils/manual/html_node/wc-invocation.html"
}
}

data wc_cli_tool: CliTool = CliTool {
name: "wc",
min_version: none,
installable_via: [SourceCoreutils],
}

data extdeps_model_scope: ExternalModelScope = ExternalModelScope {
subject: ExternalSubjectRef {
declaration: DeclarationRef {
module_path: "extdeps.tools.wc",
decl_name: "wc_cli_tool",
field: WholeDeclaration
}
},
first_citation: extdeps.tools.wc.extdeps_external_authority_anchor,
further_citations: []
}

service wc.ByteCount {
operation File {
input { path: FilePath }
output {
stdout: String from "stdout"
success: Bool from "exit_success"
}
readonly
transport shell { argv: ["wc", "--bytes", "{path}"] }
}
}

type FileByteCountRead
= FileByteCountObserved { count: Int }
| FileByteCountUnavailable { reason: NonEmptyStr }

type FileByteCountVerification
= FileByteCountMatches
| FileByteCountDiffers {
observed_count: Int,
expected: ByteSize,
}
| FileByteCountVerificationUnavailable { reason: NonEmptyStr }

fn file_byte_count_via_wc(path: FilePath) -> FileByteCountRead {
let read = wc.ByteCount.File(path: path)
if !read.success {
FileByteCountUnavailable { reason: "wc --bytes failed" as NonEmptyStr }
} else {
match parse_int(s: split(s: trim(read.stdout), delimiter: " ").first()) {
Present { value: n } => if n < 0 {
FileByteCountUnavailable { reason: "wc returned a negative byte count" as NonEmptyStr }
} else {
FileByteCountObserved { count: n }
}
Absent => FileByteCountUnavailable { reason: "wc byte count was not an integer" as NonEmptyStr }
}
}
}

fn verify_file_byte_count(read: FileByteCountRead, expected: ByteSize) -> FileByteCountVerification {
match read {
FileByteCountObserved { count } => if count == byte_size_count(expected) {
FileByteCountMatches
} else {
FileByteCountDiffers { observed_count: count, expected: expected }
}
FileByteCountUnavailable { reason } => FileByteCountVerificationUnavailable { reason: reason }
}
}
6 changes: 6 additions & 0 deletions dag/gunbc/ci_layer_roots.dag
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,12 @@ data witness_exclusion_frontier: List<WitnessExclusionRow> = [
reason: "wet-integration class (wet_integration_offline_note posture), substantiated per-row at enrollment (the d4bef96 floor red is the receipt): every test fn in this file performs genuinely live host effects — a Filesystem.List directory walk of dag/extdeps and a git.Core.DiffNameStatus diff from the pinned legacy_manifest_freeze_sha to HEAD — and hermetic discovery REFUSES them (no published mock operation for either), so there is no hermetic dual to discover. The discriminating pure logic is NOT excluded: scope_cover_holds / manifest_freeze_holds / carrier_content_declares_scope RED controls and all roster/manifest accounting stay discovery-enrolled in external_model_scope_witness_test.dag per-PR; only the live observations run here.",
dissolve_on: "TWO triggers, either deletes this row: (a) the wet lane un-darkens and admits live integration rows under its own budget (the wet_integration_offline_note trigger) — this file's fns enroll there as declared execution rows; or (b) the ExternalModelScope requirement is promoted to its v2.lens.mandatory_tag region (gunbc.extdeps_scope_frontier legacy_manifest_shape_note dissolve-on) — the storage-grain cover deletes outright, file and row together. Local recipe until then: claim_batch --wet --source-root dag --source-root src/v2 --entry dag/test/claim/external_model_scope_live_cover_witness_test.dag --functions frontier_cover_of_live_extdeps_tree_holds,red_cover_walker_refuses_missing_root,manifest_rows_all_predate_freeze_sha"
},
WitnessExclusionRow {
pattern: "served_surface_browser_artifact_integrity_witness_test.dag",
classification: OfflineLocalRecipe,
reason: "wet-integration class (wet_integration_offline_note posture), substantiated by CI run 30719890594: witness_checked_in_screenshots_match_receipts executes sha256sum and wc shell transports against checked-in PNG bytes; their real execution reaches shell.Mktemp.Dir and other host effects with no mock_response, so hermetic discovery correctly REFUSES rather than fabricating a temporary directory or file result. The pure FileByteCountVerification coproduct controls are split into wc_byte_count_verification_witness_test.dag and remain ordinary per-PR discovery; only the live artifact observation is excluded.",
dissolve_on: "the wet lane un-darkens and admits live checked-in-artifact integrity rows under its own budget; this witness enrolls there as a declared execution row and this exclusion deletes. Local recipe until then: claim_batch --wet --source-root dag --source-root src/v2 --entry dag/test/claim/served_surface_browser_artifact_integrity_witness_test.dag --function witness_checked_in_screenshots_match_receipts"
},
WitnessExclusionRow {
pattern: "emit_source_store_test.dag",
classification: OfflineLocalRecipe,
Expand Down
5 changes: 5 additions & 0 deletions dag/gunbc/extdeps_scope_frontier.dag
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,12 @@ fn scope_placement_refused_paths(added: List<String>, carriers: List<String>, ma
}

data scope_carrier_paths: List<String> = [
"dag/extdeps/automation/playwright.dag",
"dag/extdeps/browser/chromium.dag",
"dag/extdeps/github/actions_environment.dag",
"dag/extdeps/os/debian.dag",
"dag/extdeps/session_dashboard.dag",
"dag/extdeps/tools/wc.dag",
"dag/extdeps/vendor/atlassian.dag",
"dag/extdeps/vendor/microsoft.dag"
]
Expand Down
Loading
Loading