Skip to content

[Issue]: capability-package-lifecycle regression pins stale supportedCapabilityApi 1.8 (runtime is 1.9) #4824

Description

@kolacheee

Summary

scripts/regressions/capability-package-lifecycle.regression.ts pins the capability API level at { major: 1, minor: 8 }, but the runtime source of truth was intentionally bumped to { major: 1, minor: 9 }. The regression throws at line 86 and fails the whole pnpm regression:issues lane. This is a stale test, not a schema mistake — the schema is correctly at 1.9.

Expected behavior

capability-package-lifecycle.regression.ts tracks the current supportedCapabilityApi, and pnpm regression:issues passes.

Actual behavior

The assertion at scripts/regressions/capability-package-lifecycle.regression.ts:86 throws and aborts the lane:

assert.deepEqual(supportedCapabilityApi, { major: 1, minor: 8 })
AssertionError: actual { major: 1, minor: 9 }, expected { major: 1, minor: 8 }

supportedCapabilityApi is exported from packages/shared/src/schemas/capability-package.schema.ts:151:

export const supportedCapabilityApi = Object.freeze({ major: 1, minor: 9 } as const);

Because the runner aborts at line 86, three later assertions in the same boundary block are latently wrong and would fail next once line 86 is corrected (see Recommended fix below).

Steps to reproduce

  1. Check out staging (or any branch off it).
  2. Run the regression lane:
pnpm regression:issues

Or the single file directly:

pnpm tsx scripts/regressions/capability-package-lifecycle.regression.ts
  1. It throws at capability-package-lifecycle.regression.ts:86.

Environment

  • Marinara Engine version: 2.4.2 (staging)
  • Install type: source
  • OS + version: N/A (test/CI lane — reproduces anywhere the regression runs)
  • Browser or app shell: N/A

Logs, screenshots, or video

AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
+ actual - expected
  {
    major: 1,
+   minor: 9
-   minor: 8
  }
    at <anonymous> (scripts/regressions/capability-package-lifecycle.regression.ts:86:10)

Additional context

Root cause — the 8 → 9 bump is a deliberate feature bump; the test was not updated with it.

  • Introduced by commit f9369d22429b82a7b96d25c999271e318a176f71 ("fix: resolve assigned issue sweep", 2026-08-09), which is contained in origin/staging.
  • That commit added an optional localizations field to capabilityPackageManifestBaseSchema (locale-aware name / description / homeBrowserTab metadata with English fallback) plus packages/client/src/lib/capability-package-localization.ts. minor is the manifest feature-level ceiling that getCapabilityApiCompatibilityIssue() negotiates against (required.minor > supported.minor → install blocked), so adding a new manifest field that packages can require is exactly what a minor bump is for. The feature is already documented in CHANGELOG.md (localized capability-package Home metadata, [Feature]: Update the Home hero guidance copy #4803 / [Issue]: Complete localization coverage for dynamic Home widget content #4806).
  • The same commit changed the schema from minor: 8 to minor: 9 but did not touch capability-package-lifecycle.regression.ts — the classic stale-test signature.

Pre-existing on staging, not branch-specific. f9369d224 is in origin/staging, and neither capability-package.schema.ts nor capability-package-lifecycle.regression.ts differs between staging and current feature branches. Every branch that runs the regression lane inherits this red.

Recommended fix — all in scripts/regressions/capability-package-lifecycle.regression.ts; a one-line change is not enough (it re-fails downstream):

  1. Line 86 (currently throwing) — { major: 1, minor: 8 }{ major: 1, minor: 9 }.
  2. Line 122 — the unsupported-major message now reports the live supported minor: /requires capability API 2\.0; this Engine supports 1\.8/.../this Engine supports 1\.9/.
  3. Lines 129–136 (unsupportedMinorManifest) — the fixture { major: 1, minor: 9 } is no longer unsupported (9 <= 9 → returns null), so the assert.match at 133–135 fails. Bump the fixture to { major: 1, minor: 10 } and update the regex at line 135 to .../requires capability API 1\.10; this Engine supports 1\.9/ to keep the "minor above the ceiling is rejected" coverage.
  4. Lines 124–128 (currentMinorManifest, optional) — { major: 1, minor: 8 } still passes (8 <= 9), so no change is strictly required, but bumping to { major: 1, minor: 9 } keeps the "current supported minor" name honest.

Secondary (separate doc gap, does not block the lane): docs/development/optional-agent-packages.md keeps a per-bump changelog and stops at ### Capability API 1.8 Game experiences (line 65); it should gain a ### Capability API 1.9 section for the new manifest localizations field. This can be split into its own docs task. No CHANGELOG.md edit is needed — the feature entry already exists.

Impact

Blocks the full pnpm regression:issues lane / CI on every branch until the fixtures are shifted.

Template check

  • I DID NOT read this template and provide the requested details.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingcifixed-in-stagingAlready fixed in staging and is pending closure when staging is merged to main

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions