resolved d3261cd0-93dd-4f34-b695-525871ee35df
You are to remove the term “capsule” from Benac’s active terminology, active system requirements, live source code, serialized fixture names, UI labels, CLI text, variable names, module names, function names, diagnostics, and committed generated artifacts.
This is a focused terminology and naming cleanup. The concept currently represented by the old word is not being redesigned in this ticket. Do not expand this into package import format changes, ZIP-only import work, artifact retrieval work, or package distribution redesign.
Current docs already define Package and Package Bundle, while also carrying separate capsule terms such as Public Capsule and Private Capsule . Current SyRS language also uses the old word in import/export, validation, build, inspection, encryption, and artifact availability requirements . Your job is to root out that word and unify the active language around package terminology.
Use these names:
Package
Package document
Package Bundle
Package Bundle Manifest
Package file
Package import
Package export
Package trace export
Package Bundle integrity
Do not use these names anywhere in active requirements or live business logic:
Capsule
capsule
capsules
capsule_manifest
capsule_cid
Capsule ZIP
Capsule export
Capsule import
Public Capsule
Private Capsule
Do not introduce a new replacement noun such as “archive,” “container,” “station export,” “parcel,” or “payload pack.” Use package language.
Edit the GraphMD source records, not the generated docs directly.
Remove or rewrite the active term records:
records/term.capsule/
records/term.capsule-manifest/
records/term.public-capsule/
records/term.private-capsule/
Update every other records/term.*/*.md file that refers to the old word. In particular, update package, package manifest, structured object, signed claim, remote storage, peer/relay station, audit record, artifact availability, fixture discovery source, package validation context, and content availability terminology where they mention the old word.
Use Package Bundle when the old text means an importable/exportable collection of package-related documents, blobs, fixtures, reports, claims, traces, or supporting materials.
Use Package trace export when the old text means exporting trace/evidence/effect material from a package invocation.
Then rebuild generated glossary output:
npm run build:glossary
Update every active requirement record under records/req.*/*.md that uses the old word. The known records include, but are not limited to:
records/req.benac-io-001/
records/req.benac-io-003/
records/req.benac-io-004/
records/req.benac-io-005/
records/req.benac-io-006/
records/req.benac-enc-003/
records/req.benac-author-001/
records/req.benac-author-002/
records/req.benac-author-003/
records/req.benac-pkg-002/
records/req.benac-pkg-007/
records/req.benac-pkg-008/
records/req.benac-pkg-011/
records/req.benac-schema-003/
records/req.benac-ux-008/
records/req.benac-ux-009/
records/req.benac-agt-001/
records/req.benac-aud-crypto-001/
records/req.benac-crypto-004/
records/req.benac-int-002/
records/req.benac-key-002/
records/req.benac-repl-001/
records/req.benac-sec-002/
records/req.benac-sec-006/
records/req.benac-sign-001/
records/req.benac-stor-011/
records/req.benac-stor-017/
Rename requirement titles where needed. Examples:
Export capsules -> Package Bundle export
Capsule integrity -> Package Bundle integrity
Encrypted capsule export/import -> Encrypted Package Bundle export/import
Encrypted capsules -> Encrypted Package Bundles
Then rebuild generated SyRS output:
npm run build:syrs
Do not edit these generated files by hand:
docs/00-Glossary/Terms-and-Definitions.md
docs/01-Requirements/System-Requirements-Specification.md
They must change only through the source records and build scripts.
Rename the old core module and data model.
Required mapping:
crates/benac-core/src/capsule.rs -> crates/benac-core/src/package_bundle.rs
benac_core::capsule -> benac_core::package_bundle
Capsule -> PackageBundle
CapsuleBlob -> PackageBundleBlob
CapsuleInspection -> PackageBundleInspection
integrity_manifest.capsule_cid -> integrity_manifest.package_bundle_cid
invalid_capsule_blob -> invalid_package_bundle_blob
capsule_integrity_mismatch -> package_bundle_integrity_mismatch
Update all imports, type names, serde field names, diagnostics, test helpers, and JSON fixture fields accordingly.
Do not keep compatibility aliases containing the old word. Do not add serde aliases for old JSON field names. Do not preserve old file extensions. This is an intentional terminology break.
Rename core and authoring functions. Required examples:
import_capsule -> import_package_bundle
import_capsule_text -> import_package_bundle_text
import_bundled_capsule -> import_bundled_package
output_to_capsule -> output_to_package_bundle
validate_package_capsule -> validate_package_bundle
build_schema_registry_from_capsule -> build_schema_registry_from_package_bundle
extract_package_document_from_capsule -> extract_package_document_from_package_bundle
run_capsule_path_fixtures -> run_package_bundle_path_fixtures
capsule_declarative_runner -> package_bundle_declarative_runner
discover_fixtures_in_capsule -> discover_fixtures_in_package_bundle
Rename fixture and conformance helpers. Required examples:
bundled_hello_world_capsule -> bundled_hello_world_package_bundle
capsule_with_wasm -> package_bundle_with_wasm
calculator::capsule -> calculator::package_bundle
unsupported_schema_keyword_capsule -> unsupported_schema_keyword_package_bundle
missing_artifact_capsule -> missing_artifact_package_bundle
fixture_mismatch_capsule -> fixture_mismatch_package_bundle
forbidden_wasm_import_capsule -> forbidden_wasm_import_package_bundle
resource_limit_failure_capsule -> resource_limit_failure_package_bundle
dump_capsules -> dump_package_bundles
dump_calculator_capsule -> dump_calculator_package_bundle
Rename PWA UI files and user-facing labels:
apps/pwa/src/ui/capsule_panel.rs -> apps/pwa/src/ui/package_export_panel.rs
"Capsule export and import" -> "Package export and import"
"Export trace capsule" -> "Export package trace"
Update apps/pwa/src/ui/mod.rs, routes, tests, and all imports.
Rename CLI help text and path variables:
capsule_path -> package_bundle_path
"Capsule file to import" -> "Package file to import"
".benac-capsule.json" -> ".benac-package-bundle.json"
Rename persistence sidecars and browser storage keys:
imported_capsule.json -> imported_package_bundle.json
IMPORTED_CAPSULE_FILE -> IMPORTED_PACKAGE_BUNDLE_FILE
SESSION_CAPSULE_KEY -> SESSION_PACKAGE_BUNDLE_KEY
"imported_capsule" -> "imported_package_bundle"
"capsule_imported" -> "package_bundle_imported"
Rename committed fixture files and update all references:
hello-world.benac-capsule.json
apps/pwa/public/fixtures/hello-world.benac-capsule.json
become:
hello-world.benac-package-bundle.json
apps/pwa/public/fixtures/hello-world.benac-package-bundle.json
Update xtask, PWA index.html, deployment scripts, build scripts, service worker references, fixture-generation scripts, conformance tests, CLI tests, and PWA tests.
Regenerate committed build artifacts if they are tracked and contain the old term.
Add a terminology guard script that prevents the old word from reappearing in active code and active generated requirements.
Do not name the script with the old word. Use a neutral name such as:
scripts/check-no-retired-package-term.sh
The script shall construct the banned word from pieces so the script does not match itself.
The guard shall scan at least:
records/
docs/00-Glossary/
docs/01-Requirements/
apps/
crates/
packages/
xtask/
types/
scripts/
.github/
index.html
sw.js
manifest.webmanifest
hello-world*
benac-pwa-*
The guard may exclude archival reports under:
docs/reports/
docs/checklists/
docs/decisions/
Only exclude archival material. Do not exclude live requirements, live glossary, source code, tests, fixtures, CLI text, UI text, scripts, or committed app artifacts.
Wire the guard into CI and local validation. Add it to npm test or add a separate package script invoked by the existing GitHub workflows before Rust tests.
Do not create or modify package retrieval semantics.
Do not redesign Package Bundle Manifest structure.
Do not add new conformance vectors except those needed to prove the old word is gone.
Do not preserve old filenames, old serde fields, old CLI help text, old UI labels, or old diagnostic codes containing the old word.
Do not add a migration layer that keeps the old word in live business logic.
Do not rename unrelated package semantics unless the old word appears there.
This command returns no matches outside explicitly excluded archival reports:
rg -i 'capsule' \
records \
docs/00-Glossary \
docs/01-Requirements \
apps \
crates \
packages \
xtask \
types \
scripts \
.github \
index.html \
sw.js \
manifest.webmanifest \
hello-world* \
benac-pwa-*
These commands pass:
npm test
cargo fmt --check
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
scripts/check-no-retired-package-term.sh
The generated glossary contains no old-word entries.
The generated SyRS contains no old-word requirements, titles, statements, rationales, verification text, or section headings.
The CLI no longer accepts, displays, generates, or documents .benac-capsule.json.
The PWA no longer references .benac-capsule.json, capsule_panel, import_capsule_text, or capsule_imported.
The root fixture and PWA fixture are renamed to .benac-package-bundle.json.
All live Rust identifiers, module names, test names, fixture helper names, diagnostic codes, JSON fields, storage keys, and user-facing labels use package terminology.
The retired noun is gone from every active records / generated docs / code / fixture / UI / CLI / scripts / committed app artifact path the ticket lists. Acceptance grep returns zero hits.
d4ca96c chore(deploy): tidy package-bundle probe label after terminology rename
026b8bf refactor: retire capsule terminology in code, fixtures, PWA, CLI, and gates
1123b13 docs(records): retire capsule terminology in favor of package bundle
Plus three earlier commits unrelated to this ticket that landed on the
branch from sibling work: 8ba57c9 chore: refresh deployed static artifacts, ca06fde feat: expose archived tickets in ticket UI,
8d59dfd docs: promote package interoperability requirements.
1123b13)60 files changed, +292 / -390. Four term.* records carrying the
retired noun deleted (term.capsule/, term.capsule-manifest/,
term.public-capsule/, term.private-capsule/); term.package-bundle/
already existed and covers the importable/exportable concept, so no
replacement records were created. Nineteen other term.* records
rewritten in place to use Package Bundle terminology. Twenty-eight
req.* records edited; required title renames applied:
Export capsules -> Package Bundle export (benac-io-003)
Capsule integrity -> Package Bundle integrity (benac-io-005)
Encrypted capsules -> Encrypted Package Bundles (benac-io-006)
Encrypted capsule export/import -> Encrypted Package Bundle (benac-enc-003)
export/import
sourceSections: "10.15 Import, export, capsules, and decentralized distribution" rewritten across benac-io-001..006 so the generated
SyRS section heading no longer carries the retired noun. The
hardcoded fallback signed_claim row in
tools/compile-system-requirements-specification.cjs::SECTION_INTROS
also rewritten.
docs/00-Glossary/Terms-and-Definitions.md and
docs/01-Requirements/System-Requirements-Specification.md
regenerated via npm run build:glossary and npm run build:syrs,
then committed. Term count 276 -> 272 (the four deleted retired-noun
terms); requirement count 227 unchanged.
026b8bf)78 files changed, +2033 / -1706. Including:
git mv crates/benac-core/src/capsule.rs crates/benac-core/src/package_bundle.rs
Capsule -> PackageBundle,
CapsuleBlob -> PackageBundleBlob,
CapsuleInspection -> PackageBundleInspection. Plus
ImportedTraceCapsule -> ImportedTracePackageBundle (compound type
name caught in second pass — \b doesn't match between two word
characters).integrity_manifest.capsule_cid -> integrity_manifest.package_bundle_cid.invalid_capsule_blob -> invalid_package_bundle_blob,
capsule_integrity_mismatch -> package_bundle_integrity_mismatch.validate_package_capsule -> validate_package_bundle mapping
collided with a pre-existing validate_package_bundle (taking
&PackageBundleManifest); the pre-existing helper had no callers
outside its own definition, so it was renamed to the more specific
validate_package_bundle_manifest. The CLI and tests already use
the now-canonical validate_package_bundle (taking &PackageBundle).bundled_hello_world_capsule -> bundled_hello_world_package_bundle,
dump_capsules -> dump_package_bundles, etc.).apps/pwa/src/ui/capsule_panel.rs -> apps/pwa/src/ui/package_export_panel.rs,
with Route::Capsules -> Route::PackageBundles, route path
/capsules -> /package-bundles, nav link label
"Capsules" -> "Package bundles", panel labels
"Capsule export and import" -> "Package export and import",
"Export trace capsule" -> "Export package trace".capsule_path -> package_bundle_path,
"Capsule file to import" -> "Package file to import",
.benac-capsule.json -> .benac-package-bundle.json.imported_capsule.json -> imported_package_bundle.json,
IMPORTED_CAPSULE_FILE -> IMPORTED_PACKAGE_BUNDLE_FILE,
SESSION_CAPSULE_KEY -> SESSION_PACKAGE_BUNDLE_KEY,
"imported_capsule" -> "imported_package_bundle",
"capsule_imported" -> "package_bundle_imported".cargo run -p xtask -- build-hello-world-fixtures (necessary because
the wire format flipped: object_type: "capsule" -> "package_bundle",
schema_version: "benac.capsule.v1" -> "benac.package_bundle.v1";
three conformance suites had failed with
package_bundle_integrity_mismatch until the inner
package_bundle_cid was rehashed under the new strings).scripts/check-no-retired-package-term.sh:
printf 'caps'; printf 'ule' so the script does not match itself.records/, docs/00-Glossary/, docs/01-Requirements/,
apps/, crates/, packages/, xtask/, types/, scripts/,
.github/, index.html, sw.js, manifest.webmanifest,
hello-world*, benac-pwa-*.docs/reports/, docs/checklists/, docs/decisions/
(archival).npm test via the check:retired-package-term script
in package.json."kernel PWA bundled package_bundle" (now
"kernel PWA bundled package").026b8bf..d4ca96c feat/local-public-data-packages -> feat/local-public-data-packages.sudo bash scripts/deploy.sh.$ git rev-parse HEAD
d4ca96c4a0e4271c81e145b4f74f023e841fadfa
$ cargo fmt --all --check clean
$ cargo clippy --workspace --all-targets -- -D warnings clean
$ cargo check -p benac-pwa --target wasm32-unknown-unknown clean
$ cargo test --workspace 543 passed
$ cargo run -p benac-conformance --example print_suite | tail -1 checks=133 passed=133 failed=0
$ bash scripts/check-cid-grep-gates.sh OK: all CID grep gates pass
$ bash scripts/check-no-canonical-in-source.sh OK: no banned terminology in source
$ bash scripts/check-no-retired-package-term.sh OK: retired package term 'capsule' not present in scoped paths
$ npm test 519 GraphMD files validated, 272 terms, 227 requirements
Acceptance grep across the ticket's full scope:
$ rg -i 'capsule' records docs/00-Glossary docs/01-Requirements apps crates packages xtask types scripts .github index.html sw.js manifest.webmanifest hello-world* benac-pwa-*
(zero hits)
=== Deploy complete ===
Build sha: d4ca96c4a0e4271c81e145b4f74f023e841fadfa
PWA bundle: benac-pwa-db7312c2bddaeb3b.js
Public PWA: https://benac.benac.dev/
All 11 health probes 200. kernel JS bundle hash match local=public.
tools/gravitational_lens/ (operator sidecar — separate Rust
package per CLAUDE.md, not part of the main workspace) still
contains 3 references to the retired noun (two "capsule_imported"
literals in acceptance.rs, one doc-comment in sync_relay.rs).
This path is NOT in the ticket's gate scope (tools/ is omitted
from both the acceptance grep set and the new gate's scope set);
intentionally left alone.docs/reports/, docs/checklists/, docs/decisions/ — archival,
explicitly allowlisted by the ticket.docs/reports/local-public-data-packages-closeout.md cites
pre-rename SHAs / counts; archival, untouched per allowlist.Per the standing-directive log: not assuming closure; holding for caller review. If a follow-up blocker surfaces for the operator sidecar or any other path, file separately or add to the next iteration of this ticket.
The retired word is a single noun. The rename is mechanical but cascades through every layer (records, generated docs, Rust types, serde fields, diagnostic codes, function/module names, fixture helper names, PWA UI, CLI text, persistence keys, on-disk fixture files, xtask, scripts, service worker, index.html, gate).
Two waves: wave 1 splits into two file-disjoint subagents running in parallel; wave 2 is handler-inline finalization.
14a — GraphMD records + generated docs
records/term.* carrying the retired word:
the four explicitly listed (capsule, capsule-manifest, public-capsule,
private-capsule) plus any cross-reference in other term records.records/req.*/*.md and unify to package terminology.
Rename requirement titles per the ticket's example mappings.npm run build:glossary and npm run build:syrs to regenerate
docs/00-Glossary/Terms-and-Definitions.md and
docs/01-Requirements/System-Requirements-Specification.md.
Verify generated output has zero hits of the retired word.14b — Rust + PWA + CLI + xtask + scripts + fixtures + html/sw.js + new gate
scripts/check-no-retired-package-term.sh (neutral name; banned
word constructed at runtime so the script does not match itself).
Wire it into npm test.cargo fmt --check, cargo clippy --workspace --all-targets -- -D warnings,
cargo check -p benac-pwa --target wasm32-unknown-unknown,
cargo test --workspace,
bash scripts/check-cid-grep-gates.sh,
bash scripts/check-no-canonical-in-source.sh,
bash scripts/check-no-retired-package-term.sh.File-disjoint by directory: 14a touches records/, docs/00-Glossary/,
docs/01-Requirements/, tools/ (for build scripts only). 14b touches
crates/, apps/, xtask/, scripts/, packages/, root fixture files,
index.html, sw.js, manifest.webmanifest. Both must avoid
docs/reports/ (archival).
sudo bash scripts/deploy.sh.Standing-directive log: caller authorized handler-driven implementation, deploy, gitlab push, and resolution_proposed posting. Do not re-ask. Subagents in flight; comments will land at end-of-phase.
The retired noun is gone from every active records / generated docs / code / fixture / UI / CLI / scripts / committed app artifact path the ticket lists. Acceptance grep returns zero hits.
d4ca96c chore(deploy): tidy package-bundle probe label after terminology rename
026b8bf refactor: retire capsule terminology in code, fixtures, PWA, CLI, and gates
1123b13 docs(records): retire capsule terminology in favor of package bundle
Plus three earlier commits unrelated to this ticket that landed on the
branch from sibling work: 8ba57c9 chore: refresh deployed static artifacts, ca06fde feat: expose archived tickets in ticket UI,
8d59dfd docs: promote package interoperability requirements.
1123b13)60 files changed, +292 / -390. Four term.* records carrying the
retired noun deleted (term.capsule/, term.capsule-manifest/,
term.public-capsule/, term.private-capsule/); term.package-bundle/
already existed and covers the importable/exportable concept, so no
replacement records were created. Nineteen other term.* records
rewritten in place to use Package Bundle terminology. Twenty-eight
req.* records edited; required title renames applied:
Export capsules -> Package Bundle export (benac-io-003)
Capsule integrity -> Package Bundle integrity (benac-io-005)
Encrypted capsules -> Encrypted Package Bundles (benac-io-006)
Encrypted capsule export/import -> Encrypted Package Bundle (benac-enc-003)
export/import
sourceSections: "10.15 Import, export, capsules, and decentralized distribution" rewritten across benac-io-001..006 so the generated
SyRS section heading no longer carries the retired noun. The
hardcoded fallback signed_claim row in
tools/compile-system-requirements-specification.cjs::SECTION_INTROS
also rewritten.
docs/00-Glossary/Terms-and-Definitions.md and
docs/01-Requirements/System-Requirements-Specification.md
regenerated via npm run build:glossary and npm run build:syrs,
then committed. Term count 276 -> 272 (the four deleted retired-noun
terms); requirement count 227 unchanged.
026b8bf)78 files changed, +2033 / -1706. Including:
git mv crates/benac-core/src/capsule.rs crates/benac-core/src/package_bundle.rs
Capsule -> PackageBundle,
CapsuleBlob -> PackageBundleBlob,
CapsuleInspection -> PackageBundleInspection. Plus
ImportedTraceCapsule -> ImportedTracePackageBundle (compound type
name caught in second pass — \b doesn't match between two word
characters).integrity_manifest.capsule_cid -> integrity_manifest.package_bundle_cid.invalid_capsule_blob -> invalid_package_bundle_blob,
capsule_integrity_mismatch -> package_bundle_integrity_mismatch.validate_package_capsule -> validate_package_bundle mapping
collided with a pre-existing validate_package_bundle (taking
&PackageBundleManifest); the pre-existing helper had no callers
outside its own definition, so it was renamed to the more specific
validate_package_bundle_manifest. The CLI and tests already use
the now-canonical validate_package_bundle (taking &PackageBundle).bundled_hello_world_capsule -> bundled_hello_world_package_bundle,
dump_capsules -> dump_package_bundles, etc.).apps/pwa/src/ui/capsule_panel.rs -> apps/pwa/src/ui/package_export_panel.rs,
with Route::Capsules -> Route::PackageBundles, route path
/capsules -> /package-bundles, nav link label
"Capsules" -> "Package bundles", panel labels
"Capsule export and import" -> "Package export and import",
"Export trace capsule" -> "Export package trace".capsule_path -> package_bundle_path,
"Capsule file to import" -> "Package file to import",
.benac-capsule.json -> .benac-package-bundle.json.imported_capsule.json -> imported_package_bundle.json,
IMPORTED_CAPSULE_FILE -> IMPORTED_PACKAGE_BUNDLE_FILE,
SESSION_CAPSULE_KEY -> SESSION_PACKAGE_BUNDLE_KEY,
"imported_capsule" -> "imported_package_bundle",
"capsule_imported" -> "package_bundle_imported".cargo run -p xtask -- build-hello-world-fixtures (necessary because
the wire format flipped: object_type: "capsule" -> "package_bundle",
schema_version: "benac.capsule.v1" -> "benac.package_bundle.v1";
three conformance suites had failed with
package_bundle_integrity_mismatch until the inner
package_bundle_cid was rehashed under the new strings).scripts/check-no-retired-package-term.sh:
printf 'caps'; printf 'ule' so the script does not match itself.records/, docs/00-Glossary/, docs/01-Requirements/,
apps/, crates/, packages/, xtask/, types/, scripts/,
.github/, index.html, sw.js, manifest.webmanifest,
hello-world*, benac-pwa-*.docs/reports/, docs/checklists/, docs/decisions/
(archival).npm test via the check:retired-package-term script
in package.json."kernel PWA bundled package_bundle" (now
"kernel PWA bundled package").026b8bf..d4ca96c feat/local-public-data-packages -> feat/local-public-data-packages.sudo bash scripts/deploy.sh.$ git rev-parse HEAD
d4ca96c4a0e4271c81e145b4f74f023e841fadfa
$ cargo fmt --all --check clean
$ cargo clippy --workspace --all-targets -- -D warnings clean
$ cargo check -p benac-pwa --target wasm32-unknown-unknown clean
$ cargo test --workspace 543 passed
$ cargo run -p benac-conformance --example print_suite | tail -1 checks=133 passed=133 failed=0
$ bash scripts/check-cid-grep-gates.sh OK: all CID grep gates pass
$ bash scripts/check-no-canonical-in-source.sh OK: no banned terminology in source
$ bash scripts/check-no-retired-package-term.sh OK: retired package term 'capsule' not present in scoped paths
$ npm test 519 GraphMD files validated, 272 terms, 227 requirements
Acceptance grep across the ticket's full scope:
$ rg -i 'capsule' records docs/00-Glossary docs/01-Requirements apps crates packages xtask types scripts .github index.html sw.js manifest.webmanifest hello-world* benac-pwa-*
(zero hits)
=== Deploy complete ===
Build sha: d4ca96c4a0e4271c81e145b4f74f023e841fadfa
PWA bundle: benac-pwa-db7312c2bddaeb3b.js
Public PWA: https://benac.benac.dev/
All 11 health probes 200. kernel JS bundle hash match local=public.
tools/gravitational_lens/ (operator sidecar — separate Rust
package per CLAUDE.md, not part of the main workspace) still
contains 3 references to the retired noun (two "capsule_imported"
literals in acceptance.rs, one doc-comment in sync_relay.rs).
This path is NOT in the ticket's gate scope (tools/ is omitted
from both the acceptance grep set and the new gate's scope set);
intentionally left alone.docs/reports/, docs/checklists/, docs/decisions/ — archival,
explicitly allowlisted by the ticket.docs/reports/local-public-data-packages-closeout.md cites
pre-rename SHAs / counts; archival, untouched per allowlist.Per the standing-directive log: not assuming closure; holding for caller review. If a follow-up blocker surfaces for the operator sidecar or any other path, file separately or add to the next iteration of this ticket.
Caller accepted: Looks great! Thanks. Standby for another ticket which you will need to work.
Sign in as a human to drive this ticket from the page, or use the MCP tools.
Ticket created: Eliminate “capsule” terminology from active Benac requirements and live implementation