Skip to content

Release 2.1.187 (2026-08-11)

Documentation

  • document [container].system-packages (#2736) Add a Container Config Reference page for the [container] table (env-prefixes and the new system-packages key) and describe the local-bake vs CI-test-job mechanism in the CI Architecture guide.

system-packages is the shipped output of epic vergil-project/.github#272: a list of Debian package names installed from the base image's existing apt sources, baked into the local cached dev image and installed on CI test jobs only. The docs cover the names-only trust model (reviewed via the PR diff, no allowlist), the fail-closed cross-architecture behaviour, the test-runtime contract (no reliance during lint/typecheck), the cache-key behaviour, and the vrg-container-system-packages inspection accessor.

Completes the documentation-review bookend of the epic.

  • reflect ad-hoc archive rename (Archive title, archive label, normalize sweep) (#2752) Update the Ad-hoc epic archiving section to the post-rename model: per-quarter buckets are titled 'Archive (ad hoc): — YYYY-Qn' and labelled 'archive' + 'ad-hoc' (the 'archive' label replaced 'epic'; 'ad-hoc' kept), so they no longer clutter label:epic views. Document the new 'vrg-adhoc-epic normalize' sweep (dry-run/--apply, per-repo home traversal, idempotent, self-healing creation). Add archive buckets to the non-stray home-issue list in the compliance invariants, and correct the residual 'archive epics' phrasing. The live 'Epic (ad hoc): ' epic is unchanged.

Features

  • reclassify per-quarter ad-hoc buckets as archives (#2748)
  • feat(epics): add 'archive' label for per-quarter ad-hoc archives

  • feat(epics): reclassify per-quarter ad-hoc buckets as archives

Repoint the archive recognizer to the new 'Archive (ad hoc): — YYYY-Qn' form and add a legacy recognizer used only by the self-heal and sweep paths. Parameterize _find_epic_by_title's label set so archive lookups use archive+ad-hoc while live-epic lookups keep epic+ad-hoc. ensure_adhoc_archive now resolves new-form -> legacy heal-in-place -> create, making creation race-free. Add the org-wide idempotent normalize_adhoc_archives sweep (per-repo home traversal, open+closed). The live ad-hoc epic is untouched.

  • feat(adhoc-epic): add 'normalize' subcommand to migrate legacy archives

  • fix(epic-audit): do not flag 'archive'-labelled per-quarter buckets as strays

  • fix(epics): satisfy lint, typecheck, and 100% coverage gates

Move the annotation-only Sequence import under TYPE_CHECKING (ruff TC003); build the normalize home map with a concrete tuple[str, str] unpack (ty invalid-assignment); apply ruff format. Add tests covering the normalize apply=True path, the new-form archive rollup guard, and the defensive non-list/non-dict rows in plan_normalize_adhoc; bump the ensure-label provisioning count to 19 for the new 'archive' label.

  • add typescript primary-language + [typescript] block (#2749) Add "typescript" to the primary-language enum and a [typescript] config block mirroring the [cpp] std/stdlib precedent (epic vergil-project/.github#284 T3).

The block validates module (allowed: esm; cjs deferred) and target (es2022) as single string values, defaulting to the v1 pins when the block is absent. Unknown module/target values are rejected rather than silently ignored, and an unrecognized primary-language still warns.

Ref vergil-project/.github#284

  • support typescript for CodeQL + repo-init (#2754) Add TypeScript to the CodeQL gate-emission set and wire repo-init container scaffolding for the node- image family (epic vergil-project/.github#284 T6).

TypeScript is the first language whose primary-language name (typescript) differs from its CodeQL analysis identifier (javascript-typescript). This task keys the gate on the primary-language name, because _CODEQL_SUPPORTED_LANGUAGES is tested against project.primary_language and the emitted ci.yml language: must stay typescript for container resolution. The typescript to javascript-typescript Action-side mapping is deferred to T7.

  • github_config: add typescript to _CODEQL_SUPPORTED_LANGUAGES so TS repos get the required CodeQL check; add an alignment test asserting it agrees with repo_init._CODEQL_LANGUAGES (which already lists typescript).
  • repo_init: _container_suffix/_container_tag resolve the node- prefixed [ci].versions tag to the ts-node suffix + numeric Node major (node-24 to prod-ts-node:24), with malformed tags falling back to base/latest like an unknown language; _default_ci_versions seeds node-24, node-22.
  • No extra allowed-action patterns are needed: the containerized TS pipeline runs inside prod-ts-node images and needs no setup-node action beyond the base actions/* allowlist.

  • TypeScript registry entry (node) (#2755) Add the TypeScript language to the registry: INSTALL (npm ci), LINT (prettier + type-aware eslint with ban-ts-comment), TYPECHECK (tsc --noEmit), TEST (vitest V8 coverage at 100% line), and AUDIT (npm audit --omit=dev + best-effort license surfacing). Declares TYPECHECK/LINT/AUDIT once and TEST per-version via the existing Cardinality field. Ships the packaged shareable strict base tsconfig.base.json (strict + curated warnings-to-11 extras) plus the ESLint flat config and Prettier config consumers reference. Adds a TypeScript license allowlist constant for the future hardened gate (ledger #7). Ref vergil-project/.github#284

CI Evidence: All gates passed — full audit bundle available. Download →