constructive-builder
Installation
SKILL.md
Constructive Builder
Assemble a tenant-scoped frontend and prove that it works. This skill orchestrates decisions, installation, integration, and acceptance; constructive-blocks owns registry roots, install plans, source limitations, Console runtime contracts, and local-consumption instructions.
Keep the boundary exact
- Consume an already-provisioned Constructive tenant. Do not provision databases, choose PostgreSQL modules, run a scaffold engine, repair services, or patch
constructive-db. - Use one strict
frontend.composition: a matching preset, the complete Console, the zero-pack Console core, selected Console modules, or individually mounted standalone packs. Builder validates composition rules; Blocks supplies each root and plan. - Derive backend preset eligibility and preset-root matching from the pinned Blocks
backendPresetRoutingcontract.blankhas no preset root and instead permits explicit core/module composition; a custom backend also cannot claim a preset root. The completeconsole-kit-nextjsmay target any preset or custom Constructive tenant because unsupported packs remain explicitly partial or unavailable. - Accept only explicit, secret-free tenant descriptors. Never derive sibling hosts, add operator headers, put credentials in the brief, or treat
_meta/introspection as authorization. - Keep domain routes outside feature packs. Packs own platform capabilities; the application owns product-specific resources and workflows.
- Keep credentials in the session boundary, outside Zustand and props. A host Console session must carry the same
databaseIdas the descriptor and must own its declared CSRF and callback handlers. - Preserve every applicable
sourceLimitationsrecord selected from the pinned composition, feature pack, surface, and runtime mode. Ablockingrecord can never pass;require-mitigationrecords need retained passing evidence for every snapshot requirement. The current Console Data nested-store record is blocking until Blocks unifies Sheets state through the modular Console store, and every Data surface must prove the single-active-SheetsProvidermitigation while locale and logger remain process-wide.
Require executable inputs
Start from the canonical brief and app-brief.md. Require: