Skip to content

ID-61 bid→procurement rename — Decision Register

⚠️ HISTORICAL EXECUTION RECORD (bannered S462). Accurate record of the shipped bid→procurement/form renames, but its governing AXIS-A definition (“procurement = anything naming a procurement WORKSPACE”) is superseded by DR-038 (S452) — do NOT use it to guide future naming; future identifiers scope to the form/activity. The §4 DEFER table remains the LIVE migration inventory (bl-370/bl-349), executed opportunistically inside ID-145.

ID-61.3 Decision Register — bid → procurement / form Rename Audit

Section titled “ID-61.3 Decision Register — bid → procurement / form Rename Audit”

The Canonical/Knowledge-Hub bid cleanup follows a two-axis rule ratified in ID-71 {71.12}. application_type=procurement is the umbrella; bid is a form_type within procurement. The inverted “procurement-is-a-form-type” framing is a ratified-rejected anti-pattern. Disposition is decided by what the symbol operates on, not by the token in its name:

  • AXIS A — procurement (the application umbrella): anything naming a procurement WORKSPACE / application or its lifecycle — workspace session, the active-procurement dashboard/list, readiness, workspace export, create/navigate/paginate/filter workspaces, and the query-key NAMESPACE caching workspaces keyed by procurementId. Shipped exemplars kept as-is: list_active_procurement, get_procurement_detail, get_change_report.
  • AXIS B — form (the form artifact within a workspace): an individual QUESTION / RESPONSE / DRAFT / BRIEFING. Mirrors the shipped DB form_questions / form_responses, the queue job form_draft_all, and the MCP tools get_form_question / form_briefing. A hook that mutates responses (save/accept/flag/regenerate) is form; a job that drafts all responses is form (it runs form_draft_all).
  • KEEP — ratified vocabulary that legitimately stays: bid as a form_types CV value; VALID_BID_STATUSES / TERMINAL_BID_STATUSES (state-machine consts + their string values — bid is a genuine form_type with its own lifecycle); the reorient bid_response union tag in types/reorient.ts (decoupled, sourced from form_response_history, tracks edits — deliberate decoupling, not drift).
  • DEFER — real but owns its own ticket: the from_bid URL param and all TS derived from it (fromBidId, fromBidWorkspace, fromBid — bookmarkable contract); --bid-* CSS/design tokens + their bg-bid-*/text-bid-*/border-bid-* utility classes (bl-349); persisted CV values bid_writing / bid_library / LAYER_BID_DETAIL/bid_detail (data backfill); DB CHECK literals prior_bid_response / bid_discovered and the TS that compares against them (value-coupling); the persisted kb-bid-view localStorage key; the legacy workspaces.type === 'bid' wire-alias; and the generated app-bundles.ts bid tokens (regenerate from mcp-apps/form-dashboard/ source, never hand-edit).

queryKeys.bids (object-property namespace) and the 'bids' query-key string tuples in lib/query/query-keys.ts:329-337 are pure in-memory TanStack cache keys (no persistence, no bookmarkable contract). They rename to queryKeys.procurement / 'procurement' atomically with the four use-draft-stream.test.ts assertions, so the namespace, its ~24 accessor sites, the string tuples, and the test assertions land in lockstep — a half-rename desynchronises the cache key from its consumers.

Verifier-overturned classifications (resolved against the original claim disposition)

Section titled “Verifier-overturned classifications (resolved against the original claim disposition)”
  • bid_management (feature-toggle key, lib/client-config.ts:66,136) — rename-procurement (file-based static toggle, NOT persisted, NOT the primary_focus persona CV; gates the procurement umbrella capability). The persona CV bid_writing remains a separate DEFER item.
  • 'bid' category (lib/claude-prompts.ts:30,69,85) — rename-procurement (member of the ad-hoc ClaudePrompt.category UI-grouping union, NOT a form_types CV value; both prompt generators consume ActiveBidSummary, a procurement workspace).
  • app-bundles.ts bid tokens (generated)defer (NOT keep: source app already renamed to mcp-apps/form-dashboard/, constant already FORM_DASHBOARD_HTML; stale minified output regenerates form-axis on next bun run build:mcp-apps; do-not-hand-edit).

Section 1 — RENAME → procurement (AXIS A)

Section titled “Section 1 — RENAME → procurement (AXIS A)”
identifiertargetsitesrationale
ActiveBidSummaryActiveProcurementSummarylib/dashboard.ts:47 (+~26 importers across lib/app/components/mcp; __tests__/lib/attention.test.ts FLAGGED)Interface summarising an active procurement WORKSPACE (id/name/buyer/status/deadline/question counts) for the active-procurement list. High blast radius → gitnexus_rename.
ActiveBidWorkspaceActiveProcurementWorkspacehooks/use-quick-assign.ts:12 (+content-grid/list/card/row, quick-assign, browse-content; __tests__/components/quick-assign-button.test.tsx:5,28 FLAGGED)Interface modelling an active procurement WORKSPACE row {id,name,color,deadline}; name literally ends Workspace.
ExportBidMetadataExportProcurementMetadatalib/domains/procurement/procurement-export-types.ts:36 (+export-data/docx/xlsx, ~11 sites)Workspace-level cover-page metadata for exporting a whole procurement workspace; export-of-a-workspace = AXIS A.
bid_nameprocurement_nameprocurement-export-types.ts:37, procurement-export-data.ts:116, procurement-export-docx.ts:364, procurement-export-xlsx.ts:325Property holding the workspace name, rendered under ‘Procurement Title’.
invalidateBidDatainvalidateProcurementDatause-procurement-session.ts:81,187,217, use-procurement-response-actions.ts:28,65,114, use-stream-coordination.ts:198,311,426,427Invalidates the workspace-level cache (queryKeys.bids.detail/questions(procurementId)). Cross-hook property contract → gitnexus_rename.
createdBidcreatedProcurementprocurement-creation-wizard.tsx:82,113,115,154,194,401,404,416,421,426useState holding the newly-created procurement WORKSPACE {id,name} from POST /api/procurement.
setCreatedBidsetCreatedProcurementprocurement-creation-wizard.tsx:82,106,154Setter paired with createdBid.
isBidDiscoveredisProcurementDiscoveredlayer-inference.ts:27,83, batch-reclassify.ts:905, upload/route.ts:798, items/route.ts:337, items/batch/route.ts:357; __tests__/lib/layer-inference.test.ts FLAGGEDBOOLEAN ‘originated from a procurement WORKSPACE’ (!!workspaceId), NEVER compared against the persisted 'bid_discovered' literal — decoupled, so NOT defer.
useBidExportuseProcurementExportuse-procurement-export.ts:32, procurement/[id]/page.tsx:69,568, procurement-export-menu.tsx:12,25Hook exporting the whole workspace (POST /api/procurement/{id}/export/{format}).
UseBidExportOptionsUseProcurementExportOptionsuse-procurement-export.ts:10,35Options type for useBidExport; fields procurementId/procurementName.
UseBidExportReturnUseProcurementExportReturnuse-procurement-export.ts:15,35Return type of the workspace-export hook.
QAUsedInBidsQAUsedInProcurementsqa-provenance-sections.tsx:25, editor-view.tsx:21,261, reader-view.tsx:37,378; tests FLAGGEDComponent listing which procurement WORKSPACES a Q&A pair was used in (workspaces prop, links /procurement/{id}).
QAUsedInBidsPropsQAUsedInProcurementsPropsqa-provenance-sections.tsx:18,25Props interface (workspaces: Workspace[]) — rename in lockstep with QAUsedInBids.
navigateToBidnavigateToProcurementprocurement-creation-wizard.tsx:112,190,200,204,408Wizard fn navigating to the newly created procurement WORKSPACE.
filteredBidsfilteredProcurementsapp/procurement/page.tsx:92,130,132,247,270useMemo filtered+sorted list of procurement WORKSPACES on the active-procurement list page.
buildBidSummarybuildProcurementSummarybid-summary.ts:18, dashboard.ts:19,565, reorient.ts:19,247Builds the dashboard/reorient summary from active procurement WORKSPACES → ProcurementBriefing[]. File bid-summary.ts is itself a rename candidate.
activeBidCountactiveProcurementCountquick-stats-strip.tsx:14,43,96,97, app/page.tsx:273Count of active procurement WORKSPACES; UI label already ‘Active procurements’.
useBidSessionuseProcurementSessionuse-procurement-session.ts:91, use-stream-coordination.ts:5,174,201Data layer for the procurement WORKSPACE/session page (keyed by procurementId).
UseBidSessionReturnUseProcurementSessionReturnuse-procurement-session.ts:70,91Return type of useBidSession — rename in lockstep.
formatActiveBidsformatActiveProcurementsformatters/dashboard.ts:126, formatters/index.ts:32, tools/procurement.ts:16,124Renders the list_active_procurement dashboard markdown from ActiveBidSummary[].
failedBidIdsfailedProcurementIdsapp/api/procurement/route.ts:101,139,177,178Local string[] of procurement WORKSPACE ids whose stats RPC fallback failed.
failed_bid_idsfailed_procurement_idsapp/api/procurement/route.ts:51,170,178API-response diagnostic field listing workspace ids; server-emitted, not persisted/bookmarkable. FLAG: public response-shape field.
allBidsallProcurementstools/procurement.ts:83,110,117,119Local ActiveBidSummary[] of all workspaces before sort+paginate in list_active_procurement.
activeBidsResultactiveProcurementsResultreorient.ts:97,246, dashboard.ts:310,528Promise.all element holding {workspaces, statsMap} for active workspaces.
activeBidsactiveProcurementscontent-suggestions.ts:218,229,242 (:224 telemetry string 'workspaces.activeBids' — FLAG, separate site)Local holding the active-workspace query result for content-suggestion boosting.
activeBidDomainsactiveProcurementDomainscontent-suggestions.ts:228,232,237,260Set<string> of domains across active procurement WORKSPACES.
useBidReadinessuseProcurementReadinessuse-procurement-readiness.ts:48, procurement/[id]/page.tsx:70,141; tests FLAGGEDHook querying /api/procurement/{id}/readiness — readiness is the AXIS-A exemplar.
UseBidReadinessReturnUseProcurementReadinessReturnuse-procurement-readiness.ts:37,48Return-type interface of the workspace-readiness hook.
refetchBidrefetchProcurementuse-procurement-actions.ts:96,100,101Destructured refetch of the procurement WORKSPACE detail query.
paginatedBidspaginatedProcurementsapp/procurement/page.tsx:132,256,262Current-page slice of procurement WORKSPACES on the list page.
inBidDomaininProcurementDomaincontent-suggestions.ts:260,261,270Boolean: subtopic domain covered by an active procurement WORKSPACE.
handleCreateBidhandleCreateProcurementprocurement-creation-wizard.tsx:121,244,363Submit handler POSTing /api/procurement to create a WORKSPACE.
handleBidCreatedhandleProcurementCreatedapp/procurement/page.tsx:142,304onCreated callback — toasts ‘Procurement created’, routes /procurement/{id}.
generateBidXlsxgenerateProcurementXlsxprocurement-export-xlsx.ts:425, export/xlsx/route.ts:8,48; tests FLAGGEDBuilds the XLSX of a whole procurement WORKSPACE.
generateBidDocxgenerateProcurementDocxprocurement-export-docx.ts:818, export/docx/route.ts:8,48; tests FLAGGEDBuilds the DOCX of a whole procurement WORKSPACE.
produceBidDeadlineItemsproduceProcurementDeadlineItemslib/attention.ts:244,498; tests FLAGGEDComputes per-workspace deadline urgency from ActiveBidSummary[]. NOTE: the emitted 'bid_deadline' string VALUE and attention-bid-${id} prefix are NOT renamed by this identifier rename.
hasActiveBidshasActiveProcurementscontent-suggestions.ts:242,260Boolean: any active procurement WORKSPACES exist.
filterActiveBidsfilterActiveProcurementsuse-quick-assign.ts:39,103TanStack select mapping Workspace[]ActiveBidWorkspace[]. (Inner ws.type !== 'bid' literal is KEEP, untouched.)
visibleBidsvisibleProcurementscontent-effectiveness-panel.tsx:233,301Visible slice of procurement WORKSPACES a content item was cited in.
distinctBidsdistinctProcurementscontent-effectiveness-panel.tsx:229,269Count of distinct procurement WORKSPACES a content item appears in.
currentBidcurrentProcurementprocurement/[id]/questions/extract/route.ts:234,243Workspace row read to gate the questions_extracted lifecycle transition.
refreshBidrefreshProcurementprocurement-context-provider.tsx:61,226Context method re-fetching the procurement WORKSPACE summary.
ActiveBidsSectionActiveProcurementsSectionactive-procurement-section.tsx:52, app/page.tsx:5,253Dashboard section rendering the active procurement WORKSPACES list (aria-label ‘Active procurements’).
ActiveBidsSectionPropsActiveProcurementsSectionPropsactive-procurement-section.tsx:48,52Props interface for ActiveBidsSection.
toBidtoProcurementactive-procurement-section.tsx:12,13,95Adapter mapping ActiveBidSummary → Procurement WORKSPACE shape.
active_bidsactive_procurementsdashboard.ts:34,167,202,529,551,632, attention.ts:86,498, app/page.tsx:161,253,273, dashboard/route.ts:51, tools/apps.ts:471, tools/review.ts:162Dashboard/unified payload field holding active procurement WORKSPACES (ActiveBidSummary[]). TS-only; app-bundles regenerates.
bid_summaryprocurement_summarytypes/reorient.ts:13, bid-summary.ts:9,22,55,59, reorient.ts:247,295,384, dashboard.ts:220,564,565,641, app/page.tsx:174, reorient/route.ts:73, formatters/dashboard.ts:228,230Reorient field of ProcurementBriefing[] summarising active WORKSPACES. TS-only; bundle regenerates.
unique_bids (TS-only sites)unique_procurementswin-rate/route.ts:19,29,48, content-performance-section.tsx:19,29,219Count of distinct procurement WORKSPACES a content item was cited in. CAVEAT: RPC-row reads win-rate/route.ts:90,104,113 are column-coupled to get_aggregate_win_rate_stats.unique_bids → DEFER those reads until the SQL column migrates.
bid_deadlineprocurement_deadlinetypes/reorient.ts:33, attention.ts:35,278, reorient.ts:298,311, reorient/route.ts:14, unified-attention-section.tsx:85, app-bundles.ts (generated consumer), review.ts:51,167 (comments)TS union literal (NOT a DB CHECK) for a procurement WORKSPACE deadline (entity_type:'workspace'). Rename atomically across union/producers/zod-enum/icon-map; regenerate bundle.
source_bid_idsource_procurement_idprocurement/[id]/outcome/integrate/route.ts:247Provenance JSONB field = source procurement WORKSPACE id. Write-only, no reader — safe.
source_bid_namesource_procurement_nameprocurement/[id]/outcome/integrate/route.ts:248Sibling = source procurement WORKSPACE name. Write-only, safe.
DashboardActiveBidSummarySchemaDashboardActiveProcurementSummarySchemadashboard/route.ts:29,51Zod schema validating an active-procurement WORKSPACE summary row.
ProcurementBidSchemaProcurementListItemSchemaapp/api/procurement/route.ts:27,45Zod schema for a procurement WORKSPACE row in the list response (‘each bid is the selected workspaces row’). Wire field bids: is out of scope for this identifier rename.
queryKeys.bidsqueryKeys.procurementquery-keys.ts:328, use-procurement-actions.ts:57,88,154,391,392,516,518,552,561,570, use-procurement-session.ts:100,113,144,189,192,199, use-procurement-readiness.ts:52,61, use-procurement-response-actions.ts:105, use-stream-coordination.ts:371,377,380, use-draft-stream.ts:50,53Namespace caching procurement WORKSPACES keyed by procurementId. {61.7} atomic with string tuples + tests → gitnexus_rename.
'bids' (query-key string literals)'procurement'query-keys.ts:329,330,331,333,335,337In-memory cache-key tokens; rename atomically with queryKeys.bids and the 4 use-draft-stream.test.ts assertions ({61.7}).
bid (loop/local var + React prop)procurementapp/procurement/page.tsx:95,256,257,262,263,338, procurement-list-card.tsx:38, active-procurement-section.tsx:95, procurement/[id]/page.tsx:410, procurement-context-provider.tsx:55,80,220Bindings holding Procurement/ProcurementSummary WORKSPACE objects. Scope-aware gitnexus_rename (collides with form_type CV value + DEFER tokens).
BIDS_PER_PAGEPROCUREMENTS_PER_PAGEapp/procurement/page.tsx:41,130,133,134,270Page-size const for paginating the procurement WORKSPACE list.
bid (HTML id/aria strings)'procurement-tabpanel' / `procurement-tab-${activeTab}` / `attention-procurement-${bid.id}`procurement/[id]/page.tsx:405,406, attention.ts:277Cosmetic non-persisted DOM/synthetic ids on the procurement WORKSPACE surface.
user-facing 'bid' copy stringsprocurementapp/procurement/page.tsx:54,155,326, quick-stats-strip.tsx:96UI copy / JSDoc describing the procurement WORKSPACE surface; doc/copy-only, not value-coupled.
bid_management (feature-toggle key)procurement_managementclient-config.ts:66,136; __tests__/lib/client-config.test.ts:34,159, __tests__/helpers/mock-contexts.ts:185 FLAGGEDVerifier-overturned from defer. File-based static FeatureName toggle (NOT persisted, NOT the primary_focus persona CV); gates the procurement umbrella capability; label already ‘Procurement Management’.
'bid' (ClaudePrompt.category)procurementclaude-prompts.ts:30,69,85Verifier-overturned from keep. Member of the ad-hoc UI prompt-grouping union (NOT a form_types CV value); both generators consume ActiveBidSummary (procurement workspace); never persisted/switched-on.
identifiertargetsitesrationale
runBidDraftAllJobrunFormDraftAllJobprocurement-draft-all.ts:132, dispatch.ts:45,116, batch-reclassify.ts:550,559 (JSDoc); procurement-draft-all.test.ts (~16), dispatch-cancelled.test.ts:43 FLAGGEDQueue handler for the form_draft_all job — iterates form_questions, drafts ALL responses (writes form_responses). Job name already form_draft_all; fn name is the lagging residual.
useBidResponseActionsuseFormResponseActionsuse-procurement-response-actions.ts:54, use-stream-coordination.ts:6,176,300Mutation hook on INDIVIDUAL RESPONSE artifacts (PATCH /responses/{id} save/accept/flag; POST .../regenerate). ‘A hook that mutates responses is form.‘
UseBidResponseActionsReturnUseFormResponseActionsReturnuse-procurement-response-actions.ts:35,67Return type exposing handleAction over a single response — rename in lockstep.
UseBidResponseActionsParamsUseFormResponseActionsParamsuse-procurement-response-actions.ts:17,67Params interface (response: ProcurementResponse, currentQuestion, invalidateResponse). The procurementId/invalidateBidData fields are workspace context received, not what the object names.
no_questions_in_bidno_questions_in_formprocurement-draft-all.ts:191 (throw); procurement-draft-all.integration.test.ts:906,953, procurement-draft-all.test.ts:31,634,671 FLAGGEDPermanentJobError code thrown by the form_draft_all handler when a workspace has no form_questions to draft. Soft in-repo contract — rename throw + the 2 test assertions + JSDoc atomically. No external/MCP coupling.
bidResponseRowToTeamChangeformResponseRowToTeamChangeteam-changes.ts:42, dashboard.ts:15,489, reorient.ts:15,193Maps a single form_response_history row → TeamChange. The emitted 'bid_response' literal (:59) is KEEP and untouched.
bidResponseRowToRecentWorkformResponseRowToRecentWorkteam-changes.ts:91, dashboard.ts:17,509, reorient.ts:17,228Maps a single form_response_history row → RecentWorkItem. The emitted 'bid_response' literal (:107) is KEEP and untouched.

Section 3 — KEEP (ratified vocabulary that stays)

Section titled “Section 3 — KEEP (ratified vocabulary that stays)”
identifiertargetsitesrationale
VALID_BID_STATUSESlib/validation/schemas.ts:2007,2021 (+ duplicated inline enum :1022-1033, KEEP by value)State-machine const for the bid form_type lifecycle; identifier AND string values stay. Named verbatim in the KEEP rule.
TERMINAL_BID_STATUSESprocurement/[id]/templates/route.ts:42 (JSDoc), :43, :155Terminal-state const Set(['won','lost','withdrawn']) of the bid lifecycle. JSDoc describes the lifecycle, not a stale /api/bids route.
bid_response (reorient union tag)types/reorient.ts:52,55,60,62,67,73,75; emit/validator network: team-changes.ts:59,107, reorient.ts:190,197,225,232, dashboard.ts:486,506, activity-feed.tsx:117, reorient-section.tsx:81,94,115, reorient/route.ts:32,42, app-bundles.ts:349,354 (runtime-coupled); __tests__/lib/reorient.test.ts:1303,1351,1390 FLAGGEDDecoupled entity_type union tag sourced from form_response_history (tracks edits, not the DB table which is already form_responses). Ratified KEEP — renaming any occurrence breaks the union/runtime contract.
_s224..._bid_draft_all (migration filename in JSDoc)lib/queue/envelope.ts:16,35JSDoc cites the immutable historical migration filename 20260505164817_s224_widen_job_type_check_bid_draft_all.sql and correctly annotates ‘formerly bid_draft_all, renamed under ID-71’. Renaming would falsify the record.

Section 4 — DEFER (real, but owns its own ticket — do not touch this session)

Section titled “Section 4 — DEFER (real, but owns its own ticket — do not touch this session)”
identifiertargetsitesrationale
from_bid (URL query param)procurement/[id]/session/page.tsx:408, browse-content.tsx:65,66, use-browse-filters.ts:287,290,292, use-filter-presets.ts:163,166, content-card.tsx:414, content-grid.tsx:46, content-row.tsx:54, content-list.tsx:33, quick-assign-button.tsx:26,68; e2e/tests/bid-session.spec.ts:325,381-432 FLAGGEDUser-visible/bookmarkable URL query-key (value is a workspaceId, but the contract overrides axis routing). Named in DEFER.
fromBidIdbrowse-content.tsx:66,600,617, content-grid.tsx:47,68,274, content-list.tsx:34,53,166, content-card.tsx:149,160,176,415,432,510,601,647,667, content-row.tsx:55,77,233,403, quick-assign-button.tsx:27,49,69,70; __tests__/components/quick-assign-button.test.tsx FLAGGEDProp derived from searchParams.get('from_bid'), threaded through the content tree; carries a workspaceId but DEFER names it explicitly.
fromBidWorkspacequick-assign-button.tsx:69,122,126,128,132,134Resolves the procurement workspace pointed at by from_bid (activeWorkspaces.find(ws=>ws.id===fromBidId)); transitively from the param. DEFER names it.
fromBid (local var)use-browse-filters.ts:290,291,292, use-filter-presets.ts:163,165,166const fromBid = searchParams.get('from_bid') re-pushed to keep sticky context; direct conduit for the deferred param. DEFER names it.
kb-bid-viewapp/procurement/page.tsx:71 (via use-view-mode.ts:16,29)localStorage persistence key for the grid/list preference; renaming silently resets every user’s saved view → migration ticket (→ kb-procurement-view).
LAYER_BID_DETAIL / 'bid_detail'layer-inference.ts:48,85,98,115,149 (+:157,217)String value 'bid_detail' is a persisted layer_vocabulary CV key (seed.sql, client-config FALLBACK_LAYERS); cannot change without backfill. Label already ‘Procurement Detail’.
bid_librarylayer-inference.ts:21,94, batch-reclassify.ts:891,892, items/route.ts:329, source-metadata-helpers.ts:18Persisted ingestion_source/provenance value written to content_items and read back by the label lookup; needs data backfill.
bid_writing (primary_focus CV)user-focus-constants.ts:1,4, use-primary-focus.ts:9, search-prompt-cards.tsx:191, organisation-profile-nudge.tsx:18; use-primary-focus.test.ts:36,50, search-prompt-cards.test.tsx, profile-section.test.tsx, browse-cards.spec.ts:204 FLAGGEDPersisted persona CV read from Supabase Auth user_metadata.primary_focus (write at profile-section.tsx:127-134); value-coupled, needs backfill. Labels already ‘Procurement writing’.
bid_discovered (DB CHECK literal)freshness.ts:8,19,102,103, items/[id]/route.ts:455; __tests__/lib/freshness.test.ts:188,201,251 FLAGGEDPersisted lifecycle_type value (squash_baseline.sql:4458 WHERE lifecycle_type='bid_discovered'); TS comparing/validating against it is value-coupled. Named in DEFER.
prior_bid_response (DB CHECK literal)supabase/migrations/20260617130000_squash_baseline.sql:949 (out of TS scope; ZERO TS refs)Persisted CHECK on q_a_extractions.extractor_kind; nothing to rename in TS today. Recorded as a DEFER boundary for future value-coupled TS.
--bid-* (CSS/design tokens)domain-tokens.css:105-140,281-294,396-431 (out of TS scope), app-bundles.ts:181 (bundle-coupled .ts), value-coupled TS literals procurement-workflow.ts:40-55Status-palette CSS custom-property prefix owned by backlog bl-349; coupled to @theme inline LHS, the MCP bundle, and PROCUREMENT_WORKFLOW_COLOURS string values.
bg-bid-*/text-bid-*/border-bid-* (Tailwind classNames)procurement-workflow-indicator.tsx, procurement-list-card.tsx, review-cadence-card.tsx, procurement-workflow.ts:40-55, procurement-outcome.tsx, app/procurement/page.tsx:371Utility classes emitted from --color-bid-*; resolve to nothing if renamed without the --bid-* token sweep (bl-349).
'bid' (legacy workspaces.type alias)tools/workspaces.ts:36,78, use-quick-assign.ts:42, workspaces/route.ts:140 (comment), procurement/route.ts:69 (comment)Persisted/wire-contract alias the DB still emits (args.type==='bid'?'procurement', ws.type!=='bid'); value-coupled until a data migration retires it. NOT the form_type CV KEEP.
app-bundles.ts bid tokens (generated)— (regenerate from mcp-apps/form-dashboard/src/* then bun run build:mcp-apps; never hand-edit)app-bundles.ts:180,340,343,349Verifier-overturned from keep. Source app already renamed to form-dashboard/, constant already FORM_DASHBOARD_HTML; stale minified output flips form-axis on rebuild. Do-not-hand-edit, but it IS pending change → defer, not keep.