Repository navigation
pkg's resource is sealed, and the five package manifests take the schema's object form - #805
Merged
Merged
Conversation
added 3 commits
September 3, 2026 20:03
The plan filed pkg as "seven external files, the widest surface". Sized: the surface is wide inside the package and untouched outside it. Two non-generated files import the provider and both use its action-name constants; every other mention of pkg.Resource is a doc comment. Inside, 20 field reads in code and 26 in tests, and one write -- the provider replaces Type with the manager's resolved purl type after an install -- which sealing keeps honest with a named resolution method on the unexported struct. No consumer changes. The three stale "seven files" mentions are corrected. #644, phase 6 of #625. Refs #644, #625 Claude-Session: https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW
…d a test holds every one to it writ deploy noblefactor refused the team layer on a fresh Windows machine: every checked-in packages-manifest.yaml listed packages as bare strings while the schema and validator require objects with a name field. They were placeholders. Every entry is now `- name: <package>`, sixteen across four files and an empty list in the fifth, and TestCheckedInManifests_AreValid validates each manifest under Home/ against the validator writ runs, so the repository that defines the format can no longer ship a file that violates it. Closes #796 Claude-Session: https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW
…h the one type write named a resolution Phase 6 of the sealed-resources plan (#644). pkg.Resource becomes the sealed interface -- op.Resource plus Name(), Type(), Version() and the unexported marker -- over an unexported resource struct. Both constructors return the interface; an unexported discoverResource returns the struct for the unmarshalers. init registers the implementation and the mint. Install, Remove, Upgrade take []Resource; Installed, NotInstalled, Observe, VersionGTE, NewReceipt and NewObservation take Resource. The post-install write of the resolved manager type is (*resource).resolveType, reached through resolved(), which asserts to the struct. The generated files are byte-identical to develop: the announcement already named provider.Resource. Tests reach ReachabilityURI and Equal through concrete(t, r), as service's do. The plan's phase 6 is complete and #645 is next. Claude-Session: https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW
This was referenced Sep 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Thread 2 (
Epic:ResourceModel), phase 6 of 625-sealed-provider-resources.md. Two issues resolved in this worktree, each its own commit.#644 — seal
pkgpkg.Resourceis now the sealed interface (op.Resource+Name(),Type(),Version()+ the unexported marker) over an unexportedresourcestruct. Constructors return the interface;initregisters the implementation and the mint; every provider method takes the interface. The one write, the resolved manager type after an install, is(*resource).resolveType, reached in-package throughresolved().Sized first (commit 1): the "seven external files" were the action-name constants; no consumer reads a field, so no consumer changed.
resource.go: the interface, the struct,sealedResource, the three accessors, the resolution method, the two constructors returning the interface, theinitregistration pair, the interface guardsprovider.go,helpers.go,receipt.go,observation.go: the interface in every signature; field reads become accessor calls; the write becomes the resolution methodmake generateregenerates the gen files; the fragments stay byte-identical (ruling 4) — verified byte-identical against develop, no generator changemake checkgreen locally#796 — the five checked-in package manifests
Every entry under
Home/*/packages-manifest.yamlis- name: <package>, the object form the schema states.TestCheckedInManifests_AreValidininternal/manifestvalidates every checked-in manifest.writ deploy noblefactorbuilds the team layer's tree — the validator accepts all five; the Windows deploy is re-run after merge, when the machine's clone updatesTestCheckedInManifests_AreValidwalksHome/*/packages-manifest.yamland fails on any invalid oneCloses #644
Closes #796
https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW