Files
MobileGL/scripts/data/link_ratchet_baseline.txt
T
swung0x48 8bb6309a1c [scripts, CI, docs] (P7): the 184-symbol link-closure ratchet lands as a gate
CONTRACT-P6.md 12.1 has carried "a ratchet recomputes the 184 in CI and asserts it only
ever falls" as an obligation since P6. The roadmap handed it to P6.5; the P6.5 line never
received it, and scripts/ci/ has never had anything that computes this number. ID-P7-7
gives it to P7 wave 0. This is it.

scripts/link_ratchet.py mechanises a6's hand experiment: partition the per-object output
of the single MobileGL target into SERVER / FRONTEND / SHARED, then compute
(SERVER undefined) - (SERVER defined) - (SHARED defined) intersect (FRONTEND defined),
which is the undefined-symbol list a real link of a server-only image would print. The
partition is an explicit table with a rationale per row, because it IS the module boundary
the build system does not have (SOURCE_FILES is one flat list; boundaries are P13's work).
An object matching no row is a hard failure, as is a build whose CMakeCache lacks the three
disaggregated options, or an empty role set - every way this gate could go green without
having measured anything is an explicit exit 2.

Measured on 78b7d6be: 186 symbols. The three backend buckets reproduce a6's hand-made
101 / 14 / 60 exactly, as do its per-object referrer and definer distributions
(UniformManager 90, VulkanRenderer 60, Managers 53, DirectGLES 51; TextureObject 59,
SamplerObject 30, BufferObject 18, FramebufferObject 16, PipeFill 9). Nothing from a6's
184 has been cleared; the +2 are both P6.5's:
  Client::ClientSession::StartSpawned()                 - fork-per-session
  GLState::ProgramArtifactsSchemaFingerprint()          - archive v2 caps

The baseline stores the LIST, not a count (ID-P7-7): a count-only ratchet goes green on the
day one symbol is cleared and another added. --assert-monotone fails only on symbols absent
from the baseline and names each one's defining object and every referring object; symbols
that disappeared are reported with an instruction to re-baseline in the same commit, and
never fail.

The CI step goes in build-linux-split, not build-linux: build-linux takes the three options
from MOBILEGL_CI_DISAGGREGATED, which is ON only on feat/disaggregated and
codex/fix-github-ci, so on any other branch it builds a monolith and the gate would measure
a SERVER set with no transport half. The JSON is uploaded even when the gate fires.

Two findings for the integrator, both written up in the note:
  - a6's four published bucket totals sum to 181 against its own headline of 184. These
    buckets are a strict partition and always sum to the headline; the difference is in
    a6's core bucket, which it listed selectively.
  - 5 of the 14 "P3b/P4b" symbols are MG_Pipe slot-allocator and apply-thread plumbing
    that sits under MG_Impl/Pipe/ by file location alone. P3b/P4b cannot clear them by
    migrating Espryt functionality; they need P13's module move. That bucket's floor is
    5, not 0, so the plan's 0.5-day Tier 1 estimate for "D12's 14 symbols" should be
    re-cut against 9. All 7 symbols from that object carry a `# P13` annotation.

red-once (R-16) is recorded verbatim in the note. Worth knowing: the plan's own example
(SamplerObject::GetMinFilter) does NOT turn this gate red, because it is already in the
baseline - the ratchet reddens on new symbols, so a negative control has to pick one that
is not in the 186. A reach to GetBorderColorForm() from DirectGLES/Utils.cpp does, naming
the symbol, its definer and its referrer, exit 1; reverted and green again.
2026-09-22 14:26:04 -04:00

201 lines
16 KiB
Plaintext

# MobileGL link-closure ratchet baseline (CONTRACT-P6.md 12.1, ID-P7-7).
# Regenerate: python3 scripts/link_ratchet.py --build-dir <dir> \
# --baseline scripts/data/link_ratchet_baseline.txt \
# --write-baseline scripts/data/link_ratchet_baseline.txt
# base commit : 78b7d6beacbebb89a5cf8aa412dd3739be5f1247
# configure : -DMOBILEGL_BUILD_DISAGGREGATED=ON -DMOBILEGL_BUILD_DISAGGREGATED_INPROC=ON -DMOBILEGL_PIPE_PUSH=ON -DCMAKE_BUILD_TYPE=Release
# build dir : build-split
# count : 186
#
# One demangled symbol per line. A trailing ` # note` is an annotation the parser
# ignores; `# P13` marks a symbol that cannot fall before P13 establishes module
# target boundaries. The LIST is the baseline, not the count: a ratchet that
# stored only a number would go green on the day one symbol is cleared and another
# added (ID-P7-7).
MobileGL::MG_Impl::GLImpl::CopyTextureImageToClientOrPBO_State(std::shared_ptr<MobileGL::MG_State::GLState::ITextureObject> const&, MobileGL::TextureUploadTarget, int, unsigned int, unsigned int, int, void*, char const*)
MobileGL::MG_Impl::GLImpl::FramebufferImpl::pDefaultFramebufferInfo
MobileGL::MG_Pipe::MGPipeApplierIsUnbarrieredApply() # P13
MobileGL::MG_Pipe::MGPipeNoteAggregate(MobileGL::MG_Pipe::MGPipeAggregate)
MobileGL::MG_Pipe::MGPipeRefuseAllocatorFromApplyThread(char const*) # P13
MobileGL::MG_Pipe::MGPipeRefuseFrontendKeyedRegistryFromApplyThread(char const*) # P13
MobileGL::MG_Pipe::MGPipeSlotAllocator::Acquire(MobileGL::MG_Pipe::MGPipeKind, unsigned long) # P13
MobileGL::MG_Pipe::MGPipeSlotAllocator::FindByLifetimeId(MobileGL::MG_Pipe::MGPipeKind, unsigned long) const # P13
MobileGL::MG_Pipe::MGPipeSlotAllocator::Free(MobileGL::MG_Pipe::MGPipeKind, MobileGL::MG_Pipe::MGPipeHandle) # P13
MobileGL::MG_Pipe::MGPipeSlots() # P13
MobileGL::MG_Pipe::PipeInputs::GetBufferBindingPointCount(MobileGL::BufferTarget) const
MobileGL::MG_Pipe::PipeInputs::GetProgramObject(unsigned int)
MobileGL::MG_Pipe::PipeInputs::GetTextureObject(unsigned int)
MobileGL::MG_Pipe::PipeInputs::HasOpenTransformFeedbackSpan(unsigned long) const
MobileGL::MG_Pipe::PipeInputs::InvalidateCompileEnv()
MobileGL::MG_Pipe::PipeInputs::IsLive() const
MobileGL::MG_Pipe::PipeInputs::RecordError(MobileGL::ErrorCode, std::unique_ptr<MobileGL::ErrorInfo, std::default_delete<MobileGL::ErrorInfo> >)
MobileGL::MG_Pipe::PipeInputs::ValidateProgramName(unsigned int) const
MobileGL::MG_Remote::Client::AdoptTierIsEmulate()
MobileGL::MG_Remote::Client::BackendObject_Remote::BackendObject_Remote()
MobileGL::MG_Remote::Client::ClientSession::Active()
MobileGL::MG_Remote::Client::ClientSession::NoteApplyThreadEnteredApplier()
MobileGL::MG_Remote::Client::ClientSession::NoteApplyThreadLeftApplier()
MobileGL::MG_Remote::Client::ClientSession::Start(MobileGL::MG_Config::TransportMode, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
MobileGL::MG_Remote::Client::ClientSession::StartSpawned()
MobileGL::MG_Remote::Client::ClientSession::Stop()
MobileGL::MG_Remote::Client::ClientSessionInstance()
MobileGL::MG_Remote::Client::EmitObjectDeathRecord(MobileGL::MG_Pipe::MGPipeKind, unsigned long)
MobileGL::MG_State::GLState::BufferObject::DownloadSubData(void*, unsigned long, unsigned long) const
MobileGL::MG_State::GLState::BufferObject::EnsureGpuResidentStorage()
MobileGL::MG_State::GLState::BufferObject::GetBackendResource() const
MobileGL::MG_State::GLState::BufferObject::GetChangeSerial() const
MobileGL::MG_State::GLState::BufferObject::GetExternalIndex() const
MobileGL::MG_State::GLState::BufferObject::GetSize() const
MobileGL::MG_State::GLState::BufferObject::GetUsage() const
MobileGL::MG_State::GLState::BufferObject::HasDefinedContent() const
MobileGL::MG_State::GLState::BufferObject::IsBackendPersistentMapped() const
MobileGL::MG_State::GLState::BufferObject::IsMapped() const
MobileGL::MG_State::GLState::BufferObject::MappedData() const
MobileGL::MG_State::GLState::BufferObject::MarkGpuWritten()
MobileGL::MG_State::GLState::BufferObject::SetBackendResource(std::shared_ptr<MobileGL::MG_State::GLState::BackendBufferResource>)
MobileGL::MG_State::GLState::BufferObject::SyncGpuWrites()
MobileGL::MG_State::GLState::BufferObject::SyncPersistentMappedRange()
MobileGL::MG_State::GLState::BufferObject::WritebackFromBackend(MobileGL::DataPtr, unsigned long)
MobileGL::MG_State::GLState::ClassifyVertexAttribType(unsigned int)
MobileGL::MG_State::GLState::DecodeProgramArchive(unsigned char const*, unsigned long, MobileGL::MG_State::GLState::ProgramArchive&)
MobileGL::MG_State::GLState::FramebufferAttachmentObject::GetRenderbuffer() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::GetSize() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::GetTexture() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::GetTextureLayer() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::GetTextureLevel() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::GetTextureUploadTarget() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::IsComplete() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::IsEmpty() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::IsLayered() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::IsRenderbuffer() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::IsTexture() const
MobileGL::MG_State::GLState::FramebufferAttachmentObject::IsValid() const
MobileGL::MG_State::GLState::FramebufferObject::GetAllAttachmentObjects() const
MobileGL::MG_State::GLState::FramebufferObject::GetAttachment(MobileGL::FramebufferAttachmentType) const
MobileGL::MG_State::GLState::FramebufferObject::GetDrawBuffers() const
MobileGL::MG_State::GLState::FramebufferObject::GetExternalIndex() const
MobileGL::MG_State::GLState::GetBufferBackendOps()
MobileGL::MG_State::GLState::MGPipeTextureLegacyArmScope::MGPipeTextureLegacyArmScope()
MobileGL::MG_State::GLState::MGPipeTextureLegacyArmScope::~MGPipeTextureLegacyArmScope()
MobileGL::MG_State::GLState::ProgramArtifactsSchemaFingerprint()
MobileGL::MG_State::GLState::ProgramObject::AllocateLifetimeId()
MobileGL::MG_State::GLState::ProgramObject::AttachShader(std::shared_ptr<MobileGL::MG_State::GLState::ShaderObject> const&)
MobileGL::MG_State::GLState::ProgramObject::JoinPendingLink() const
MobileGL::MG_State::GLState::ProgramObject::JoinPendingSpirv() const
MobileGL::MG_State::GLState::ProgramObject::Link(bool)
MobileGL::MG_State::GLState::ProgramObject::~ProgramObject()
MobileGL::MG_State::GLState::RenderbufferObject::GetExternalIndex() const
MobileGL::MG_State::GLState::RenderbufferObject::GetHeight() const
MobileGL::MG_State::GLState::RenderbufferObject::GetInternalFormat() const
MobileGL::MG_State::GLState::RenderbufferObject::GetSamples() const
MobileGL::MG_State::GLState::RenderbufferObject::GetWidth() const
MobileGL::MG_State::GLState::RenderbufferObject::IsAllocated() const
MobileGL::MG_State::GLState::SamplerObject::GetAllSamplerParameters() const
MobileGL::MG_State::GLState::SamplerObject::GetBorderColor() const
MobileGL::MG_State::GLState::SamplerObject::GetBorderColorI() const
MobileGL::MG_State::GLState::SamplerObject::GetBorderColorUI() const
MobileGL::MG_State::GLState::SamplerObject::GetCompareMode() const
MobileGL::MG_State::GLState::SamplerObject::GetExternalIndex() const
MobileGL::MG_State::GLState::SamplerObject::GetLifetimeId() const
MobileGL::MG_State::GLState::SamplerObject::GetLodBias() const
MobileGL::MG_State::GLState::SamplerObject::GetMagFilter() const
MobileGL::MG_State::GLState::SamplerObject::GetMaxAnisotropy() const
MobileGL::MG_State::GLState::SamplerObject::GetMaxLod() const
MobileGL::MG_State::GLState::SamplerObject::GetMinFilter() const
MobileGL::MG_State::GLState::SamplerObject::GetMinLod() const
MobileGL::MG_State::GLState::SamplerObject::GetMipmapMode() const
MobileGL::MG_State::GLState::SamplerObject::GetSamplerCompareFunc() const
MobileGL::MG_State::GLState::SamplerObject::GetVersion() const
MobileGL::MG_State::GLState::SamplerObject::GetWrapR() const
MobileGL::MG_State::GLState::SamplerObject::GetWrapS() const
MobileGL::MG_State::GLState::SamplerObject::GetWrapT() const
MobileGL::MG_State::GLState::SamplerObject::SamplerObject(unsigned int)
MobileGL::MG_State::GLState::SamplerObject::SetCompareMode(MobileGL::SamplerCompareMode)
MobileGL::MG_State::GLState::SamplerObject::SetLodRange(float, float)
MobileGL::MG_State::GLState::SamplerObject::SetMagFilter(MobileGL::SamplerFilterMode)
MobileGL::MG_State::GLState::SamplerObject::SetMinFilter(MobileGL::SamplerFilterMode)
MobileGL::MG_State::GLState::SamplerObject::SetMipmapMode(MobileGL::SamplerMipmapMode)
MobileGL::MG_State::GLState::SamplerObject::SetSamplerCompareFunc(MobileGL::SamplerCompareFunc)
MobileGL::MG_State::GLState::SamplerObject::SetWrapR(MobileGL::SamplerWrapMode)
MobileGL::MG_State::GLState::SamplerObject::SetWrapS(MobileGL::SamplerWrapMode)
MobileGL::MG_State::GLState::SamplerObject::SetWrapT(MobileGL::SamplerWrapMode)
MobileGL::MG_State::GLState::SamplerObject::~SamplerObject()
MobileGL::MG_State::GLState::SamplesAsIncompleteTexture(MobileGL::MG_State::GLState::ITextureObject const*, MobileGL::MG_State::GLState::SamplerObject const*)
MobileGL::MG_State::GLState::SetBufferBackendOps(MobileGL::MG_State::GLState::BufferBackendOps const*)
MobileGL::MG_State::GLState::ShaderObject::Compile()
MobileGL::MG_State::GLState::ShaderObject::DropCompileNode() const
MobileGL::MG_State::GLState::ShaderObject::JoinPendingCompile() const
MobileGL::MG_State::GLState::ShaderObject::ReleaseCompileNode()
MobileGL::MG_State::GLState::ShaderObject::SetShaderSource(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)
MobileGL::MG_State::GLState::TextureObject1D::TextureObject1D(unsigned int)
MobileGL::MG_State::GLState::TextureObject2D::TextureObject2D(unsigned int)
MobileGL::MG_State::GLState::TextureObject2DCube::TextureObject2DCube(unsigned int)
MobileGL::MG_State::GLState::TextureObject3D::TextureObject3D(unsigned int)
MobileGL::MG_State::GLState::TextureObjectBase::GetAllSwizzleParams() const
MobileGL::MG_State::GLState::TextureObjectBase::GetBorderColor() const
MobileGL::MG_State::GLState::TextureObjectBase::GetBorderColorForm() const
MobileGL::MG_State::GLState::TextureObjectBase::GetBorderColorI() const
MobileGL::MG_State::GLState::TextureObjectBase::GetBorderColorUI() const
MobileGL::MG_State::GLState::TextureObjectBase::GetContentVersion() const
MobileGL::MG_State::GLState::TextureObjectBase::GetExternalIndex() const
MobileGL::MG_State::GLState::TextureObjectBase::GetFormat() const
MobileGL::MG_State::GLState::TextureObjectBase::GetImmutableLevels() const
MobileGL::MG_State::GLState::TextureObjectBase::GetLevelRange() const
MobileGL::MG_State::GLState::TextureObjectBase::GetLifetimeId() const
MobileGL::MG_State::GLState::TextureObjectBase::GetSamplerObject() const
MobileGL::MG_State::GLState::TextureObjectBase::GetSamples() const
MobileGL::MG_State::GLState::TextureObjectBase::GetShapeVersion() const
MobileGL::MG_State::GLState::TextureObjectBase::GetSwizzleParam(MobileGL::TextureSwizzleParam) const
MobileGL::MG_State::GLState::TextureObjectBase::GetTarget() const
MobileGL::MG_State::GLState::TextureObjectBase::GetTextureParamsVersion() const
MobileGL::MG_State::GLState::TextureObjectBase::GetViewStorageOwner() const
MobileGL::MG_State::GLState::TextureObjectBase::HasFixedSampleLocations() const
MobileGL::MG_State::GLState::TextureObjectBase::IsImmutable() const
MobileGL::MG_State::GLState::TextureObjectBase::IsMipmapCompleteForFilterCached(bool) const
MobileGL::MG_State::GLState::TextureObjectBase::PipePublishParams()
MobileGL::MG_State::GLState::TextureObjectBase::SetBaseLevel(unsigned int)
MobileGL::MG_State::GLState::TextureObjectBase::SetBorderColor(MobileGL::Vec4<float> const&)
MobileGL::MG_State::GLState::TextureObjectBase::SetBorderColorI(MobileGL::Vec4<int> const&)
MobileGL::MG_State::GLState::TextureObjectBase::SetBorderColorUI(MobileGL::Vec4<unsigned int> const&)
MobileGL::MG_State::GLState::TextureObjectBase::SetFixedSampleLocations(bool)
MobileGL::MG_State::GLState::TextureObjectBase::SetImmutableLevels(unsigned int)
MobileGL::MG_State::GLState::TextureObjectBase::SetInternalFormat(MobileGL::TextureInternalFormat)
MobileGL::MG_State::GLState::TextureObjectBase::SetMaxLevel(unsigned int)
MobileGL::MG_State::GLState::TextureObjectBase::SetSamples(int)
MobileGL::MG_State::GLState::TextureObjectBase::SetSwizzleParam(MobileGL::TextureSwizzleParam, MobileGL::TextureSwizzleParam)
MobileGL::MG_State::GLState::TextureObjectBase::SetSwizzleParamRGBA(MobileGL::Vec4<MobileGL::TextureSwizzleParam> const&)
MobileGL::MG_State::GLState::TextureObjectBase::TextureObjectBase(MobileGL::TextureTarget, unsigned int)
MobileGL::MG_State::GLState::TextureObjectBase::~TextureObjectBase()
MobileGL::MG_State::GLState::TextureObjectBuffer::GetBufferBindingSlot(MobileGL::TextureUploadTarget)
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::AllocateStorage(MobileGL::TextureUploadTarget, unsigned int, MobileGL::MG_State::GLState::MipmapInput)
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::GetBaseSize() const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::GetMipmapByteSize(MobileGL::TextureUploadTarget, unsigned int) const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::GetMipmapCompressedByteSize(MobileGL::TextureUploadTarget, unsigned int) const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::GetMipmapCompressedFormat(MobileGL::TextureUploadTarget, unsigned int) const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::GetMipmapLevelCount() const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::GetMipmapRequestedCompressedFormat(MobileGL::TextureUploadTarget, unsigned int) const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::GetMipmapTexelSize(MobileGL::TextureUploadTarget, unsigned int) const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::GetStorageDirtyRects(MobileGL::TextureUploadTarget, unsigned int, MobileGL::MG_State::GLState::MipmapDirtyRegion*, unsigned long) const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::GetStorageDirtyRegion(MobileGL::TextureUploadTarget, unsigned int) const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::IsComplete() const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::IsStorageDirty(MobileGL::TextureUploadTarget, unsigned int) const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::MapMipmapCompressedImage(MobileGL::TextureUploadTarget, unsigned int) const
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::MapMipmapData(MobileGL::TextureUploadTarget, unsigned int)
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::MarkStorageDirty(MobileGL::TextureUploadTarget, unsigned int, bool)
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::MarkStorageDirtyRegion(MobileGL::TextureUploadTarget, unsigned int, MobileGL::Vec3<int>, MobileGL::Vec3<int>)
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::SetMipmapCompressedImage(MobileGL::TextureUploadTarget, unsigned int, unsigned int, void const*, unsigned long)
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::SetMipmapRequestedCompressedFormat(MobileGL::TextureUploadTarget, unsigned int, unsigned int)
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::TruncateMipmapLevels(MobileGL::TextureUploadTarget, unsigned int)
MobileGL::MG_State::GLState::TextureObjectWithOneMipmap::UpdateMipmapSubData(MobileGL::TextureUploadTarget, unsigned int, MobileGL::DataPtr)
MobileGL::MG_State::GLState::TextureUnit::GetAllBindingSlots()
MobileGL::MG_State::GLState::TextureUnit::GetBindingSlot(MobileGL::TextureTarget)
MobileGL::MG_State::GLState::TextureUnit::GetSamplerObject() const
MobileGL::MG_State::GLState::VertexArrayObject::GetAllAttributeVersions() const
MobileGL::MG_State::GLState::VertexArrayObject::GetAllAttributes() const
MobileGL::MG_State::GLState::VertexArrayObject::GetAttribute(unsigned int) const
MobileGL::MG_State::GLState::VertexArrayObject::GetIndexBufferBindingSlot()
MobileGL::MG_State::GLState::VertexArrayObject::GetIndexBufferBindingSlot() const
typeinfo for MobileGL::MG_State::GLState::TextureObjectBase
typeinfo for MobileGL::MG_State::GLState::TextureObjectWithOneMipmap
vtable for MobileGL::MG_State::GLState::TextureObjectWithOneMipmap