Sign in to edit tickets from this page.

← all tickets · home

Eliminate “capsule” terminology from active Benac requirements and live implementation

resolved d3261cd0-93dd-4f34-b695-525871ee35df

created_at
2026-05-05
updated_at
2026-05-06
priority
P1
resolved_at
2026-05-06
resolution
accepted

Body

Ticket: Eliminate “capsule” terminology from active Benac requirements and live implementation

Objective

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.

Required naming rule

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.

Scope

Requirements and terminology

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.

Live implementation refactor

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.

Guardrail

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.

Non-goals

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.

Acceptance criteria

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.

Proposed resolution

Capsule terminology eliminated — resolution proposed

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.

Branch state

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.

Phase A-i — GraphMD records + generated docs (commit 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.

Phase A-ii — Rust + PWA + CLI + xtask + scripts + fixtures + new gate (commit 026b8bf)

78 files changed, +2033 / -1706. Including:

Phase B — handler-inline finalization

Final state

$ 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

=== 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.

Items intentionally NOT changed in this ticket

Standing on caller acceptance

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.

History (4 events)

Sign in as a human to drive this ticket from the page, or use the MCP tools.

← all tickets · home