Skip to main content
Amended by 0145: the support row is restated there.
Amended by 0127: the category list, and the Vite plugin is @stackra/vite-plugin in developer.

Context

Figentra OS (@figentra-os/*, 55 packages in the same ten categories) is Stackra’s ancestor. The owner decided, package by package, what to port. Some packages port as they are, some are adapted or redesigned, some start fresh, some are skipped, and some become Pro. Each port still goes through the gate (spec, review), and the code is relicensed to MIT as it is ported (0024). This page is the plan. Each package’s design ADR is written when it lands (0018).

Decision

  1. Conventions every ported package meets:
    • A file-contract docblock on every file and a docblock on every export (0007).
    • One export per file, # subpath imports, and no any, non-null assertions or enums (0006).
    • No Reflect metadata. Code that calls Reflect.defineMetadata (kbd, pwa) switches to the container’s WeakMap metadata store. reflect-metadata stays rejected (0011).
    • The diagnostics catalogue is kept, and its prefix becomes STK.
    • Devtools tabs (through @stackra/devtools-kit) only where a package needs one.
    • Driver packages follow the instance-module pattern and ship a conformance suite (0076).
    • No encore.dev import (0078). Names follow 0083.
  2. The plan. Actions: port as-is, port + adapt, redesign, fresh, skip, Pro.

Consequences

  • The ported set is large, and most of it is mechanical, so it can be delegated (0066). Adapt, redesign and fresh rows need a spec each.
  • Category folders are created with their first package (0028). @stackra/brand already lives in experience, while Figentra OS keeps brand in cross-cutting. Which folder it ends in is settled when the Figentra BrandService is merged into it.
  • A row changes by a new ADR or an amendment to this one.

Enforcement

Existing: FORBIDDEN_DEPENDENCIES (reflect-metadata) in tools/scripts/validate-repository.mjs, and boundaries.jsonc (encore.dev). Planned: an oxlint rule banning Reflect.defineMetadata and Reflect.getMetadata, a docblock check, and a test that every diagnostic code starts with STK.

Supersedes and sources

Supersedes: none. Sources: owner decisions in chat, 2026-10-19 (Round 2 lineage, Round 3 conventions, Round 6 item 4, Round 8 package questionnaire F1 to F13, R1 to R6, S1 to S4, T1 to T4, E1 to E4, D1, D2, C1, cross-cutting, developer, X3 to X5). Package list: /Projects/figentra/packages/os/* (informational).