Skip to content

spec: register the 14 remaining door: 'none' (boot-refusal) codes that ship in dist — the rest of the #16404 class after #16449 #16649

Description

@os-trump

Filed from #16449 (dev seat, session session_01F8SRGcf2eKTK7RRpWCGxwf) as a contract-violation finding under the #16404 ruling, not fixed there because the card's scope was the nine codes measured on its own tree.

The contract text

#16404, decision batch #62, 2026-09-07, option D (maintainer 「同意」), quoted from the ruling comment:

The published contract face for error codes is ERROR_CODE_LEDGER / StandardErrorCode. Every code that ships in dist must be registered there; registering a code is Clause-②: yes, door or no door, because it widens the published face. An unregistered code in dist is a protocol gap to be closed (#16449 registers the nine measured today), not a tier question to be argued per card.

The measured gap (on origin/main at 8341ed21c with the #16449 branch applied)

After #16449 registered its nine, packages/runtime/src/dispatcher-error-vocabulary.ts still carries 14 verdict: 'boot-refusal' rows — codes stamped in a published package's src/, so shipping in that package's dist, and absent from the ledger. Re-derive with node scripts/check-dispatcher-error-vocabulary.mjs --report:

code stamping package file
DUPLICATE_ARTIFACT_OBJECT_NAME @objectstack/objectql packages/objectql/src/registry.ts
DUPLICATE_ARTIFACT_PACKAGE @objectstack/core packages/core/src/artifact-packages.ts
INVALID_ARTIFACT_PACKAGES @objectstack/core packages/core/src/artifact-packages.ts
INVALID_ARTIFACT_PACKAGE_ENTRY @objectstack/core packages/core/src/artifact-packages.ts
MEMORY_MULTI_TENANT_UNSUPPORTED @objectstack/driver-memory packages/drivers/driver-memory/src/memory-tenancy-guard.ts
MIXED_ARTIFACT_COLLECTION_SHAPE @objectstack/runtime packages/runtime/src/artifact-collections.ts
MONGODB_MULTI_TENANT_UNSUPPORTED @objectstack/driver-mongodb packages/drivers/driver-mongodb/src/mongodb-tenancy-guard.ts (unregistered by #8035 on the pre-ruling reasoning)
NOT_COMPENSABLE @objectstack/core packages/core/src/utils/migration-journal.ts
NO_SUCH_RUN @objectstack/core packages/core/src/utils/migration-journal.ts
PLAN_CHANGED @objectstack/core packages/core/src/utils/migration-journal.ts
PLUGIN_CONTRACT_VIOLATION @objectstack/core packages/core/src/plugin-loader.ts
PREFLIGHT_FAILED @objectstack/core packages/core/src/utils/migration-journal.ts
SERVICE_NOT_REGISTERED @objectstack/core packages/core/src/service-not-registered.ts
WALLED_MEMBERSHIP_POLICY_UNDECLARED @objectstack/plugins/organizations (verify the published name) packages/plugins/organizations/src/membership-policy-gate.ts

Two pending-registration rows are the same gap by a different route and are already tracked elsewhere, listed here only so the census is complete: AMBIGUOUS_METADATA_STEM (packages/metadata, dispatcher door, awaiting the spec lane) and owd_widening_forbidden (plugin-security, REST door, lowercase — the rename-or-keep call of #9460 half 2).

What #16449 already put in place for this card

  • The ledger header now carries the ruling as the "Door or no door" rule and the ONE row shape for a door: 'none' code (a string under the stamping package plus a comment stating status and the reachability reading); the boot-refusal verdict doc in the vocabulary says a row carrying it is a registration owed, not an exemption.
  • check:dispatcher-error-vocabulary refuses any verdict but foreign-vocabulary / runtime-pinned under packages/spec/src/ (spec-face-unregistered). Widening that refusal to every published package's src/ is the mechanical form of THIS card — once the 14 rows are registered, the spec-only prefix can become the general rule and the boot-refusal verdict retires.

Scope

  • Register the 14 under their stamping packages (each Clause-②: yes on the ruling's authority), one PR or a small batch; each row's comment carries the reachability reading its vocabulary row records today, and the vocabulary rows ratchet out (stale-row) as they land.
  • Then widen the gate's spec-face rule to all published packages and retire the boot-refusal verdict, so the class stays closed repo-wide.
  • Per-package changesets: minor (widening of a published face), no wire body changes on this tree (none of the 14 has a door — that is what boot-refusal records).

Refs #16404 (ruling), #16449 (the first nine), #8035 (the pre-ruling retirement this reverses), ADR-0112.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions