Skip to content

promote(DEV→main): sm_tech_ids emit-all fix + queued DEV changes - #2218

Merged
jung-thomas merged 10 commits into
mainfrom
DEV
Sep 9, 2026
Merged

jung-thomas merged 10 commits into
mainfrom
DEV

Conversation

@jung-thomas

Copy link
Copy Markdown
Contributor

Promotes DEV to main for PROD deploy. Primary driver: sm_tech_ids emit-all fix (#2217) — removes the isActualTag gate so every tag with a semaphoreId emits its meta.

Also carried (already merged on DEV):

Deploy target: PROD via blue-green after merge.

…push hook

## Changes

1. **Split CI workflows:**
   - `unit-tests.yml` now runs only vitest (behavioral tests)
   - New `static-guards.yml` runs all 13 guard checks (build collisions, icon imports,
     srv-qa parity, slug-lookup canonicalization, CSRF, GraphQL breaking-changes, etc.)

   This halves alert fatigue: a red "unit tests" now signals a real behavioral failure
   (rare, worth reading), not a policy-linter violation that's noisy by design.

2. **De-`&&`-chained guard runner:**
   - Created `scripts/run-static-guards.ts` that runs all checks to completion
     before reporting, instead of failing on the first violation
   - Reports all failures at once (eliminates "fix one, next one appears" death-by-cuts)
   - Summary at the end shows pass/fail count and which guards failed

3. **Pre-push git hook:**
   - Added `scripts/git-hooks/pre-push` wired via `npm run setup:git-hooks`
   - Runs `npm run static-guards` locally before push (deterministic, instant feedback)
   - Skipped in non-interactive environments (CI, deploy scripts)

## Why

Last 10 failed CI runs: 8 failed on guard chain (`postbuild:apps`), only 2 on real tests.
Guard violations (missing magic comments, new service count off by one, etc.) are high-frequency
noise that drowns out signal. Team has started ignoring CI, risking real regressions.

Splitting unit tests (vitest only) from guards (policy linters) means:
- PR gate is fast + behavioral (genuine failures)
- Guards run everywhere (locally via pre-push, in deploy CI) with instant feedback
- Developer sees all violations at once, not one-by-one
- db-flags.test.js: replace toBe(14) with managedFlagKeys().length-derived
  coverage checks (+ a floor for the registry-membership test) so adding a
  feature flag no longer breaks the suite.
- seed-sapphire-2026-concepts.test.js: exact-count -> floor; shape,
  uniqueness, headline coverage already asserted separately.
- run-static-guards.ts: --fix flag routes to fixable guards + prints hint.
- check-icon-imports.ts / check-kg-meta-formatters-mirror.ts: --fix mode
  applies the mechanical, zero-judgment fix (add side-effect import / copy
  authoritative mirror).
ci: split unit tests from static guards, de-&&-chain checks
The A2A (Agent2Agent) endpoint (public Agent Card, POST /a2a JSON-RPC,
five skills, Tutorial.MCP client-credentials) was only discoverable via
.well-known and ORD — nothing on the human-facing /api-docs/ page.

- Add an 'A2A agent' section to hugo/content/api-docs/_index.md, sibling
  to the MCP server section (discovery, transport, skills, auth split).
- Add docs/end-users/a2a-quickstart.md mirroring mcp-quickstart.md:
  public discovery vs internal/partner client-credentials, message/send +
  message/stream + tasks/get examples, JSON-RPC error codes, admin config.
- Register the new quickstart in the VitePress End Users sidebar.
…ckstart

docs(a2a): document A2A agent on /api-docs/ + add A2A quickstart
…2188)

The daily owner-feedback digest (#2190) was gated by a plain ImsConfig
key 'feedback.email.enabled' with no admin surface — it never appeared
in the Feature Flags viewer, so there was no supported way to toggle it.

Register it as a kind:'db' flag (same shape as the content.delta.* keys),
so the FeatureFlags ListReport renders it and enable/disable upserts the
exact ImsConfig row the job reads. No CDS/handler/UI changes needed.

The prod-space gate and SMTP-secret requirement are unchanged, so the
toggle stays inert on dev/qa.
Surface feedback-email digest flag in Feature Flags UI (#2188)
The sm_tech_ids meta (PR #2187) was gated on isActualTag=true at all
three SSR emit sites, suppressing ~71 of 90 product tags that carry a
semaphoreId. isActualTag is a legacy taxonomy-class flag, not an
emission policy; a tag with a Semaphore product ID should surface it
regardless.

Remove the gate in:
- srv/lib/semaphore-tags.js (getSemaphoreMdMap)
- srv/lib/topics-query.js (topic-detail SSR)
- srv/lib/catalog-data.js (group/mission resolveSmTechIds)

Emission now keys solely on a non-null/non-empty semaphoreId. Tests
updated to assert emission across isActualTag true/false/absent.
fix(sm_tech_ids): emit semaphoreId for every tag, not just isActualTag
@jung-thomas
jung-thomas merged commit 52a43f1 into main Sep 9, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant