Component Library Reconciliation Procedure

Updated: 2026-07-15 22:39 ET · Audited: 2026-07-13 16:35 ET

TL;DR: Five-phase procedure for deciding whether component-spec changes should roll into the real shared component library, and for surfacing new shared/reusable components: gate checkinventoryclassifyupdate living docscommit/PR. This is a different question from the Figma sync procedure: that one asks "do the spec docs match Figma?" — this one asks "does the real code in ALPAMobile.Presentation/Components/Library/ match the specs, and does anything new belong in the shared library?" Run this after a Figma sync's doc roll-up lands, or whenever the implementation gate status might have changed.

Table of Contents

  1. Overview
  2. When to run this
  3. Phase 1 — Gate check
  4. Phase 2 — Inventory: real library vs. specs
  5. Phase 3 — Classify gaps
  6. Phase 4 — Update the living reconciliation docs
  7. Phase 5 — Commit and PR
  8. File inventory
  9. Gotchas

1. Overview

A Figma sync keeps the spec docs (docs/component-specifications/) faithful to Figma. It does not check whether the real shared component library — the code other features actually import — reflects what's specced, or whether new patterns that showed up across multiple specs deserve to be promoted into a shared atom/primitive rather than re-implemented per screen. That's this procedure's job.

As of 2026-07-13 this reconciliation exists only as dated, one-off snapshot artifacts (scaffold-component-reconciliation.html, component-library-plan.html) that explicitly call themselves "backlog artifacts, not a work order." This doc formalizes the repeatable procedure so those stop going stale between runs — update them in place each run rather than creating a new dated snapshot every time (that's how the AB#2087 gate-language staleness happened: the artifacts said "gated" for 12 days after the gate actually cleared, because nothing re-checked them).

2. When to Run This

3. Phase 1 — Gate Check

Verify live, don't trust doc text. Reconciliation artifacts reference a specific Azure Boards work item as the implementation gate (currently WI-2087, "Presentation Extraction," under Epic AB#2081). Doc text lags reality — it only updates when someone runs this procedure.

az boards work-item show --id <gate-WI> --query "{state:fields.\"System.State\"}" -o json

If the gate is now resolved but the doc still says "gated," that mismatch alone is a finding — update the gate language (see Phase 4) even if you do nothing else this pass. Do not assume a resolved gate WI means the specific migration/track it was blocking is complete — verify against real code (Phase 2) before changing a track's status from "not started" to "done."

4. Phase 2 — Inventory: Real Library vs. Specs

Compare what the specs describe against what actually exists in code:

5. Phase 3 — Classify Gaps

For each gap found in Phase 2, classify using the existing opt-in criterion (D40): the shared library is for recurring, data-driven controls; one-off static/informational content is exempt and may stay plain markup. The shared layer is atoms + tokens, not a base class — domain controls compose shared atoms rather than inheriting a shared base.

Gap typeAction
Specced, not built, target locationAdd to the "ready to build" list — no further decision needed, just scheduling.
Built, but in the wrong location (legacy head vs. RCL)Migration gap — track separately from new-component gaps; don't conflate "needs to move" with "needs to be built."
Hand-rolled pattern duplicates an existing specConsume-don't-rebuild — flag the screen/page for a rebuild pass, not a new spec.
Recurring pattern, no spec, meets D40's opt-in barNew shared component candidate — needs a spec page and a decision (D-number) before it's build-ready.
Recurring pattern, no spec, one-off/static per D40Exempt — record the exemption reasoning so it isn't re-flagged next pass.

6. Phase 4 — Update the Living Reconciliation Docs

Edit in place. Do not create a new dated snapshot doc each run — that's what let the last one go stale. Update:

FileWhat to update
docs/component-specifications/scaffold-component-reconciliation.htmlTable A (consume-don't-rebuild) and Table B (new controls needed) rows; gate language in the Recommendation section; Updated: stamp.
docs/ui-refresh-1821/component-library-plan.htmlTrack A/B/C status badges; Work Items to Update table; Updated: stamp.
naming-decisions-record.htmlNew D-number for any new shared-component candidate classified in Phase 3, following the standard decision-recording steps.

7. Phase 5 — Commit and PR

Same verification and branch conventions as the Figma sync procedure: tag-balance check on changed HTML, stage specific files (never git add -A), commit message format "docs: component library reconciliation (<what changed>)". Check how far behind the target branch your base commit is before pushing (see the Figma sync procedure's Gotchas — the same branch-staleness risk applies here).

8. File Inventory

FilePurpose
docs/component-specifications/scaffold-component-reconciliation.htmlConsume-don't-rebuild list + new-controls backlog
docs/ui-refresh-1821/component-library-plan.htmlTrack A/B/C build status against the real RCL
docs/component-specifications/naming-decisions-record.html#d40The opt-in criterion for shared-library membership
docs/component-specifications/foundations-reconciliation.htmlSibling reconciliation, scoped to design-system foundations (color/type/spacing) rather than components — not this procedure's concern

9. Gotchas