Convert Manifest to frozen dataclasses #4
Reference in New Issue
Block a user
Delete Branch "convert-manifest-to-dataclass"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Manifest = dict[str, Any]with frozen dataclasses:SshEntry,BottleEgress,Bottle,Agent,Manifest.manifest_*free functions. Call sites importManifestand use attribute access (m.agents[name].skills,m.bottle_for(name).runtime, etc.).Manifest.from_json_obj/Manifest.resolve); getters trust the shape.Behavior changes
agent.bottleis required and must reference a defined bottle — enforced at load instead of lazily per-launch.pipelock_bottle_allowlist's per-element string check is gone (covered by the Manifest validator).ssh.pytakesSshEntryinstances; shape checks moved upstream, only the IdentityFile filesystem-existence check remains inssh_validate_entries.Move schema checks out of per-access getters into a single manifest_validate pass invoked by manifest_resolve. Getters can now assume bottles/agents are well-typed dicts and every agent has a defined bottle, so the .get(...) or {} chains collapse. Behavior change: a bad runtime / shape error anywhere in the manifest now fails at load instead of on the N-th read. Intermediate step toward replacing TypedDict with a dataclass. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>refactor(manifest): add TypedDict schema and eager validationto refactor(manifest): convert to frozen dataclassesrefactor(manifest): convert to frozen dataclassesto Convert Manifest to frozen dataclasses