Skip to content

feat(spec): unify conditional-visibility predicate under visibleWhen (ADR-0089) #944

feat(spec): unify conditional-visibility predicate under visibleWhen (ADR-0089)

feat(spec): unify conditional-visibility predicate under visibleWhen (ADR-0089) #944

name: Spec Liveness Check
# For a metadata-driven platform the spec is the product surface — a parsed-but-
# unenforced property is a silent no-op (and, for security props, false compliance).
# This gate reads the metadata-type registry (the authorable types) and requires every
# property of a GOVERNED type to declare a liveness status with evidence in
# packages/spec/liveness/<type>.json. A new unclassified property fails the check (the
# ratchet: no new undeclared surface). See packages/spec/liveness/README.md.
#
# ADR-0054 (prove-it-runs): bound high-risk 'live' properties must carry a `proof`
# pointing to a dogfood test that declares the matching `@proof:` tag. The gate also
# triggers on packages/dogfood/** so deleting/renaming a proof re-runs this check and
# the dangling reference is caught (the proof files live outside packages/spec/).
on:
pull_request:
types: [opened, synchronize, reopened]
paths:
- 'packages/spec/**'
- 'packages/dogfood/**'
permissions:
contents: read
jobs:
liveness:
name: Spec property liveness
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v7
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '20'
- name: Enable Corepack
run: corepack enable
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Check spec liveness
run: pnpm --filter @objectstack/spec check:liveness