{"version":1,"count":379,"records":[{"id":"68a0a8b8-7fe2-44df-99ce-f9a7d70c8043","type":"session","key":"hub_baseline_2026_03_03","value":"HUB baseline (2026-03-03): repo=/home/admin/workspace/hub; prod hub.designcorp.eu -> 127.0.0.1:3002, dev dev.hub.designcorp.eu -> 127.0.0.1:3003. Priority #1 for leadgen/sales. Prod runtime docker compose in /opt/designcorp/hub/prod; dev runtime hub-dev.service/next dev. Admin auth = email+password session cookie hub_admin_session, API fallback x-admin-token. Required env: HUB_OWNER_EMAIL, HUB_ADMIN_PASSWORD, HUB_ADMIN_SESSION_SECRET, HUB_ADMIN_SESSION_MAX_AGE_SEC, HUB_DATABASE_URL. Contact flow: /api/contact with zod validation, honeypot+ts anti-bot, app limiter 5/10m/IP plus nginx edge limit_req; lead persisted to Postgres (leads, lead_events, automation_jobs, app_settings, notification_logs) and fan-out notifications email/telegram/webhook. Templates system has separate storages for block global defaults vs template overrides; key pattern hub.blocks.<block>.defaults and hub.templates.<template>.blocks.<block>; never mix write contours. Operational standards: issue+board required before landing launch, conversion chain Traffic->Landing->Contact->Lead->Follow-up, and checks lint/build/smoke.","confidence":0.92,"sourceRefs":["4c1eed02ab40cc68ded6647dbd3d8be2d010d22b59a298cf9bc869954a8690a1","c3506e52d118a97363816f8f182385c528523a848275fa801df01cf44f010b6d","7aabe46b10404a50359086667ab204c0d725b178f94717c6eee37f2f8e1a2547","190b938f59e96f20046f7f82fa083addbe147d843587cf7cb6eea0d46a6351f1","2f1bdd99abd7207b6015fceedfc18574309b97725ae49ef80c48001a958d79eb"],"owner":"codex","active":true,"createdAt":"2026-03-03T14:08:12.481Z","updatedAt":"2026-03-03T14:08:12.481Z","observedAt":"2026-03-03T14:08:12.481Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d7fd5eef-4298-4a9d-9470-d437ccb27871","type":"profile","key":"designcorp.revenue.priorities","value":"Canonical revenue priorities (2026-03-03): 1) Hub P0 primary cashflow/leadgen, 2) Print P0 transactional revenue, 3) Ad P1 post-stabilization launch, 4) Client P1 outbound multiplier, 5) BuildOS+Beauty P2 MVP pilots, 6) ServerAdmin/Orchestrator/UI P2 later commercialization.","confidence":0.95,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/control-plane/revenue-command-center.md"],"owner":"system","active":true,"createdAt":"2026-03-03T16:09:33.259Z","updatedAt":"2026-03-03T16:09:33.259Z","observedAt":"2026-03-03T16:09:33.259Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"90c79192-a20f-4e36-be3c-56bf1a33d658","type":"procedural","key":"docs.single-source.revenue","value":"Single source of truth for monetization and 30-day execution is /control-plane/revenue-command-center. Conflicting strategy/roadmap files must defer to this page. Update cadence: weekly Monday.","confidence":0.95,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/control-plane/revenue-command-center.md","/home/admin/workspace/docs-designcorp/docs/control-plane/roadmap.md","/home/admin/workspace/docs-designcorp/docs/company/market-strategy.md"],"owner":"system","active":true,"createdAt":"2026-03-03T16:09:33.296Z","updatedAt":"2026-03-03T16:09:33.296Z","observedAt":"2026-03-03T16:09:33.296Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9325f0ad-5b1f-413e-8613-517e713687b0","type":"episodic","key":"hub_landing_sales-content_2026-03-03","value":"Updated HUB sales messaging for landing products. Added a new business-need block on /offers/landing-launch (why landing pages matter, losses without landing, outcomes). Added localized BeautyCoursesPremium proof.why_landing content in ru/en/pl/ua and rendered it in PremiumTemplatePage proof section for beauty-courses.","confidence":0.88,"sourceRefs":["/home/admin/workspace/hub/src/app/[locale]/offers/[slug]/page.tsx","/home/admin/workspace/hub/src/components/templates/premium/PremiumTemplatePage.tsx","/home/admin/workspace/hub/src/messages/ru.json","/home/admin/workspace/hub/src/messages/en.json","/home/admin/workspace/hub/src/messages/pl.json","/home/admin/workspace/hub/src/messages/ua.json"],"owner":"codex","active":true,"createdAt":"2026-03-03T16:54:38.280Z","updatedAt":"2026-03-03T16:54:38.280Z","observedAt":"2026-03-03T16:54:38.280Z","expiresAt":"2026-08-30T16:54:38.281Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"47c2dc9a-4c22-41ef-9fc5-bfd678e82e26","type":"episodic","key":"hub_landing_launch_acquisition_pack_2026-03-03","value":"Created canonical 7-day acquisition playbook for HUB landing-launch promotion, including UTM/intent taxonomy, outbound scripts, Google Search + Meta retarget launch plan, KPI targets, and stop/scale rules. Linked it from projects/hub and control-plane/overview.","confidence":0.9,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/control-plane/hub-landing-launch-acquisition-pack-7d.md","/home/admin/workspace/docs-designcorp/docs/projects/hub.md","/home/admin/workspace/docs-designcorp/docs/control-plane/overview.md"],"owner":"codex","active":true,"createdAt":"2026-03-03T17:19:26.429Z","updatedAt":"2026-03-03T17:19:26.429Z","observedAt":"2026-03-03T17:19:26.429Z","expiresAt":"2026-08-30T17:19:26.429Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"32d131b7-dc98-4334-80a8-6e27daba9127","type":"episodic","key":"hub_landing_launch_links_keywords_seo_audit_2026-03-03","value":"Extended HUB landing launch acquisition pack with ready-to-use UTM links and starter Google Search keyword clusters + negatives. Verified docs page not live yet (404) because deployment runs on push to main in docs-designcorp workflow. SEO audit for https://hub.designcorp.eu/ru/offers/landing-launch: canonical/hreflang, OG/Twitter, robots, sitemap and JSON-LD are present; notable issue is duplicated title suffix ('| Hub Design Corp | Hub Design Corp').","confidence":0.9,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/control-plane/hub-landing-launch-acquisition-pack-7d.md","/home/admin/workspace/docs-designcorp/.github/workflows/deploy-prod.yml","/home/admin/workspace/hub/src/app/[locale]/offers/[slug]/page.tsx","/home/admin/workspace/hub/src/app/[locale]/layout.tsx"],"owner":"codex","active":true,"createdAt":"2026-03-03T17:28:28.874Z","updatedAt":"2026-03-03T17:28:28.874Z","observedAt":"2026-03-03T17:28:28.874Z","expiresAt":"2026-08-30T17:28:28.874Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b8fb8191-a30b-4800-a796-f1aa71c0247b","type":"episodic","key":"hub.constructor.seo-baseline.v1","value":"2026-03-03: Issue #39 closed in hub commit 53c462f. Added template page SEO baseline (canonical+hrelang+OG/Twitter+JSON-LD) and export pipeline SEO smoke step/script with docs checklist updates.","confidence":0.95,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-03T17:37:34.893Z","updatedAt":"2026-03-03T17:37:34.893Z","observedAt":"2026-03-03T17:37:34.893Z","expiresAt":"2026-08-30T17:37:34.894Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"61dbe7fa-a537-4f52-8a70-3adf3bd410e3","type":"episodic","key":"hub.constructor.docs-package.v1","value":"2026-03-03: Issue #40 closed. HUB repo commit 03470bf adds constructor master-plan cross-link package. docs-designcorp commit fd7beb7 adds control-plane pages: hub-constructor-master-plan-v1, hub-figma-sync-contract-v1, hub-export-deploy-orchestration; links added from projects/hub and control-plane docs.","confidence":0.96,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-03T17:37:35.046Z","updatedAt":"2026-03-03T17:37:35.046Z","observedAt":"2026-03-03T17:37:35.046Z","expiresAt":"2027-03-03T17:37:35.046Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"aa080395-5791-4afa-a819-8b191aae5b2b","type":"episodic","key":"client.ux-baseline-v2.2026-03-03","value":"Client DesignCorp UX baseline v2 implemented in app: IA split into /crm (Inbox+Inspector), /leads (Explorer), /operations (batch pipeline actions), plus /crm/prototype preview. Updated visual system with new typography/tokens/responsive/motion and refreshed lead detail page. Local lint/build passed.","confidence":0.92,"sourceRefs":["/home/admin/workspace/client-designcorp/apps/web/src/app/layout.tsx","/home/admin/workspace/client-designcorp/apps/web/src/app/globals.css","/home/admin/workspace/client-designcorp/apps/web/src/app/crm/page.tsx","/home/admin/workspace/client-designcorp/apps/web/src/app/leads/page.tsx","/home/admin/workspace/client-designcorp/apps/web/src/app/operations/page.tsx","/home/admin/workspace/client-designcorp/apps/web/src/app/leads/[id]/page.tsx","/home/admin/workspace/client-designcorp/docs/02-architecture.md","/home/admin/workspace/client-designcorp/docs/05-roadmap.md"],"owner":"codex","active":true,"createdAt":"2026-03-04T00:12:21.690Z","updatedAt":"2026-03-04T00:12:21.690Z","observedAt":"2026-03-04T00:12:21.690Z","expiresAt":"2027-03-04T00:12:21.690Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"81fd165b-efa4-4279-a538-4a0b6176baf1","type":"episodic","key":"docs.client.ux-baseline-v2.sync.2026-03-04","value":"Synchronized Client UX Baseline v2 into docs-designcorp as canonical docs page /control-plane/client-ux-baseline-v2 with links from /projects/client and /control-plane/overview. Docs build passed locally.","confidence":0.93,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/control-plane/client-ux-baseline-v2.md","/home/admin/workspace/docs-designcorp/docs/projects/client.md","/home/admin/workspace/docs-designcorp/docs/control-plane/overview.md"],"owner":"codex","active":true,"createdAt":"2026-03-04T00:18:05.130Z","updatedAt":"2026-03-04T00:18:05.130Z","observedAt":"2026-03-04T00:18:05.130Z","expiresAt":"2027-03-04T00:18:05.130Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1b42e348-473e-4169-b1c6-714808a8ae38","type":"procedural","key":"hub.templates.workbench.system.v1","value":"Canonical UX/system logic document for HUB admin templates is /control-plane/hub-templates-workbench-system-v1 (docs repo file docs/control-plane/hub-templates-workbench-system-v1.md), created 2026-03-04. Use it as source of truth for Build/Theme/Release/Registry IA and P0/P1/P2 roadmap.","confidence":0.91,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/control-plane/hub-templates-workbench-system-v1.md","/home/admin/workspace/hub/src/app/[locale]/admin/templates/page.tsx","/home/admin/workspace/hub/src/components/admin/TemplateSectionsEditor.tsx"],"owner":"system","active":true,"createdAt":"2026-03-04T00:39:45.985Z","updatedAt":"2026-03-04T00:39:45.985Z","observedAt":"2026-03-04T00:39:45.985Z","expiresAt":"2026-08-31T00:39:45.986Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"bad9d83e-51bb-4f96-984e-02e335d3b41c","type":"procedural","key":"hub.templates.smoke.new-template.v1","value":"HUB now has runtime smoke for new template lifecycle at /home/admin/workspace/hub/scripts/smoke-new-template.mjs (run via `pnpm test:smoke:new-template`). It creates a temporary registry template, calls /api/admin/templates/sections-autosave with owner session cookie, validates saved sections (including lead enabled on non-beauty-courses), then cleans up registry and app_settings prefix.","confidence":0.93,"sourceRefs":["/home/admin/workspace/hub/scripts/smoke-new-template.mjs","/home/admin/workspace/hub/package.json"],"owner":"system","active":true,"createdAt":"2026-03-04T08:31:12.371Z","updatedAt":"2026-03-04T08:31:12.371Z","observedAt":"2026-03-04T08:31:12.371Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d671cfdf-643a-49ab-a485-2f820a583b09","type":"episodic","key":"hub.templates.library-preview.rework.2026-03-04","value":"Reworked templates library preview in admin workbench: hover/tap preview is now section-specific without fallback-to-selected-section, and renders a richer mini-layout preview per section variant via TemplateSectionMiniPreview.","confidence":0.9,"sourceRefs":["/home/admin/workspace/hub/src/components/admin/templates-workbench/TemplateSectionMiniPreview.tsx","/home/admin/workspace/hub/src/components/admin/templates-workbench/TemplateLibraryPanel.tsx","/home/admin/workspace/hub/src/components/admin/templates-workbench/useTemplateLibraryPreview.ts","/home/admin/workspace/hub/src/components/admin/TemplateSectionsEditor.tsx"],"owner":"system","active":true,"createdAt":"2026-03-04T08:31:12.391Z","updatedAt":"2026-03-04T08:31:12.391Z","observedAt":"2026-03-04T08:31:12.391Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"80507c40-fda5-4177-981d-cd4c2ae0c1be","type":"procedural","key":"hub.constructor.v2.autonomous-blocks.backlog","value":"2026-03-04: Created canonical V2 backlog for HUB constructor in GitHub Project #9 (DesignCorporation) with epic #58 and tasks #59-#64. Focus: schema-driven autonomous block-sections, inspector generation from manifest, auto-provision settings on add/import, i18n content model, responsive scope layer, and single-source docs+QA gate.","confidence":0.93,"sourceRefs":["https://github.com/DesignCorporation/hub/issues/58","https://github.com/DesignCorporation/hub/issues/59","https://github.com/DesignCorporation/hub/issues/60","https://github.com/DesignCorporation/hub/issues/61","https://github.com/DesignCorporation/hub/issues/62","https://github.com/DesignCorporation/hub/issues/63","https://github.com/DesignCorporation/hub/issues/64","https://github.com/users/DesignCorporation/projects/9"],"owner":"codex","active":true,"createdAt":"2026-03-04T13:39:25.069Z","updatedAt":"2026-03-04T13:39:25.069Z","observedAt":"2026-03-04T13:39:25.069Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"56880e3c-48cc-46c4-bd11-dd719f7d2bc2","type":"episodic","key":"hub.constructor.responsive-overrides-autosave.2026-03-04","value":"Issue #63 implementation committed in hub as df5c5fa: autosave API now accepts blockInstances, provisioning merges/preserves responsive overrides (tablet/mobile), inspector style updates pass responsive scope, canvas supports desktop/tablet/mobile preview and runtime resolver receives responsive scope for block instance rendering.","confidence":0.91,"sourceRefs":["/home/admin/workspace/hub/src/app/api/admin/templates/sections-autosave/route.ts","/home/admin/workspace/hub/src/lib/offers/template-instance-provisioning.ts","/home/admin/workspace/hub/src/components/admin/TemplateSectionsEditor.tsx","/home/admin/workspace/hub/src/components/admin/templates-workbench/TemplateInspectorPanel.tsx","/home/admin/workspace/hub/src/components/admin/templates-workbench/TemplateCanvasPanel.tsx","/home/admin/workspace/hub/src/components/admin/templates-workbench/useTemplateSectionsAutosave.ts","/home/admin/workspace/hub/src/components/templates/premium/PremiumTemplatePage.tsx"],"owner":"system","active":true,"createdAt":"2026-03-04T15:02:28.288Z","updatedAt":"2026-03-04T15:02:28.288Z","observedAt":"2026-03-04T15:02:28.288Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"655f30d5-9365-45a0-857c-6288b22135ed","type":"procedural","key":"hub.constructor.v2.sot-doc.qa-gate","value":"Canonical single-source document for HUB constructor V2 flow and QA gate is docs-designcorp: /control-plane/hub-templates-workbench-system-v1 (repo path docs/control-plane/hub-templates-workbench-system-v1.md), updated 2026-03-04 in commit e8dc874. It defines registry->build->autosave->publish->runtime flow, data contracts (manifest/instance/i18n/responsive), DoD and anti-regression checklist.","confidence":0.92,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/control-plane/hub-templates-workbench-system-v1.md"],"owner":"system","active":true,"createdAt":"2026-03-04T15:33:26.719Z","updatedAt":"2026-03-04T15:33:26.719Z","observedAt":"2026-03-04T15:33:26.719Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"65e8235c-6a4e-400d-8e90-5243b4e0ea73","type":"episodic","key":"lending.launch.march-2026.initial-deploy","value":"2026-03-04: Created standalone lending repo and board, implemented MVP landing with ru/en/pl/ua, lead/events APIs, SEO pack, ads/docs runbooks, pushed main (badaba5), closed issues #1-#9, and deployed domains dev.lending.designcorp.eu -> 127.0.0.1:3201 (lending-dev.service) and lending.designcorp.eu -> 127.0.0.1:3200 (lending-prod.service) via nginx + certbot TLS.","confidence":0.93,"sourceRefs":["https://github.com/DesignCorporation/lending/commit/badaba5","https://github.com/users/DesignCorporation/projects/10","/etc/systemd/system/lending-dev.service","/etc/systemd/system/lending-prod.service","/etc/nginx/sites-available/lending.designcorp.eu"],"owner":"system","active":true,"createdAt":"2026-03-04T16:59:39.022Z","updatedAt":"2026-03-04T16:59:39.022Z","observedAt":"2026-03-04T16:59:39.022Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c9b95cb0-7372-4551-ad6c-52accbb7e884","type":"episodic","key":"lending.ui.redesign.v2.2026-03-04","value":"2026-03-04: Completed visual redesign v2 in lending workspace (unpushed local commit a2b0288). Updated typography pair (Sora + Plus Jakarta Sans), color/token system, atmosphere backgrounds, reveal motion, stronger CTA components, and full landing section layout refresh while keeping lead/events tracking and locale flow intact. Lint/build passed.","confidence":0.91,"sourceRefs":["/home/admin/workspace/lending/src/app/layout.tsx","/home/admin/workspace/lending/src/app/globals.css","/home/admin/workspace/lending/src/components/landing/LandingPageClient.tsx","/home/admin/workspace/lending"],"owner":"system","active":true,"createdAt":"2026-03-04T17:08:03.542Z","updatedAt":"2026-03-04T17:08:03.542Z","observedAt":"2026-03-04T17:08:03.542Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"4521314a-a6d5-4b1e-81ba-30d3ac58f676","type":"procedural","key":"landing.domain-canonicalization.2026-03-05","value":"Canonical domain and repo naming moved to `landing` on 2026-03-05. Active nginx site: /etc/nginx/sites-available/landing.designcorp.eu. Hosts: landing.designcorp.eu -> 127.0.0.1:3200, dev.landing.designcorp.eu -> 127.0.0.1:3201. Legacy hosts lending.designcorp.eu and dev.lending.designcorp.eu must permanently 301 redirect to new domains. Dev unit path fix: /etc/systemd/system/lending-dev.service WorkingDirectory=/home/admin/workspace/landing.","confidence":0.93,"sourceRefs":["/etc/nginx/sites-available/landing.designcorp.eu","/etc/systemd/system/lending-dev.service","/home/admin/workspace/landing"],"owner":"system","active":true,"createdAt":"2026-03-05T13:27:00.423Z","updatedAt":"2026-03-05T13:27:00.423Z","observedAt":"2026-03-05T13:27:00.423Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0f1f01c3-4d35-45b0-9080-d0c42e41879c","type":"episodic","key":"landing.constructor.v1.sprint1.baseline.2026-03-05","value":"Landing constructor V1 bootstrap started in /home/admin/workspace/landing: added Prisma domain schema (Project/Page/SectionDefinition/SectionDefinitionVersion/SectionInstance/PageSnapshot/ProjectDomain/Lead/WebhookOutbox), migration SQL scaffold, CAS ops API (/api/pages/:pageId/ops), draft endpoint, publish/rollback skeleton endpoints, snapshot zod validator, and runtime section registry skeleton with componentRef major-version policy. Lint and build pass.","confidence":0.91,"sourceRefs":["/home/admin/workspace/landing/prisma/schema.prisma","/home/admin/workspace/landing/src/app/api/pages/[pageId]/ops/route.ts","/home/admin/workspace/landing/src/app/api/pages/[pageId]/publish/route.ts","/home/admin/workspace/landing/src/app/api/pages/[pageId]/rollback/route.ts","/home/admin/workspace/landing/src/lib/constructor/runtime-registry.ts"],"owner":"system","active":true,"createdAt":"2026-03-05T13:48:39.487Z","updatedAt":"2026-03-05T13:48:39.487Z","observedAt":"2026-03-05T13:48:39.487Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d159633a-c208-4c99-bed9-e6eea243bf99","type":"procedural","key":"landing.constructor.v1.backlog.github.2026-03-05","value":"Canonical constructor backlog for landing is now tracked in repo issues #10-#15 and added to GitHub Project #10 (DesignCorporation). #10 EPIC, #11 core Prisma domain+versions, #12 ops CAS endpoint, #13 snapshot publish/rollback, #14 runtime registry compatibility, #15 lead DB+outbox baseline.","confidence":0.9,"sourceRefs":["https://github.com/DesignCorporation/landing/issues/10","https://github.com/DesignCorporation/landing/issues/11","https://github.com/DesignCorporation/landing/issues/12","https://github.com/DesignCorporation/landing/issues/13","https://github.com/DesignCorporation/landing/issues/14","https://github.com/DesignCorporation/landing/issues/15","https://github.com/users/DesignCorporation/projects/10"],"owner":"system","active":true,"createdAt":"2026-03-05T13:48:46.044Z","updatedAt":"2026-03-05T13:48:46.044Z","observedAt":"2026-03-05T13:48:46.044Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"2404e8a3-910e-4ad0-8972-de46462aaa51","type":"episodic","key":"landing.constructor.v1.ui-integration.seeded.2026-03-05","value":"Applied Sprint 1 follow-up in landing: provisioned dedicated dev Postgres container `landing-db` on 127.0.0.1:55434, applied migration 20260305140000_constructor_v1_init, added prisma seed (`prisma/seed.mjs`) creating stitch-prototype project/pages and hero.v1 definition version, added bootstrap API (`/api/constructor/bootstrap`), and connected Stitch baseline prototype UI to server draft/ops/publish via `useBuilderStore` with CAS, debounced field ops, and publish action.","confidence":0.9,"sourceRefs":["/home/admin/workspace/landing/prisma/seed.mjs","/home/admin/workspace/landing/src/app/api/constructor/bootstrap/route.ts","/home/admin/workspace/landing/src/lib/constructor/useBuilderStore.ts","/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx"],"owner":"system","active":true,"createdAt":"2026-03-05T14:07:41.766Z","updatedAt":"2026-03-05T14:07:41.766Z","observedAt":"2026-03-05T14:07:41.766Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7e3c41c3-a729-4964-8f1b-2ffba6d7e841","type":"episodic","key":"landing.constructor.v1.sprint1_5.undo-redo.batching.2026-03-05","value":"Implemented Sprint 1.5 in landing prototype: standardized section data contract to data.content/data.style/data.behavior/data.assets, added normalization utilities and backward compatibility, ensured snapshot stores definitionVersionId and canonical data shape, upgraded builder store with debounced field batching (500ms), compacted updateField queue, beforeunload/hidden flush via sendBeacon, and undo/redo stacks based on inverse ops over CAS endpoint. Stitch UI baseline layout preserved while wiring undo/redo controls and content/style field paths to ops API.","confidence":0.9,"sourceRefs":["/home/admin/workspace/landing/src/lib/constructor/section-data.ts","/home/admin/workspace/landing/src/lib/constructor/useBuilderStore.ts","/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx","/home/admin/workspace/landing/src/lib/constructor/snapshot-schema.ts","/home/admin/workspace/landing/src/lib/constructor/draft-ops.ts"],"owner":"system","active":true,"createdAt":"2026-03-05T14:17:50.607Z","updatedAt":"2026-03-05T14:17:50.607Z","observedAt":"2026-03-05T14:17:50.607Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9e9cb56f-c752-4c66-851b-98f1f5b17c2e","type":"episodic","key":"landing.constructor.v1.sprint2.library-canvas-inspector.2026-03-05","value":"Sprint 2 baseline in landing prototype validated: schema-driven library/canvas/inspector wired to CAS ops only. UI addSection now sends addSectionInstance without initialData, server applies definitionVersion.defaults. SectionDefinitionVersion schemas split per component (hero.v1 vs features-grid.v1) in seed. Runtime sections now consume canonical content/style defaults including title/subtitle/background/padding for features and hero. Verified via live API calls: addSectionInstance + moveSectionInstance and resulting draft order persistence with draftRevision increments.","confidence":0.9,"sourceRefs":["/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx","/home/admin/workspace/landing/src/lib/constructor/draft-ops.ts","/home/admin/workspace/landing/prisma/seed.mjs","/home/admin/workspace/landing/src/components/runtime-sections/HeroV1Section.tsx","/home/admin/workspace/landing/src/components/runtime-sections/FeaturesGridV1Section.tsx"],"owner":"system","active":true,"createdAt":"2026-03-05T14:33:10.065Z","updatedAt":"2026-03-05T14:33:10.065Z","observedAt":"2026-03-05T14:33:10.065Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c12f67e9-9bad-4e23-8971-88a746676904","type":"episodic","key":"landing.constructor.v1.sprint2.pr16.2026-03-05","value":"Created branch feat/sprint-2-builder-core and pushed commit 8d75d1c to DesignCorporation/landing. Opened PR #16 with Sprint 2 schema-driven builder core, including screenshots (library/canvas/inspector), P0.1 schema-path fix (styleSchema nested under style, inspector canonical paths content.* and style.*), and confirmed draft format keeps componentRef only under definitionVersion (no duplicated top-level componentRef).","confidence":0.92,"sourceRefs":["https://github.com/DesignCorporation/landing/pull/16","https://github.com/DesignCorporation/landing/commit/8d75d1c"],"owner":"system","active":true,"createdAt":"2026-03-05T14:45:25.445Z","updatedAt":"2026-03-05T14:45:25.445Z","observedAt":"2026-03-05T14:45:25.445Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0a6c815e-4db2-45db-a450-64e047cb8122","type":"episodic","key":"landing.constructor.v1.sprint3_1.leads-outbox.pr17.2026-03-05","value":"Implemented Sprint 3.1 on branch feat/sprint-3-1-leads-outbox-tx (commit 378e78a, PR #17 against feat/sprint-2-builder-core). Added canonical POST /api/leads with validation, context resolve (project/page/instance), behavior.form contract checks, anti-spam (honeypot + cooldown + rate window), IP hashing, and transactional Lead + WebhookOutbox creation. Legacy POST /api/lead now maps payload into canonical flow. Added behavior.form example in seed hero defaults and smoke script scripts/smoke-leads-outbox.mjs validating submit -> lead persisted -> outbox persisted.","confidence":0.93,"sourceRefs":["https://github.com/DesignCorporation/landing/pull/17","https://github.com/DesignCorporation/landing/commit/378e78a","/home/admin/workspace/landing/src/lib/server/lead-intake.ts","/home/admin/workspace/landing/src/app/api/leads/route.ts","/home/admin/workspace/landing/scripts/smoke-leads-outbox.mjs"],"owner":"system","active":true,"createdAt":"2026-03-05T15:12:52.986Z","updatedAt":"2026-03-05T15:12:52.986Z","observedAt":"2026-03-05T15:12:52.986Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7f09954d-255f-462b-95fc-a1f1aec0fc70","type":"procedural","key":"landing.leads.outbox-worker.v1-2026-03-05","value":"Landing Sprint 3.2 worker contract: pick `pending` plus stale `delivering` (TTL via OUTBOX_STALE_LOCK_SEC, default 300), transition through delivering->delivered/dead, never pick disabled. Webhook signature uses HMAC over `eventId + eventType + payload` and headers include x-event-id/x-event-type/x-signature. Lead idempotency scoped by unique (projectId,idempotencyKey).","confidence":0.91,"sourceRefs":["/home/admin/workspace/landing/scripts/outbox-worker.mjs","/home/admin/workspace/landing/scripts/smoke-outbox-worker.mjs","/home/admin/workspace/landing/src/lib/server/lead-intake.ts","https://github.com/DesignCorporation/landing/pull/17"],"owner":"codex","active":true,"createdAt":"2026-03-05T15:48:14.304Z","updatedAt":"2026-03-05T15:48:14.304Z","observedAt":"2026-03-05T15:48:14.304Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"140e37b6-3823-4d37-984a-d5011d3609a3","type":"procedural","key":"landing.domain-runtime-layout.2026-03-05","value":"Canonical runtime layout migrated to landing naming. Prod root: /opt/designcorp/landing/prod with releases/<id>, shared/, and current symlink. Systemd: landing-dev.service (workspace /home/admin/workspace/landing, port 3201) and landing-prod.service (working dir /opt/designcorp/landing/prod/current, env file /opt/designcorp/landing/prod/shared/.env.local, port 3200). Legacy lending-dev/prod services are disabled.","confidence":0.95,"sourceRefs":["/etc/systemd/system/landing-dev.service","/etc/systemd/system/landing-prod.service","/opt/designcorp/landing/prod","/etc/nginx/sites-available/landing.designcorp.eu"],"owner":"codex","active":true,"createdAt":"2026-03-05T16:08:05.591Z","updatedAt":"2026-03-05T16:08:05.591Z","observedAt":"2026-03-05T16:08:05.591Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"df1591fc-f172-4019-b269-21834537ff70","type":"procedural","key":"landing.cicd.health.release-scripts.2026-03-05","value":"Landing repo PR #18 adds /api/health (DB check via Prisma SELECT 1), release scripts scripts/deploy/deploy-release.sh and rollback-release.sh (atomic current symlink switch with health smoke and auto rollback), and GitHub workflows ci.yml + deploy-dev.yml (push develop) + deploy-prod.yml (push main via deploy-release.sh).","confidence":0.9,"sourceRefs":["https://github.com/DesignCorporation/landing/pull/18","/home/admin/workspace/landing/src/app/api/health/route.ts","/home/admin/workspace/landing/scripts/deploy/deploy-release.sh","/home/admin/workspace/landing/.github/workflows/ci.yml"],"owner":"codex","active":true,"createdAt":"2026-03-05T16:17:04.880Z","updatedAt":"2026-03-05T16:17:04.880Z","observedAt":"2026-03-05T16:17:04.880Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"86fe9ed6-9336-4944-866a-ceb062fd8d2e","type":"procedural","key":"landing.deploy.pipeline.stability.2026-03-05","value":"Landing release reliability fixes applied: deploy-release script now runs `pnpm prisma generate` before build and uses health retry loop (HEALTH_ATTEMPTS/HEALTH_DELAY_SEC) to avoid false rollback on transient 502 after restart. CI also runs `pnpm prisma generate` before lint/build. Production currently healthy on gitSha 440963b.","confidence":0.9,"sourceRefs":["/home/admin/workspace/landing/scripts/deploy/deploy-release.sh","/home/admin/workspace/landing/.github/workflows/ci.yml","https://landing.designcorp.eu/api/health"],"owner":"codex","active":true,"createdAt":"2026-03-05T16:34:52.352Z","updatedAt":"2026-03-05T16:34:52.352Z","observedAt":"2026-03-05T16:34:52.352Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9174219c-889d-4e9e-bb82-f9cd4635855d","type":"procedural","key":"landing.issue-creation.approval-policy.2026-03-05","value":"For landing project, agent must not create roadmap/sprint issues without explicit product owner approval in the current thread.","confidence":0.9,"sourceRefs":["user_directive_2026-03-05_chat"],"owner":"codex","active":true,"createdAt":"2026-03-05T17:02:08.625Z","updatedAt":"2026-03-05T17:02:08.625Z","observedAt":"2026-03-05T17:02:08.625Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"475b85d5-381a-4d60-8d61-4b52ff1169fd","type":"procedural","key":"landing.templates.v1.productization.2026-03-05","value":"Landing now has Templates V1 baseline: Prisma models Template/TemplateVersion with immutable versioning over landing.snapshot.v1, API routes GET /api/templates, GET /api/templates/:slug, POST /api/templates/:slug/create-project, public UI routes /{locale}/templates and /{locale}/templates/{slug}, and builder entry /{locale}/builder/{pageId}. Bootstrap route supports pageId/projectId/projectSlug/pageSlug selectors so create-project can open the current constructor flow on any new page. Dev seed now provisions template slug `stitch-launch` version 1 from stitch-prototype baseline.","confidence":0.93,"sourceRefs":["/home/admin/workspace/landing/prisma/schema.prisma","/home/admin/workspace/landing/src/lib/server/templates.ts","/home/admin/workspace/landing/src/app/api/templates/route.ts","/home/admin/workspace/landing/src/app/api/templates/[slug]/route.ts","/home/admin/workspace/landing/src/app/api/templates/[slug]/create-project/route.ts","/home/admin/workspace/landing/src/app/[locale]/templates/page.tsx","/home/admin/workspace/landing/src/app/[locale]/templates/[slug]/page.tsx","/home/admin/workspace/landing/src/app/[locale]/builder/[pageId]/page.tsx","/home/admin/workspace/landing/src/app/api/constructor/bootstrap/route.ts","/home/admin/workspace/landing/prisma/seed.mjs","/home/admin/workspace/landing/docs/templates-domain.md"],"owner":"system","active":true,"createdAt":"2026-03-05T20:42:57.323Z","updatedAt":"2026-03-05T20:42:57.323Z","observedAt":"2026-03-05T20:42:57.323Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"08bcdbbc-810e-4dd4-8346-6ba3ba3b8959","type":"procedural","key":"landing.prisma.shadow-migration.workaround.2026-03-05","value":"`pnpm prisma migrate dev` is currently blocked in landing by legacy migration 20260305153000_sprint3_2_outbox_worker: it adds enum value `disabled` and uses it in the same transactional migration, which breaks shadow DB replay with P3006. For Templates domain on 2026-03-05, migration was applied via manual path: prisma migrate diff --from-url $DATABASE_URL --to-schema-datamodel prisma/schema.prisma --script > migration.sql, then prisma db execute, prisma migrate resolve --applied, and prisma generate. Existing dev/prod DBs are fine; fresh shadow replay remains a known migration debt until the legacy migration strategy is corrected.","confidence":0.94,"sourceRefs":["/home/admin/workspace/landing/prisma/migrations/20260305153000_sprint3_2_outbox_worker/migration.sql","/home/admin/workspace/landing/prisma/migrations/20260305203000_templates_domain_model/migration.sql","/home/admin/workspace/landing/prisma/schema.prisma"],"owner":"system","active":true,"createdAt":"2026-03-05T20:42:57.345Z","updatedAt":"2026-03-05T20:42:57.345Z","observedAt":"2026-03-05T20:42:57.345Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"895e9b77-bc1b-4cc4-8d2f-8d4b775d3105","type":"procedural","key":"landing.ui.canon.builder-shadowless.v1.2026-03-06","value":"Canonical product UI for landing is anchored to the live builder page /{locale} and uses a cool blue/slate system (primary accent #3c83f6) with zero shadows. On 2026-03-06, shadow/ring debt was explicitly removed from builder-related product surfaces: LendingLibraryPrototype, SectionBuilderPrototype, and PagePublishPanel. Tailwind ring utilities are forbidden for canonical product UI because they render via box-shadow. Canonical documentation lives at docs/ui-canon.md.","confidence":0.92,"sourceRefs":["/home/admin/workspace/landing/docs/ui-canon.md","/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx","/home/admin/workspace/landing/src/components/prototype/SectionBuilderPrototype.tsx","/home/admin/workspace/landing/src/components/publish/PagePublishPanel.tsx"],"owner":"codex","active":true,"createdAt":"2026-03-06T10:11:18.897Z","updatedAt":"2026-03-06T10:11:18.897Z","observedAt":"2026-03-06T10:11:18.897Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1f020125-f735-4605-b239-445cdf497abf","type":"procedural","key":"landing.domains.admin-workspace.v1.2026-03-06","value":"Landing Sprint 7 domains baseline is live on develop as of 2026-03-06. ProjectDomain now exposes custom-domain lifecycle fields `verified` and `sslStatus` alongside existing `hostname/type/status`. Admin API routes GET/POST/DELETE `/api/admin/projects/:projectId/domains` support list/add/delete with manual DNS instructions and honest verification states; UI route `/{locale}/admin/projects/{projectId}/domains` is integrated into the unified admin shell. Internal `*.landing.designcorp.eu` subdomains are visible but managed internally and not removable; custom domains remain pending until infra verification/SSL automation exists.","confidence":0.94,"sourceRefs":["/home/admin/workspace/landing/docs/domains-admin.md","/home/admin/workspace/landing/src/lib/server/admin-domains.ts","/home/admin/workspace/landing/src/app/api/admin/projects/[projectId]/domains/route.ts","/home/admin/workspace/landing/src/app/[locale]/admin/projects/[projectId]/domains/page.tsx"],"owner":"system","active":true,"createdAt":"2026-03-06T11:58:39.496Z","updatedAt":"2026-03-06T11:58:39.496Z","observedAt":"2026-03-06T11:58:39.496Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"2ac1a691-117d-4885-98b0-a74b0874dede","type":"procedural","key":"landing.media.storage.shared.v1.2026-03-06","value":"Landing Sprint 8 media baseline uses Prisma metadata plus filesystem binaries in `shared/media`. API routes are POST `/api/media/upload`, GET `/api/media`, DELETE `/api/media/:id`, and GET `/api/media/:id/content`. `MediaAsset` stores metadata in DB, while binary path resolves from `MEDIA_DIR` or falls back to `<repo>/shared/media` in dev and `/opt/designcorp/landing/prod/shared/media` in prod release layout. Uploads currently allow raster image types only (jpeg/png/webp/gif/avif) and default max size is 10 MB via `MEDIA_MAX_FILE_SIZE_BYTES`. `/shared/` is gitignored so runtime uploads do not pollute repository status.","confidence":0.95,"sourceRefs":["/home/admin/workspace/landing/docs/media-storage.md","/home/admin/workspace/landing/src/lib/server/media-storage.ts","/home/admin/workspace/landing/src/app/api/media/upload/route.ts","/home/admin/workspace/landing/prisma/schema.prisma"],"owner":"system","active":true,"createdAt":"2026-03-06T11:58:39.514Z","updatedAt":"2026-03-06T11:58:39.514Z","observedAt":"2026-03-06T11:58:39.514Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ac013d83-a438-4999-964a-71e767efb3b5","type":"procedural","key":"landing.media.builder-hero-picker.v1.2026-03-06","value":"Landing Sprint 8 builder media UI baseline (2026-03-06): `hero.v1` now exposes `assets.heroImage` in SectionDefinitionVersion propsSchema with custom `fieldType: media-image`. Builder inspector renders upload/browse/select controls via BuilderMediaField, writing the selected asset object into draft ops at `assets.heroImage`. Hero runtime reads that asset in builder/template-preview/public modes and can render the selected image while preserving lead-form flow on public routes. Verified on live dev by upload -> ops updateField -> draft readback -> publish -> public HTML render -> cleanup -> republish clean snapshot.","confidence":0.94,"sourceRefs":["/home/admin/workspace/landing/src/components/prototype/BuilderMediaField.tsx","/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx","/home/admin/workspace/landing/src/components/runtime-sections/HeroV1Section.tsx","/home/admin/workspace/landing/prisma/seed.mjs","/home/admin/workspace/landing/docs/media-storage.md"],"owner":"system","active":true,"createdAt":"2026-03-06T12:20:50.868Z","updatedAt":"2026-03-06T12:20:50.868Z","observedAt":"2026-03-06T12:20:50.868Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9d88c980-cbd3-449d-83d7-7ef0d27a0ecb","type":"procedural","key":"landing.ui.tokens.minimal-v1.2026-03-06","value":"Landing Sprint 9 issue #47 established a minimal shared UI token contract on 2026-03-06. Canonical product tokens now live in src/app/globals.css as `--ui-*` variables for spacing (8/16/24/32/48/64/80/96), container (1200 max, 24 horizontal padding, 1000 canvas max), radius (6/10/14/20), typography (display/h1/h2/h3/body/body-sm/caption), and core colors (blue/slate product palette). Admin route-scoped styles in src/app/[locale]/admin/admin.css now bridge to those shared tokens instead of maintaining independent values. Shared `ui-*` helper classes (panel, section, container, buttons, input, eyebrow/meta/title/copy/stat text) are adopted by admin primitives, builder shell/forms, templates surfaces, publish panel, and current runtime sections hero.v1/features-grid.v1.","confidence":0.94,"sourceRefs":["/home/admin/workspace/landing/src/app/globals.css","/home/admin/workspace/landing/src/app/[locale]/admin/admin.css","/home/admin/workspace/landing/src/components/admin/AdminPrimitives.tsx","/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx","/home/admin/workspace/landing/src/components/runtime-sections/HeroV1Section.tsx","/home/admin/workspace/landing/src/components/runtime-sections/FeaturesGridV1Section.tsx","/home/admin/workspace/landing/src/components/publish/PagePublishPanel.tsx","/home/admin/workspace/landing/docs/ui-canon.md"],"owner":"codex","active":true,"createdAt":"2026-03-06T13:06:19.506Z","updatedAt":"2026-03-06T13:06:19.506Z","observedAt":"2026-03-06T13:06:19.506Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"59e10349-8f6d-4a5d-998b-ff7aeaca3842","type":"procedural","key":"landing.runtime.fidelity.parity.v1.2026-03-06","value":"Landing Sprint 9 issue #46 established runtime fidelity baseline on 2026-03-06. Builder canvas no longer renders `hero.v1` through a special-case custom preview; all current sections now flow through the shared runtime registry on builder/template-preview/public surfaces. Canonical runtime tokens are stored in snapshots (`snapshot.tokens`) via DEFAULT_RUNTIME_TOKENS, and both template snapshots and newly published page snapshots carry the same token object (spacing/container/radius/typography/colors/sectionPadding). Hero and features-grid runtime sections resolve container width and vertical padding through the runtime token contract; vertical padding is normalized to the shared spacing scale so legacy values like 72 are snapped to canonical section spacing.","confidence":0.94,"sourceRefs":["/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx","/home/admin/workspace/landing/src/lib/constructor/runtime-tokens.mjs","/home/admin/workspace/landing/src/lib/constructor/publish.ts","/home/admin/workspace/landing/prisma/seed.mjs","/home/admin/workspace/landing/src/components/runtime-sections/HeroV1Section.tsx","/home/admin/workspace/landing/src/components/runtime-sections/FeaturesGridV1Section.tsx","/home/admin/workspace/landing/docs/ui-canon.md"],"owner":"codex","active":true,"createdAt":"2026-03-06T13:16:16.050Z","updatedAt":"2026-03-06T13:16:16.050Z","observedAt":"2026-03-06T13:16:16.050Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9b0b3204-a9c8-412b-8352-218293af8d84","type":"procedural","key":"landing.section-preview.generator.v1.2026-03-06","value":"Landing Sprint 9 issue #48 established an automatic section preview contract on 2026-03-06. Previews are generated from `defaults + runtime component + DEFAULT_RUNTIME_TOKENS`, not from hand-authored mockups. `buildGeneratedSectionPreview()` normalizes defaults and returns `{ data, tokens, mode: 'template-preview' }`. This generated `preview` payload is now included in `/api/constructor/bootstrap` library items and `/api/section-definitions`, and the builder library renders preview cards via SectionLibraryPreview using the same runtime registry as builder/template/public surfaces.","confidence":0.93,"sourceRefs":["/home/admin/workspace/landing/src/lib/constructor/section-preview.ts","/home/admin/workspace/landing/src/app/api/constructor/bootstrap/route.ts","/home/admin/workspace/landing/src/app/api/section-definitions/route.ts","/home/admin/workspace/landing/src/components/prototype/SectionLibraryPreview.tsx","/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx","/home/admin/workspace/landing/docs/section-preview.md"],"owner":"codex","active":true,"createdAt":"2026-03-06T13:19:12.807Z","updatedAt":"2026-03-06T13:19:12.807Z","observedAt":"2026-03-06T13:19:12.807Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"533ecc9e-af3b-46cf-9bde-bdcb0028c9f1","type":"procedural","key":"landing.section-foundations.contract.v1.2026-03-06","value":"Landing Sprint 10 issue #49 established a shared section-authoring foundation on 2026-03-06. Canonical section specs now live in src/lib/constructor/section-specs.mjs and define name/category/componentRef/defaults/propsSchema/styleSchema/preview for current reference sections hero.v1 and features-grid.v1. Prisma seed provisions definition versions from SECTION_SPECS instead of local one-off constants, including stored `preview` JSON in SectionDefinitionVersion. API routes `/api/constructor/bootstrap` and `/api/section-definitions` now expose section preview via stored preview or generated fallback through resolveGeneratedSectionPreview(). This makes future section additions a spec-driven extension instead of bespoke per-section architecture.","confidence":0.94,"sourceRefs":["/home/admin/workspace/landing/src/lib/constructor/section-specs.mjs","/home/admin/workspace/landing/prisma/seed.mjs","/home/admin/workspace/landing/src/lib/constructor/section-preview.ts","/home/admin/workspace/landing/src/app/api/constructor/bootstrap/route.ts","/home/admin/workspace/landing/src/app/api/section-definitions/route.ts","/home/admin/workspace/landing/docs/section-authoring.md"],"owner":"codex","active":true,"createdAt":"2026-03-06T13:23:51.914Z","updatedAt":"2026-03-06T13:23:51.914Z","observedAt":"2026-03-06T13:23:51.914Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e3df2cec-bc9a-4051-89e4-9714a83ab0a8","type":"procedural","key":"landing-next-execution-order","value":"Approved next execution order after issue #55: #56 Custom Domain Provisioning -> #61 Section Builder Audit -> #57 Landing SEO Pack -> #58 Template Visual Polish -> #59 Public Landing Runtime UX -> #60 Project Onboarding Flow. New roadmap issues #56-#66 are created and added to Project #10.","confidence":0.95,"sourceRefs":["https://github.com/DesignCorporation/landing/issues/10","https://github.com/users/DesignCorporation/projects/10/views/1"],"owner":"system","active":true,"createdAt":"2026-03-06T15:28:58.146Z","updatedAt":"2026-03-06T15:28:58.146Z","observedAt":"2026-03-06T15:28:58.146Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"3fb6d4e8-a8f8-4e65-8a03-be55975df0c6","type":"procedural","key":"landing-section-builder-gate","value":"Section Builder V2 implementation issues #62-#66 must not start before #61 Section Builder Audit is completed. Track A is commercial readiness; Track B is section system scalability.","confidence":0.95,"sourceRefs":["https://github.com/DesignCorporation/landing/issues/10","https://github.com/github.com/DesignCorporation/landing/issues/61","https://github.com/DesignCorporation/landing/issues/61"],"owner":"system","active":true,"createdAt":"2026-03-06T15:28:58.164Z","updatedAt":"2026-03-06T15:29:11.943Z","observedAt":"2026-03-06T15:28:58.164Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"751ed99e-d7ff-4601-9fb0-6e40d991a9b1","type":"procedural","key":"landing.custom-domain-provisioning.queue.v1.2026-03-06","value":"Landing issue #56 implemented queued custom-domain provisioning on develop in commit 3cefdcd. App layer now separates verificationStatus (pending/dns_ok/verified/error), sslStatus API stage (none/issuing/active/error mapped from DB), and routingStatus (inactive/active). POST /api/admin/projects/:projectId/domains creates verificationToken and DNS instructions; POST /api/admin/projects/:projectId/domains/:domainId/verify checks TXT _dc-verify.<hostname> and enqueues a shared job instead of executing root commands in the request. Root provisioning is handled by scripts/domains/reconcile-queue.mjs plus systemd path/service installed via scripts/deploy/install-domain-provisioner.sh (dev/prod variants). Runtime/public routing only trusts domains with verificationStatus=verified and routingStatus=active. Delete of active custom domain queues nginx cleanup.","confidence":0.95,"sourceRefs":["/home/admin/workspace/landing/src/lib/server/admin-domains.ts","/home/admin/workspace/landing/src/lib/server/domain-provisioning.ts","/home/admin/workspace/landing/src/app/api/admin/projects/[projectId]/domains/[domainId]/verify/route.ts","/home/admin/workspace/landing/scripts/domains/reconcile-queue.mjs","/home/admin/workspace/landing/scripts/deploy/install-domain-provisioner.sh","/home/admin/workspace/landing/docs/custom-domain-provisioning.md","https://github.com/DesignCorporation/landing/issues/56"],"owner":"codex","active":true,"createdAt":"2026-03-06T15:54:55.173Z","updatedAt":"2026-03-06T15:54:55.173Z","observedAt":"2026-03-06T15:54:55.173Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ba0edc3e-a2fc-449b-91f1-8f56c022388b","type":"procedural","key":"landing.section-builder.audit.v1.2026-03-06","value":"Issue #61 audit completed locally on 2026-03-06 and documented in docs/section-builder-audit.md (commit 09ab8c1). Key finding: /{locale}/section-builder is a static prototype shell only and must not be treated as the current section engine. The real reusable foundation for future Section Builder V2 is the existing section-spec/runtime pipeline: SECTION_SPECS, SectionDefinitionVersion, generated preview payloads, shared runtime registry, and page-level draft ops over structured section data (content/style/behavior/assets plus responsive/localized scopes). layoutTree currently exists only as dead storage in Prisma/seed and bindings do not exist yet. Approved safe sequence remains #62 layout tree contract -> #63 bindings -> #64 advanced settings -> #65 variants -> #66 definition publish flow.","confidence":0.95,"sourceRefs":["/home/admin/workspace/landing/docs/section-builder-audit.md","/home/admin/workspace/landing/src/components/prototype/SectionBuilderPrototype.tsx","/home/admin/workspace/landing/src/lib/constructor/section-specs.mjs","/home/admin/workspace/landing/src/lib/constructor/section-preview.ts","/home/admin/workspace/landing/src/lib/constructor/runtime-registry.ts","/home/admin/workspace/landing/src/lib/constructor/draft-ops.ts","https://github.com/DesignCorporation/landing/issues/61"],"owner":"codex","active":true,"createdAt":"2026-03-06T16:09:07.304Z","updatedAt":"2026-03-06T16:09:07.304Z","observedAt":"2026-03-06T16:09:07.304Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"22dd9723-a4f0-4af0-b058-320cfca2ce84","type":"episodic","key":"landing.template-visual-polish.v1.2026-03-06","value":"Issue #58 implemented locally on 2026-03-06 in commits 3b0a092 and bdaaea3: demo landing pack templates now carry dedicated preview/media assets under public/template-media/*.svg, seed persists Template.previewImage, templates gallery/preview surfaces render preview image banners, and runtime placeholder/meta copy was cleaned so demo templates read as commercial landing outputs rather than builder prototypes. Verified with pnpm lint, pnpm build, live templates smoke, and temporary create-project/publish smoke before cleanup.","confidence":0.92,"sourceRefs":["git:3b0a092","git:bdaaea3","/home/admin/workspace/landing/public/template-media/beauty-salon-glow.svg","/home/admin/workspace/landing/src/lib/templates/demo-pack.mjs","/home/admin/workspace/landing/src/app/[locale]/templates/page.tsx","/home/admin/workspace/landing/src/app/[locale]/templates/[slug]/page.tsx","https://github.com/DesignCorporation/landing/issues/58"],"owner":"system","active":true,"createdAt":"2026-03-06T16:40:49.265Z","updatedAt":"2026-03-06T16:40:49.265Z","observedAt":"2026-03-06T16:40:49.265Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d6201e14-9e62-4b7b-a867-51d99060dcc3","type":"procedural","key":"landing.public-runtime-ux.v1.2026-03-06","value":"Issue #59 implemented in commit e5c3d77. Public landing runtime now uses progressive-enhancement smooth scrolling, shared viewport-based section reveal wrappers for public mode only, and a reusable RuntimeImage helper with eager/high-priority first hero media plus lazy/async lower media. Public routes keep server-rendered HTML and renderer parity with template preview; motion is controlled through runtime motion tokens and disabled cleanly under prefers-reduced-motion. Canonical notes were added to docs/ui-canon.md.","confidence":0.93,"sourceRefs":["git:e5c3d77","/home/admin/workspace/landing/src/components/runtime-sections/RuntimeSectionViewport.tsx","/home/admin/workspace/landing/src/components/runtime-sections/RuntimeImage.tsx","/home/admin/workspace/landing/src/components/templates/TemplateSnapshotRenderer.tsx","/home/admin/workspace/landing/src/lib/constructor/runtime-tokens.mjs","/home/admin/workspace/landing/src/app/globals.css","/home/admin/workspace/landing/docs/ui-canon.md","https://github.com/DesignCorporation/landing/issues/59"],"owner":"system","active":true,"createdAt":"2026-03-06T16:48:52.983Z","updatedAt":"2026-03-06T16:48:52.983Z","observedAt":"2026-03-06T16:48:52.983Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"525a30fb-4189-4747-8da2-8bf9311153a0","type":"episodic","key":"landing.onboarding-flow.v1.2026-03-06","value":"Issue #60 completed. Added first-run onboarding across /[locale]/admin, create-project wizard, project dashboard, builder handoff, and publish panel simplification. Removed misleading prototype shortcuts from admin index, added launch checklist/dashboard handoff, mapped create-project errors to readable text, renamed builder header to Landing Builder, made Draft Preview open the preview route, and collapsed fallback/history under advanced in publish panel. Verified with lint, build, live route checks, and create->dashboard->builder->publish->live smoke. Commit a20ad77 pushed to origin/develop; ci run 22773543172 success; deploy-dev run 22773543197 success.","confidence":0.91,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-06T17:04:12.829Z","updatedAt":"2026-03-06T17:04:12.829Z","observedAt":"2026-03-06T17:04:12.829Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"edd8ce4d-e2e7-4548-9071-4dc22979519c","type":"episodic","key":"landing.seo-pack.verified.2026-03-06","value":"Issue #57 was already implemented before this turn and verified on dev without code changes. Confirmed public metadata on fallback route and canonical host route: canonical points to internal project subdomain, og/twitter tags present, hreflang/x-default present, JSON-LD Organization/WebPage/FAQPage present. Confirmed dev robots.txt returns Disallow:/ and sitemap.xml includes published canonical live URLs plus legal locale routes. No repo changes required.","confidence":0.9,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-06T17:08:25.034Z","updatedAt":"2026-03-06T17:08:25.034Z","observedAt":"2026-03-06T17:08:25.034Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d03edde9-9151-4f99-a54e-a2c33c8838f6","type":"procedural","key":"landing.section-layout-tree.v2.2026-03-06","value":"Issue #62 establishes Section Layout Tree v2 as the canonical authoring blueprint for landing sections. Schema lives in src/lib/constructor/layout-tree.mjs and supports primitives section/container/stack/grid/card/text/image/button/icon/divider with unique node ids, bindingPath leaves, and runtime.strategy=component-runtime-v1 plus styleBindings for backgroundColor/verticalPadding. Section specs now include layoutTree via src/lib/constructor/section-layouts.mjs, seed persists it into SectionDefinitionVersion.layoutTree, and read paths normalize/return it through /api/section-definitions and /api/constructor/bootstrap. The old hardcoded SectionBuilderPrototype is superseded by a read-only SectionBuilderWorkbench, but the route /{locale}/section-builder remains inside the shared AdminShell with canonical header/sidebar/topnav and a dedicated Section Builder nav item. Write-path/editor work still remains for #63-#66.","confidence":0.96,"sourceRefs":["/home/admin/workspace/landing/src/lib/constructor/layout-tree.mjs","/home/admin/workspace/landing/src/lib/constructor/section-layouts.mjs","/home/admin/workspace/landing/src/app/[locale]/section-builder/layout.tsx","/home/admin/workspace/landing/src/components/prototype/SectionBuilderWorkbench.tsx","/home/admin/workspace/landing/src/components/admin/nav.ts","/home/admin/workspace/landing/docs/section-layout-tree.md"],"owner":"codex","active":true,"createdAt":"2026-03-06T17:40:40.104Z","updatedAt":"2026-03-06T17:40:40.104Z","observedAt":"2026-03-06T17:40:40.104Z","expiresAt":null,"supersedes":"be779b16-2af9-4d5d-ac65-a42ce34dcdcd","supersededBy":null,"metadata":{}},{"id":"7572c7fb-d337-4b3c-b7fa-8e031b9f8b1f","type":"procedural","key":"landing.create-project.managed-subdomain.v1.2026-03-06","value":"As of commit 9873ee8 on 2026-03-06, createProjectFromTemplate now automatically upserts the managed internal ProjectDomain for each new project via ensureManagedProjectSubdomain(). New projects created from templates immediately get a verified+active subdomain record (`{projectSlug}.dev.landing.designcorp.eu` on dev, `{projectSlug}.landing.designcorp.eu` on prod) and Domains admin shows it without manual backfill.","confidence":0.95,"sourceRefs":["/home/admin/workspace/landing/src/lib/server/project-domains.ts","/home/admin/workspace/landing/src/lib/server/templates.ts","/home/admin/workspace/landing/docs/manual-landing-flow.md","git:9873ee8"],"owner":"system","active":true,"createdAt":"2026-03-06T22:54:48.842Z","updatedAt":"2026-03-06T22:54:48.842Z","observedAt":"2026-03-06T22:54:48.842Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0d2856d8-8543-4f9a-96ad-22d7b9f15154","type":"procedural","key":"landing.internal-subdomain.ingress-gap.2026-03-06","value":"On 2026-03-06 end-to-end smoke confirmed that host-based runtime for project subdomains works at the app layer (local checks via `http://127.0.0.1:3201/ru` or `:3200/ru` with `Host: {projectSlug}.dev.landing.designcorp.eu` / `{projectSlug}.landing.designcorp.eu`), and fallback public routes work externally. However direct public HTTPS to project subdomains still fails with TLS/SNI (`OpenSSL error: tlsv1 unrecognized name`) because wildcard ingress/TLS for `*.dev.landing.designcorp.eu` and `*.landing.designcorp.eu` is not yet configured. Do not treat internal subdomains as publicly ready until wildcard nginx/cert coverage is finished.","confidence":0.96,"sourceRefs":["/etc/nginx/sites-available/landing.designcorp.eu","/home/admin/workspace/landing/docs/manual-landing-flow.md","curl:https://landing.designcorp.eu/ru/pink-flow-prod","curl:http://127.0.0.1:3200/ru Host:pink-flow-prod.landing.designcorp.eu","git:9873ee8"],"owner":"system","active":true,"createdAt":"2026-03-06T22:54:48.859Z","updatedAt":"2026-03-06T22:54:48.859Z","observedAt":"2026-03-06T22:54:48.859Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b91a0471-0d06-4b14-895e-3acd78093fef","type":"procedural","key":"landing.baseline-page.cleanup.2026-03-08","value":"Issue #81 cleaned the canonical dev baseline page `stitch-prototype/home`. Seed no longer preserves extra smoke sections and no longer includes `test-pink.v1` in the commercial baseline sequence. `pnpm prisma:seed` now rebuilds stitch-prototype pages from scratch using canonical published section versions in order: hero, features-grid, features-list, services, pricing, testimonials, faq, cta, contact-form, footer. Draft revisions are incremented after rebuild, and the `stitch-launch` template snapshot is regenerated from the cleaned RU page.","confidence":0.95,"sourceRefs":["/home/admin/workspace/landing/prisma/seed.mjs","/home/admin/workspace/landing/docs/manual-landing-flow.md","https://github.com/DesignCorporation/landing/issues/81"],"owner":"codex","active":true,"createdAt":"2026-03-08T00:18:19.189Z","updatedAt":"2026-03-08T00:18:19.189Z","observedAt":"2026-03-08T00:18:19.189Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c8b8bb01-66c1-478f-9bba-e03daf46f6ff","type":"procedural","key":"landing.hero.canonical-published-version.2026-03-08","value":"During baseline cleanup on 2026-03-08, latest published `hero.v1` was normalized to canonical version 6 so the library/runtime contract again includes background image and gradient fields (`backgroundImage`, `backgroundGradientPreset`, `backgroundImageSize`, `backgroundImagePosition`) in styleSchema. Baseline pages now pin to that canonical published hero version instead of the stale published hero version that only exposed backgroundColor/verticalPadding.","confidence":0.93,"sourceRefs":["/home/admin/workspace/landing/prisma/seed.mjs","https://dev.landing.designcorp.eu/api/section-definitions?status=published","https://github.com/DesignCorporation/landing/issues/81"],"owner":"codex","active":true,"createdAt":"2026-03-08T00:18:19.208Z","updatedAt":"2026-03-08T00:18:19.208Z","observedAt":"2026-03-08T00:18:19.208Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"069e6013-c404-4eed-b59b-a8d1d63e9888","type":"procedural","key":"landing.builder.block-inspector.foundation.2026-03-08","value":"Landing builder block-editing foundation was stabilized on 2026-03-08 across issues #82-#85. Server draft payloads now always preserve definitionVersion.layoutTree, builder types require layoutTree, and a smoke script validates layoutTree survives bootstrap -> ops -> draft route. Block inspector now uses a primitive-driven control contract and explicit Content/Layout/Style tabs. Core runtime sections were patched to improve runtime node mapping coverage so block selection works across hero/features/services/pricing/testimonials/faq/cta/contact/footer. Follow-up CI/type regressions were resolved in commit 8e37fd4, leaving develop green on both ci and deploy-dev.","confidence":0.93,"sourceRefs":["https://github.com/DesignCorporation/landing/issues/82","https://github.com/DesignCorporation/landing/issues/83","https://github.com/DesignCorporation/landing/issues/84","https://github.com/DesignCorporation/landing/issues/85","/home/admin/workspace/landing/src/lib/constructor/draft-ops.ts","/home/admin/workspace/landing/src/lib/constructor/primitive-node-controls.ts","/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx","/home/admin/workspace/landing/src/components/runtime-sections/runtime-node-props.ts","git:8e37fd4"],"owner":"codex","active":true,"createdAt":"2026-03-08T15:39:45.038Z","updatedAt":"2026-03-08T15:39:45.038Z","observedAt":"2026-03-08T15:39:45.038Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"5f22bd04-5847-41b3-b797-7e6cf7262015","type":"procedural","key":"landing.section-builder.stabilization.v1.2026-03-08","value":"Section Builder stabilization pass (#109-#113) on 2026-03-08 changed the authoring UX baseline: Create Section now uses an explicit Empty vs Preset start mode (no silent preset clone), draft editors use autosave while Publish stays separate, section surface opacity is interpreted as background alpha instead of global section transparency, and the inspector is simplified to a selected-node-first flow with secondary panels collapsed by default. A canonical regression runner now exists at `pnpm test:smoke:section-authoring`, composing definition-parity, appearance-parity, node-style-controls, and block-selection smokes.","confidence":0.94,"sourceRefs":["/home/admin/workspace/landing/src/components/prototype/SectionCreateDialog.tsx","/home/admin/workspace/landing/src/components/prototype/InspectorAutosave.tsx","/home/admin/workspace/landing/src/lib/constructor/section-surface-style.ts","/home/admin/workspace/landing/src/components/prototype/SectionBuilderWorkbench.tsx","/home/admin/workspace/landing/scripts/smoke-section-authoring.mjs","/home/admin/workspace/landing/docs/qa-smoke-checklist.md"],"owner":"system","active":true,"createdAt":"2026-03-08T21:49:15.709Z","updatedAt":"2026-03-08T21:49:15.709Z","observedAt":"2026-03-08T21:49:15.709Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"3d0bcd51-e394-4893-b21d-b3132778a1f7","type":"procedural","key":"landing.project-lifecycle.owner-flow.v1.2026-03-08","value":"Project lifecycle owner flow is now split into archive vs delete. Archive changes Project.status to archived and removes the project from the active admin workspace without deleting related data. Delete physically removes the project and cascades pages, leads, domains, media, and outbox rows via Prisma relations. Protected baseline projects (currently `stitch-prototype`) cannot be archived or deleted; the admin API returns PROJECT_ARCHIVE_FORBIDDEN / PROJECT_DELETE_FORBIDDEN. Admin UI exposes lifecycle actions on project dashboard and project cards, with slug confirmation required for delete.","confidence":0.94,"sourceRefs":["/home/admin/workspace/landing/src/lib/server/admin-projects.ts","/home/admin/workspace/landing/src/app/api/admin/projects/[projectId]/route.ts","/home/admin/workspace/landing/src/components/admin/projects/ProjectLifecycleActions.tsx","/home/admin/workspace/landing/docs/project-lifecycle.md"],"owner":"system","active":true,"createdAt":"2026-03-08T21:53:35.462Z","updatedAt":"2026-03-08T21:53:35.462Z","observedAt":"2026-03-08T21:53:35.462Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"eb3c0494-d5c5-4882-a507-c18647e4193c","type":"procedural","key":"landing.section-definition-lifecycle.owner-flow.v1.2026-03-08","value":"Section definition lifecycle is now split by status. Draft definitions can be deleted; published custom definitions can be deprecated and later restored; protected system definitions (published componentRefs without `.custom.`) cannot be deprecated through owner UI. Deprecated definitions are hidden from the active Section Builder library by default but can be shown via `Show Deprecated`. Existing page instances and published runtime continue working after deprecate because section instances stay pinned to definitionVersionId. Regression smoke command: `pnpm test:smoke:section-definition-lifecycle`.","confidence":0.94,"sourceRefs":["/home/admin/workspace/landing/src/lib/server/section-definitions.ts","/home/admin/workspace/landing/src/app/api/section-definitions/[definitionVersionId]/route.ts","/home/admin/workspace/landing/src/components/prototype/SectionBuilderWorkbench.tsx","/home/admin/workspace/landing/src/components/prototype/SectionDefinitionLifecycleActions.tsx","/home/admin/workspace/landing/scripts/smoke-section-definition-lifecycle.mjs","/home/admin/workspace/landing/docs/section-definition-lifecycle.md"],"owner":"system","active":true,"createdAt":"2026-03-08T21:58:05.352Z","updatedAt":"2026-03-08T21:58:05.352Z","observedAt":"2026-03-08T21:58:05.352Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a77bbbf5-483d-44cf-b403-930209db00cc","type":"procedural","key":"landing.docs-package.docs-designcorp.v1.2026-03-09","value":"Wave 7 for landing completed on 2026-03-09. Canonical docs package now lives in docs-designcorp with project card `/projects/landing`, control-plane source of truth `/control-plane/landing-operating-standard`, and owner manual `/runbooks/landing-owner-operations`. Topology, owners, control-plane overview, projects index, and VitePress sidebar were updated to include landing as a first-class project. Docs repo commits: abd2c3b (revenue baseline cleanup) and 2f55b4e (landing product package). Prod docs deploy run 22860055031 succeeded.","confidence":0.97,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/projects/landing.md","/home/admin/workspace/docs-designcorp/docs/control-plane/landing-operating-standard.md","/home/admin/workspace/docs-designcorp/docs/runbooks/landing-owner-operations.md","/home/admin/workspace/docs-designcorp/docs/control-plane/topology.md","/home/admin/workspace/docs-designcorp/docs/control-plane/owners.md","/home/admin/workspace/docs-designcorp/docs/.vitepress/config.mts","https://github.com/DesignCorporation/docs/actions/runs/22860055031"],"owner":"system","active":true,"createdAt":"2026-03-09T15:09:46.837Z","updatedAt":"2026-03-09T15:09:46.837Z","observedAt":"2026-03-09T15:09:46.837Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e7192208-73f8-4cbe-a671-1f355dfb325b","type":"procedural","key":"landing.mcp-retrieval.docs-sync.v1.2026-03-09","value":"After the landing docs package was added to docs-designcorp on 2026-03-09, knowledge index rebuild succeeded and MCP retrieval now finds `projects/landing`, `control-plane/landing-operating-standard`, and `runbooks/landing-owner-operations`. Validation used rebuild_index plus search_docs/graph_answer queries for landing public/workspace/definition-instance/runtime and confirmed prod/dev docs URLs return 200.","confidence":0.96,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/projects/landing.md","/home/admin/workspace/docs-designcorp/docs/control-plane/landing-operating-standard.md","/home/admin/workspace/docs-designcorp/docs/runbooks/landing-owner-operations.md","https://docs.designcorp.eu/projects/landing","https://docs.designcorp.eu/control-plane/landing-operating-standard","https://docs.designcorp.eu/runbooks/landing-owner-operations"],"owner":"system","active":true,"createdAt":"2026-03-09T15:09:46.892Z","updatedAt":"2026-03-09T15:09:46.892Z","observedAt":"2026-03-09T15:09:46.892Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"62a6274e-3098-418e-a148-a989bc5a097d","type":"procedural","key":"landing.builder.unified-inspector.hero-lab.v1.2026-03-10","value":"On 2026-03-10 landing builder inspector was unified into a single selected-node property panel with collapsible groups and search, replacing the prior Content/Layout/Style tab split. Runtime node style coverage expanded substantially (background alpha separate from element opacity, spacing/size, per-corner radius, per-side border, outline, typography/effects/positioning/raw CSS escape hatches, device-scoped overrides), and runtime style application was normalized to side-specific CSS props to avoid React shorthand warnings. A clean dev baseline reset flow now exists at scripts/reset-single-hero-lab.mjs, provisioning one diagnostic project/template/page with a single custom hero section (`Hero Clean Lab`) whose form subtree is fully represented in layoutTree for selection/editing validation.","confidence":0.92,"sourceRefs":["/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx","/home/admin/workspace/landing/src/lib/constructor/primitive-node-controls.ts","/home/admin/workspace/landing/src/lib/constructor/inspector-control-schema.ts","/home/admin/workspace/landing/src/lib/constructor/node-style-overrides.ts","/home/admin/workspace/landing/src/lib/constructor/section-layouts.mjs","/home/admin/workspace/landing/src/lib/constructor/section-specs.mjs","/home/admin/workspace/landing/src/components/runtime-sections/HeroV1Section.tsx","/home/admin/workspace/landing/scripts/reset-single-hero-lab.mjs"],"owner":"codex","active":true,"createdAt":"2026-03-10T14:45:27.469Z","updatedAt":"2026-03-10T14:45:27.469Z","observedAt":"2026-03-10T14:45:27.469Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"22f1face-191a-4181-8fd5-dac8f0a6b6cf","type":"procedural","key":"stitch_mcp_connection","value":"For Stitch automation in the landing repo, do not use the browser iframe flow. Use the direct MCP endpoint https://stitch.googleapis.com/mcp with HTTP POST JSON-RPC and header X-Goog-Api-Key: $STITCH_TOKEN_API. Token is stored in /home/admin/workspace/landing/.env.local as STITCH_TOKEN_API. Verified live on 2026-03-12 with initialize -> tools/list -> tools/call(create_project) -> tools/call(generate_screen_from_text) -> tools/call(get_screen). Reusable smoke command from repo root: pnpm test:smoke:stitch-mcp. Local runbook: /home/admin/workspace/landing/docs/stitch-mcp-runbook.md. Helper script: /home/admin/workspace/landing/scripts/stitch-mcp-smoke.mjs.","confidence":0.99,"sourceRefs":["/home/admin/workspace/landing/docs/stitch-mcp-runbook.md","/home/admin/workspace/landing/scripts/stitch-mcp-smoke.mjs","/home/admin/tmp/stitch/verify-20260312-112006/summary.json"],"owner":"landing","active":true,"createdAt":"2026-03-12T11:21:38.875Z","updatedAt":"2026-03-12T11:21:38.875Z","observedAt":"2026-03-12T11:21:38.875Z","expiresAt":"2027-03-12T11:21:38.875Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"297d5f32-f786-4c51-8431-c97f2e2e1b54","type":"procedural","key":"movie.workspace.baseline.2026-03-12","value":"Movie workspace baseline as of 2026-03-12: /home/admin/workspace/movie contains only a docs research package under /home/admin/workspace/movie/docs with 10 canvas markdown files covering market research, channel strategy, audience, content strategy, AI tools, video pipeline, automation, growth, monetization, and content factory. No React/Next scaffold or package manifest exists yet. Canonical startup order from the docs is Research -> niche tests -> repeatable pipeline -> channel launch -> scale.","confidence":0.95,"sourceRefs":["/home/admin/workspace/movie/docs/canvas_10_content_factory_system.md","/home/admin/workspace/movie/docs/canvas_1_you_tube_market_research.md","/home/admin/workspace/movie/docs/canvas_7_automation_systems.md"],"owner":"system","active":true,"createdAt":"2026-03-12T17:21:34.976Z","updatedAt":"2026-03-12T17:21:34.976Z","observedAt":"2026-03-12T17:21:34.976Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a2826e53-7abd-4d2d-b858-b264d58c18f1","type":"procedural","key":"movie.dev-runtime.baseline.2026-03-12","value":"Movie dev runtime baseline as of 2026-03-12: /home/admin/workspace/movie is a Next.js docs workspace that reads markdown directly from /home/admin/workspace/movie/docs. Dev service is movie-dev.service, running `corepack pnpm dev` as admin on 127.0.0.1:3211. Nginx site /etc/nginx/sites-available/movie.designcorp.eu proxies https://dev.movie.designcorp.eu to 127.0.0.1:3211 and redirects movie.designcorp.eu to the dev domain until a prod runtime exists. TLS certificate name is movie.designcorp.eu and covers both movie.designcorp.eu and dev.movie.designcorp.eu.","confidence":0.96,"sourceRefs":["/home/admin/workspace/movie/infra/systemd/movie-dev.service","/home/admin/workspace/movie/infra/nginx/movie.designcorp.eu","/etc/systemd/system/movie-dev.service","/etc/nginx/sites-available/movie.designcorp.eu","/home/admin/workspace/movie/src/app/page.tsx"],"owner":"system","active":true,"createdAt":"2026-03-12T17:48:06.450Z","updatedAt":"2026-03-12T17:48:06.450Z","observedAt":"2026-03-12T17:48:06.450Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"61d6259d-ce5e-4554-a384-73741c42b105","type":"procedural","key":"movie.github.baseline.2026-03-12","value":"As of 2026-03-12, movie is a standalone git repository at /home/admin/workspace/movie with remote https://github.com/DesignCorporation/movie (private, default branch main). GitHub Project board `Movie` exists as org project #11. Starter backlog issues are created and added to the board: #6 epic Phase 1, #2 operating standard, #3 niche scoring, #8 audience/personas/brand brief, #4 content engine/pilot scripts, #1 starter AI stack/licensing, #7 production SOP/QA gate, #5 Movie OS V2 workspace, #10 data model/automation architecture, #9 analytics/experiments/monetization baseline. Local backlog source files live in /home/admin/workspace/movie/planning/github-issues.","confidence":0.98,"sourceRefs":["/home/admin/workspace/movie/.git","/home/admin/workspace/movie/planning/github-issues/01-epic-phase-1.md","https://github.com/DesignCorporation/movie","https://github.com/DesignCorporation/movie/issues/6","https://github.com/users/DesignCorporation/projects/11"],"owner":"system","active":true,"createdAt":"2026-03-12T18:05:50.866Z","updatedAt":"2026-03-12T18:05:50.866Z","observedAt":"2026-03-12T18:05:50.866Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"09b9f1e8-99eb-4789-9d8c-05fe3381775d","type":"procedural","key":"movie.operating-standard.v1.2026-03-12","value":"Movie operating standard v1 was created locally on 2026-03-12 in /home/admin/workspace/movie/docs/operating-standard.md and committed in local git commit e6f4fae. The docs loader now supports core markdown docs beyond canvas files, so /docs/operating-standard and /docs/project-roadmap are first-class workspace routes in the Next.js app. The standard defines the canonical execution order research -> niche selection -> audience/brand -> content engine -> tools/SOP -> workspace/data model -> analytics/monetization, plus automation boundaries and Phase 1 deliverables.","confidence":0.97,"sourceRefs":["/home/admin/workspace/movie/docs/operating-standard.md","/home/admin/workspace/movie/src/lib/docs.ts","/home/admin/workspace/movie/docs/project_roadmap.md","git:e6f4fae","https://dev.movie.designcorp.eu/docs/operating-standard"],"owner":"system","active":true,"createdAt":"2026-03-12T18:21:27.536Z","updatedAt":"2026-03-12T18:21:27.536Z","observedAt":"2026-03-12T18:21:27.536Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c0e8e724-dfc9-4edc-8f3e-d3691671435c","type":"profile","key":"movie.owner.main-idea.v1.2026-03-12","value":"Owner main idea for movie (2026-03-12): build original rewatchable animated content centered on strong recurring characters, short episodic cartoon formats, and future franchise/IP potential. Core intuition: cartoons with memorable characters and high rewatch value can be watched repeatedly by kids and families, and successful characters can spread far beyond single videos. Long-term direction is not only YouTube shorts but a pipeline that can grow into longer series, feature-length animation, and broader original animation IP.","confidence":0.98,"sourceRefs":["/home/admin/workspace/movie/docs/main-idea.md","git:83d040a","user_directive_2026-03-12_chat"],"owner":"system","active":true,"createdAt":"2026-03-12T18:40:38.342Z","updatedAt":"2026-03-12T18:40:38.342Z","observedAt":"2026-03-12T18:40:38.342Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"765ab464-7ab0-453f-98d7-7c5c49b9128d","type":"episodic","key":"movie.niche-scoring.v1.2026-03-12","value":"For project movie, the chosen primary niche is dialogue-light 2D slapstick family animation shorts with a recurring duo and minimal dialogue; the chosen backup niche is 2D action-comedy family animation shorts with recurring hero-villain dynamics. The working channel thesis is a channel of short, almost wordless, rewatchable 2D cartoons centered on one original duo, optimized for rewatch value, global comprehension, IP potential, and monetization safety rather than preschool-only reach.","confidence":0.94,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-12T18:53:59.916Z","updatedAt":"2026-03-12T18:53:59.916Z","observedAt":"2026-03-12T18:53:59.916Z","expiresAt":"2026-09-08T18:53:59.916Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a3378759-6847-493f-a218-96de06e8af51","type":"episodic","key":"movie.audience-brand-brief.v1.2026-03-12","value":"For project movie, the audience and brand brief is now fixed. The channel model is family-friendly / all-ages visual comedy rather than preschool-only content. The primary audience cluster is family co-viewing visual comedy. The three key personas are Repeat Watch Explorer (ages 7-12, rewatch-driven), Parent Gatekeeper (ages 28-40, safety and repeatability driven), and Animation Feed Scroller (ages 16-34, shareability and design driven). The brand position is modern classic cartoon: 2D-first, readable silhouettes, minimal dialogue, safe-to-rewatch tone, and no toddler-rhyme/noisy AI-slop identity.","confidence":0.94,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-12T19:00:47.111Z","updatedAt":"2026-03-12T19:00:47.111Z","observedAt":"2026-03-12T19:00:47.111Z","expiresAt":"2026-09-08T19:00:47.111Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9e5f5f06-e1f8-4162-bc55-5afcc2f7807e","type":"episodic","key":"movie.character-world-system.v1.2026-03-12","value":"For project movie, the first pilot-phase IP core is now fixed. The working recurring duo is Pip & Brum. Pip is the small, fast, impulsive chaos trigger who wants shortcuts, buttons, shiny objects, and immediate wins. Brum is the large, procedural, responsible stabilizer who wants order, task completion, and a functioning depot. Their base location is Depot 17, a compact service station with a limited set of reusable zones. The core conflict model is chaos vs procedure, and the episode engine is Trigger -> Pip shortcut -> Brum correction -> escalation -> false win -> payoff. This character system is intended as the basis for the first 30-50 premises and 10 pilot scripts.","confidence":0.95,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-12T19:13:52.642Z","updatedAt":"2026-03-12T19:13:52.642Z","observedAt":"2026-03-12T19:13:52.642Z","expiresAt":"2026-09-08T19:13:52.642Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ec0f39ca-0812-46e3-aa86-11a826a6dcd7","type":"episodic","key":"movie.owner.duo-preference.2026-03-12","value":"Owner reacted positively to the working duo exploration and spontaneously visualized a lemur and sloth pair. A follow-up comparison doc with three options was created. Current ranked options are: 1) lemur + sloth, 2) raccoon + capybara, 3) meerkat + tortoise. Owner preference signal currently leans toward lemur + sloth by intuition.","confidence":0.91,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-12T19:51:59.317Z","updatedAt":"2026-03-12T19:51:59.317Z","observedAt":"2026-03-12T19:51:59.317Z","expiresAt":"2026-09-08T19:51:59.317Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9f84bba0-54a5-426e-81bc-59339ba0a756","type":"episodic","key":"movie.duo-casting.lock.v1.2026-03-12","value":"Owner confirmed that the current pilot-cycle should proceed with the lemur + sloth duo. Alternative species pairings remain valid for later testing, but the current working casting is locked for this iteration. In the role framework, Pip maps to the lemur and Brum maps to the sloth.","confidence":0.97,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-12T20:02:55.506Z","updatedAt":"2026-03-12T20:02:55.506Z","observedAt":"2026-03-12T20:02:55.506Z","expiresAt":"2026-09-08T20:02:55.506Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"17588358-e1ac-4dbb-8aae-597b818a4cda","type":"episodic","key":"movie.series-concepts.v1.2026-03-12","value":"For the approved lemur + sloth duo in Depot 17, the first five series concepts are now fixed. The two primary pilot-series are 'Не трогай это' and 'Почини по инструкции'. Supporting series are 'Тихая смена', 'Блестящая штука', and 'Ложная победа'. These series define the first content-engine layer that will be used to generate 30-50 premises and then 10 pilot scripts.","confidence":0.95,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-12T20:06:06.448Z","updatedAt":"2026-03-12T20:06:06.448Z","observedAt":"2026-03-12T20:06:06.448Z","expiresAt":"2026-09-08T20:06:06.448Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ffe73f71-1e8d-418c-8786-8a7a45bcc3ba","type":"procedural","key":"movie.ts01.operator-worksheet.v1.2026-03-12","value":"TS-01 now has a canonical operator handoff worksheet at /home/admin/workspace/movie/docs/ts-01-operator-worksheet.md, committed in c7c8174. It is the last internal pre-generation layer before external tool execution and covers session header, pre-flight, ref-pack checklist, Firefly board checklist, Runway Pass 1 checklist, rough animatic assembly, human QA gate, and exit criteria. Use it whenever TS-01 is run manually through OpenAI/Firefly/Runway.","confidence":0.96,"sourceRefs":["/home/admin/workspace/movie/docs/ts-01-operator-worksheet.md","/home/admin/workspace/movie/docs/ts-01-production-pack.md","git:c7c8174"],"owner":"system","active":true,"createdAt":"2026-03-12T22:31:53.970Z","updatedAt":"2026-03-12T22:31:53.970Z","observedAt":"2026-03-12T22:31:53.970Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ee162ab3-8364-4d31-bcac-f8171aea09f0","type":"procedural","key":"movie.starter-tool-stack.governance.v2.2026-03-12","value":"Starter tool stack for movie batch 01 was extended in commit c7c8174. Canonical doc /home/admin/workspace/movie/docs/starter-tool-stack.md now includes starter stack, upgrade stack, prompt library structure, character/asset governance, a practical rights matrix for OpenAI/Runway/Firefly/Premiere, and a publish gate rule that every approved shot must retain tool provenance before external release.","confidence":0.95,"sourceRefs":["/home/admin/workspace/movie/docs/starter-tool-stack.md","git:c7c8174"],"owner":"system","active":true,"createdAt":"2026-03-12T22:31:54.003Z","updatedAt":"2026-03-12T22:31:54.003Z","observedAt":"2026-03-12T22:31:54.003Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"674de3e2-aabc-44ff-aac7-73417b2d44b6","type":"procedural","key":"movie.github.p0-wave1.completed.2026-03-12","value":"On 2026-03-12 the first completed P0 issue wave in DesignCorporation/movie was closed after local implementation and validation on dev runtime: issue #2 operating standard, #3 niche scoring, #8 audience/brand brief, #4 content engine + pilot scripts, #7 production SOP, and #1 starter AI stack/licensing. Remaining open backlog after closure: #5 Movie OS V2, #6 Phase 1 epic, #9 analytics/monetization baseline, #10 data model/automation architecture.","confidence":0.97,"sourceRefs":["https://github.com/DesignCorporation/movie/issues/1","https://github.com/DesignCorporation/movie/issues/2","https://github.com/DesignCorporation/movie/issues/3","https://github.com/DesignCorporation/movie/issues/4","https://github.com/DesignCorporation/movie/issues/7","https://github.com/DesignCorporation/movie/issues/8","git:c7c8174"],"owner":"system","active":true,"createdAt":"2026-03-12T22:31:54.024Z","updatedAt":"2026-03-12T22:31:54.024Z","observedAt":"2026-03-12T22:31:54.024Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7a784217-41b1-4abb-9ed6-ec416279fec0","type":"procedural","key":"movie.ts01.operator-run-order.v1.2026-03-12","value":"TS-01 now has a canonical operator runbook at /home/admin/workspace/movie/docs/ts-01-operator-run-order.md. It converts the production pack, ref brief, board brief, and operator worksheet into a single external execution order: local folder bootstrap, OpenAI ref-pack generation, Firefly board assembly, Runway Pass 1 for sc01-sc03, rough animatic assembly, worksheet update, and first-day stop conditions. Use it as the direct handoff before any real generation session.","confidence":0.97,"sourceRefs":["/home/admin/workspace/movie/docs/ts-01-operator-run-order.md","/home/admin/workspace/movie/docs/ts-01-operator-worksheet.md","/home/admin/workspace/movie/docs/ts-01-production-pack.md"],"owner":"system","active":true,"createdAt":"2026-03-12T22:46:17.639Z","updatedAt":"2026-03-12T22:46:17.639Z","observedAt":"2026-03-12T22:46:17.639Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"11eea8f1-960a-41a5-b843-e8cdd2f798e6","type":"procedural","key":"movie.freepik-automation-scaffold.v1.2026-03-13","value":"Movie now has a first API-first Freepik automation scaffold committed locally. Server-side client and protected routes exist for Freepik health, text-to-image task create/list/status, and image-to-video task create/list/status. Auth model: if MOVIE_AUTOMATION_TOKEN is set, routes require Bearer token; otherwise they allow localhost only and reject external calls. Current defaults are flux-kontext-pro for text-to-image with social_story_9_16 and runway-4-5 for image-to-video with 720:1280 duration 5. Canonical setup docs live in /home/admin/workspace/movie/docs/freepik-automation.md and env template in /home/admin/workspace/movie/.env.example.","confidence":0.97,"sourceRefs":["/home/admin/workspace/movie/src/lib/freepik.ts","/home/admin/workspace/movie/src/lib/automation-auth.ts","/home/admin/workspace/movie/src/app/api/automation/freepik/health/route.ts","/home/admin/workspace/movie/docs/freepik-automation.md","/home/admin/workspace/movie/.env.example"],"owner":"system","active":true,"createdAt":"2026-03-13T01:25:51.276Z","updatedAt":"2026-03-13T01:25:51.276Z","observedAt":"2026-03-13T01:25:51.276Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7c52724e-c098-4035-9c8c-7ce44b0ba4ee","type":"procedural","key":"movie.freepik.i2v.local-ref-normalization.v1.2026-03-13","value":"Movie Freepik I2V stable path as of 2026-03-13: do not rely on external authenticated image URLs for Runway 4.5. Preferred workflow is to pass episodeId + episodeRefPath into movie's /api/automation/freepik/image-to-video/tasks route. The route reads a canonical ref from episode 02_refs, normalizes it with sharp to 720x1280 JPEG, wraps it as a data:image/jpeg;base64 URL, submits it to Freepik Runway 4.5, and completed tasks are imported into 04_generations with episode-manifest tracking. Public preview route /api/automation/episodes/{episodeId}/previews/{fileName} serves generated mp4 files for browser review.","confidence":0.97,"sourceRefs":["/home/admin/workspace/movie/src/app/api/automation/freepik/image-to-video/tasks/route.ts","/home/admin/workspace/movie/src/lib/episode-images.ts","/home/admin/workspace/movie/src/app/api/automation/episodes/[episodeId]/previews/[fileName]/route.ts","/home/admin/workspace/movie/docs/freepik-automation.md","git:862277b"],"owner":"system","active":true,"createdAt":"2026-03-13T01:57:16.917Z","updatedAt":"2026-03-13T01:57:16.917Z","observedAt":"2026-03-13T01:57:16.917Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"03567741-2ca8-444e-ab47-639998d039cc","type":"episodic","key":"movie.ts01.first-generated-shots.v1.2026-03-13","value":"On 2026-03-13 movie completed the first real TS-01 generated shots through Freepik Runway 4.5. sc01 and sc02 both reached COMPLETED, were imported into movie_ts01_s01e01/04_generations as movie_ts01_s01e01_sc01_rw45_v01_9x16.mp4 and movie_ts01_s01e01_sc02_rw45_v01_9x16.mp4, and were recorded in movie_ts01_s01e01/episode-manifest.json. Browser preview is available via the new public previews route on dev.movie.designcorp.eu.","confidence":0.96,"sourceRefs":["/home/admin/workspace/movie/movie_ts01_s01e01/episode-manifest.json","/home/admin/workspace/movie/movie_ts01_s01e01/04_generations/movie_ts01_s01e01_sc01_rw45_v01_9x16.mp4","/home/admin/workspace/movie/movie_ts01_s01e01/04_generations/movie_ts01_s01e01_sc02_rw45_v01_9x16.mp4","/home/admin/workspace/movie/src/app/api/automation/episodes/[episodeId]/previews/[fileName]/route.ts","git:862277b"],"owner":"system","active":true,"createdAt":"2026-03-13T01:57:16.940Z","updatedAt":"2026-03-13T01:57:16.940Z","observedAt":"2026-03-13T01:57:16.940Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"64d06b4e-cbb7-4f68-8d6f-ecfd369c8da6","type":"procedural","key":"movie.video-market-map.v1.2026-03-13","value":"Canonical market map for movie video generators and self-hosted video models was created on 2026-03-13 in docs/video-generators-market-map.md and committed in 962aa57. It distinguishes manual subscription UI tools from API pay-per-use tools and self-hosted open models. Current working recommendations: manual subscription tests favor Pika and Google Flow; cheap API shortlist favors Pika API and Luma API; self-hosted research shortlist favors Wan 2.2 TI2V-5B, HunyuanVideo-1.5, LTX-Video, and CogVideoX, but self-hosted is explicitly a later phase after validated style/animatic/prompt library.","confidence":0.96,"sourceRefs":["/home/admin/workspace/movie/docs/video-generators-market-map.md","/home/admin/workspace/movie/docs/project_roadmap.md","git:962aa57"],"owner":"system","active":true,"createdAt":"2026-03-13T12:03:55.553Z","updatedAt":"2026-03-13T12:03:55.553Z","observedAt":"2026-03-13T12:03:55.553Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"91dc2d73-9662-44a5-9298-27b50eed512e","type":"episodic","key":"movie.market-research.refresh.video-generators.2026-03-13","value":"On 2026-03-13 movie research was expanded beyond the initial top-tier tools into a broader official-source market map covering Google Flow/Veo, Pika, Leonardo, Runway, Luma, Freepik, Seedance, MiniMax/Hailuo, HeyGen, Fliki, and self-hosted open video models. The result was saved as a first-class workspace doc to prevent loss of pricing/billing/provider-fit knowledge between sessions.","confidence":0.94,"sourceRefs":["/home/admin/workspace/movie/docs/video-generators-market-map.md","git:962aa57"],"owner":"system","active":true,"createdAt":"2026-03-13T12:03:55.573Z","updatedAt":"2026-03-13T12:03:55.573Z","observedAt":"2026-03-13T12:03:55.573Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"3ea5e124-2f2f-4526-8a35-e7a809847662","type":"procedural","key":"movie.video-stack-decision.v1.2026-03-13","value":"Canonical video stack decision for movie was fixed on 2026-03-13 in docs/video-stack-decision.md and committed in 3be95ec. Current phase policy: image-first + cheap animatic + manual subscription video tests + selective API hero shots. Approved current direction: buy/test Pika Standard first as the main subscription video tool; treat Google Flow Pro as optional second purchase only if Pika underperforms; use Nano Banana or another strong manual image layer for refs/fixes; do not buy Freepik API, Runway API, Veo API, or self-hosted GPU capacity at this phase. Budget policy is manual subscription first, API second, self-hosted later.","confidence":0.97,"sourceRefs":["/home/admin/workspace/movie/docs/video-stack-decision.md","/home/admin/workspace/movie/docs/project_roadmap.md","git:3be95ec"],"owner":"system","active":true,"createdAt":"2026-03-13T12:25:23.378Z","updatedAt":"2026-03-13T12:25:23.378Z","observedAt":"2026-03-13T12:25:23.378Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b5c5c48f-2026-4251-ab29-9ad879bbd0e1","type":"episodic","key":"movie.owner.requested-hard-stack-decision.2026-03-13","value":"After the broader video generator market-map was documented, the owner requested a single hard decision instead of more exploration. Movie now has a dedicated decision doc that narrows the current phase to Pika Standard for manual subscription video tests, Nano Banana-like image layer for refs/fixes, API spend deferred, and self-hosted deferred until later validation.","confidence":0.95,"sourceRefs":["/home/admin/workspace/movie/docs/video-stack-decision.md","git:3be95ec","user_directive_2026-03-13_chat"],"owner":"system","active":true,"createdAt":"2026-03-13T12:25:23.393Z","updatedAt":"2026-03-13T12:25:23.393Z","observedAt":"2026-03-13T12:25:23.393Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e06ee23c-311f-49d3-8369-7db9518d36a8","type":"procedural","key":"movie.leonardo.manual-pack.v1.2026-03-13","value":"Canonical Leonardo manual-first handoff for TS-01 was added on 2026-03-13 in docs/leonardo-ts-01-generation-pack.md and committed in b92474e. It fixes detailed canon for Pip (ring-tailed lemur), Brum (sloth), Depot 17, art direction, a reusable Master Canon Prompt, a common negative prompt, first-session prompts for Pair Sheet, Environment Sheet, and TS-01 sc01-sc03, plus the rule to keep video blocked until stills are approved and to capture successful manual settings via Leonardo Get API Code before building an API adapter.","confidence":0.96,"sourceRefs":["/home/admin/workspace/movie/docs/leonardo-ts-01-generation-pack.md","git:b92474e"],"owner":"movie","active":true,"createdAt":"2026-03-13T19:22:22.177Z","updatedAt":"2026-03-13T19:22:22.177Z","observedAt":"2026-03-13T19:22:22.177Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c32550a4-708e-4951-a300-ae93379e5fd8","type":"procedural","key":"movie.leonardo.foundation-order.v1.2026-03-13","value":"Movie Leonardo workflow was refined on 2026-03-13 in commit 6918719. The canonical manual-first order is now Style Sheet -> Pip character sheet -> Brum character sheet -> Pair Sheet -> Environment Sheet -> TS-01 sc01-sc03 stills -> only then video. The project style anchor must be described as an original stylized 2D family feature-cartoon look, explicitly excluding 3D/CGI/plastic-render language; do not rely on brand-style prompts like Disney style.","confidence":0.96,"sourceRefs":["/home/admin/workspace/movie/docs/leonardo-ts-01-generation-pack.md","/home/admin/workspace/movie/docs/project_roadmap.md","git:6918719"],"owner":"movie","active":true,"createdAt":"2026-03-13T20:25:46.273Z","updatedAt":"2026-03-13T20:25:46.273Z","observedAt":"2026-03-13T20:25:46.273Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b1d27d11-9217-4754-9cfa-694d65dc156f","type":"procedural","key":"movie.leonardo.app-export.baseline.v1.2026-03-13","value":"Movie captured a real Leonardo app-export baseline on 2026-03-13 and saved it in docs/leonardo-ts-01-generation-pack.md, committed in e3350ba. Current working baseline from manual style test uses modelId de7d3faf-762f-48e0-b3b7-9d0ac3a3fcf3 with PHOENIX, presetStyle ILLUSTRATION, alchemy true, photoReal false, promptMagic false, scheduler LEONARDO, width 736, height 1120, num_images 1, guidance_scale 3.5, contrast 3.5, contrastRatio 0.5, and styleUUID 111dc692-d470-4eec-b791-3475abac4c46. Reuse this configuration for next manual/API tests and initially vary only prompt, negative prompt, and optionally seed.","confidence":0.97,"sourceRefs":["/home/admin/workspace/movie/docs/leonardo-ts-01-generation-pack.md","git:e3350ba"],"owner":"movie","active":true,"createdAt":"2026-03-13T21:05:53.529Z","updatedAt":"2026-03-13T21:05:53.529Z","observedAt":"2026-03-13T21:05:53.529Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"812530bb-f22f-468e-81f6-4017f4265955","type":"episodic","key":"movie.leonardo.pip-first-runs.2026-03-13","value":"On 2026-03-13 movie executed the first live Leonardo API character runs for Pip using the captured PHOENIX/ILLUSTRATION baseline. Two images were generated and saved under assets/characters/pip/leonardo: v01 reused the original prompt and remained too CGI/3D-toy-like; v02 switched to a hand-drawn 2D animation model sheet prompt with stronger anti-3D negative terms and produced a visibly better 2D-style result. Exact request/response payloads were saved alongside the images for reuse in future iterations.","confidence":0.93,"sourceRefs":["/home/admin/workspace/movie/assets/characters/pip/leonardo/movie_pip_leonardo_v01_736x1120.jpg","/home/admin/workspace/movie/assets/characters/pip/leonardo/movie_pip_leonardo_v02_736x1120.jpg","/home/admin/workspace/movie/assets/characters/pip/leonardo/movie_pip_leonardo_v01_request.json","/home/admin/workspace/movie/assets/characters/pip/leonardo/movie_pip_leonardo_v02_request.json"],"owner":"movie","active":true,"createdAt":"2026-03-13T21:20:19.903Z","updatedAt":"2026-03-13T21:20:19.903Z","observedAt":"2026-03-13T21:20:19.903Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"60556157-6931-4375-abeb-1a21c890cdeb","type":"episodic","key":"movie.leonardo.brum-first-runs.2026-03-13","value":"On 2026-03-13 movie executed the first live Leonardo API character runs for Brum using the same PHOENIX/ILLUSTRATION baseline as Pip. v01 produced an overly human-worker-like sloth with cargo-style outfit details and even a false nsfw flag in Leonardo metadata; v02 simplified the prompt and improved silhouette/clothing, but still introduced unwanted backpack/utility-pocket details. Exact request/response payloads and images were saved under assets/characters/brum/leonardo for later refinement.","confidence":0.93,"sourceRefs":["/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v01_736x1120.jpg","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v02_736x1120.jpg","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v01_request.json","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v02_request.json"],"owner":"movie","active":true,"createdAt":"2026-03-13T21:24:01.287Z","updatedAt":"2026-03-13T21:24:01.287Z","observedAt":"2026-03-13T21:24:01.287Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"8a588ec5-789a-46b5-b096-16c07c0391f1","type":"procedural","key":"movie.leonardo.character-baseline.v1.2026-03-13","value":"Current Leonardo character-sheet baseline for movie after live tests on 2026-03-13: use Phoenix 1.0 with presetStyle ILLUSTRATION and no styleUUID for cleaner original-character adherence. Cute Animal Characters was cheaper (~$0.0105 vs ~$0.0359 on Phoenix) and more childlike in principle, but in this project it drifted species badly and returned an empty negativePrompt in metadata. For Brum, Phoenix v04 without styleUUID produced the best result so far among v01-v04, removing the backpack-heavy worker look seen earlier and giving a gentler face while preserving sloth identity.","confidence":0.85,"sourceRefs":["/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v03_736x1120.jpg","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v04_736x1120.jpg","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v03_request.json","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v04_request.json","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v03_metadata.json","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v04_metadata.json"],"owner":"movie","active":true,"createdAt":"2026-03-13T21:32:49.176Z","updatedAt":"2026-03-13T21:32:49.176Z","observedAt":"2026-03-13T21:32:49.176Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d61d39d7-a068-47e5-a9c6-931376b36f94","type":"procedural","key":"movie.leonardo.duo-working-baseline.v1.2026-03-13","value":"Current working Leonardo duo baseline as of 2026-03-13 is Pip v04 plus Brum v04, both generated on Phoenix 1.0 with presetStyle ILLUSTRATION, no styleUUID, photoReal false, promptMagic false, and simple hand-drawn 2D character-sheet prompts. Pip v04 fixed the earlier portrait crop and produced a full-body character sheet closer to Brum v04. Use these two images as the current best manual character anchors before attempting pair-sheet or scene generation.","confidence":0.9,"sourceRefs":["/home/admin/workspace/movie/assets/characters/pip/leonardo/movie_pip_leonardo_v04_736x1120.jpg","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v04_736x1120.jpg","/home/admin/workspace/movie/assets/characters/pip/leonardo/movie_pip_leonardo_v04_request.json","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v04_request.json"],"owner":"movie","active":true,"createdAt":"2026-03-13T21:43:43.740Z","updatedAt":"2026-03-13T21:43:43.740Z","observedAt":"2026-03-13T21:43:43.740Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9612058d-5fc1-4ff7-96c9-14a2c3fa2549","type":"episodic","key":"movie.leonardo.pair-first-runs.2026-03-13","value":"On 2026-03-13 movie executed the first Leonardo pair-sheet runs for Pip+Brum on the cleaned Phoenix baseline. v01 stayed too portrait-cropped. v02 achieved a usable full-body duo sheet and is currently the best pair reference for size contrast and shared visual tone, but it still drifted both species slightly (Pip too simplified and Brum too monkey-bear-like with a shirt under the vest). The individual character sheets Pip v04 and Brum v04 remain stronger canonical anchors than the first pair sheet.","confidence":0.9,"sourceRefs":["/home/admin/workspace/movie/assets/characters/duo/leonardo/movie_duo_leonardo_v01_736x1120.jpg","/home/admin/workspace/movie/assets/characters/duo/leonardo/movie_duo_leonardo_v02_736x1120.jpg","/home/admin/workspace/movie/assets/characters/pip/leonardo/movie_pip_leonardo_v04_736x1120.jpg","/home/admin/workspace/movie/assets/characters/brum/leonardo/movie_brum_leonardo_v04_736x1120.jpg"],"owner":"movie","active":true,"createdAt":"2026-03-13T21:46:26.399Z","updatedAt":"2026-03-13T21:46:26.399Z","observedAt":"2026-03-13T21:46:26.399Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1c9ef656-a8cb-4ed7-b545-d3e5230266ab","type":"procedural","key":"movie.leonardo.character-reference-limitations.v1.2026-03-13","value":"Leonardo API live tests on 2026-03-13 showed two practical constraints for movie. First, multiple Character Reference controlnets in one request are rejected with error `Multiple Content Transfer or Character Reference image guidance inputs not supported.` Second, using a single duo sheet as one Character Reference on Phoenix for TS-01 sc01 did not preserve the intended characters and drifted to unrelated subjects, so one-duo-ref is not a reliable substitute for true per-character consistency. For this project, stronger consistency likely requires Custom Elements/LoRA training or a different workflow than prompt-only plus Character Reference.","confidence":0.95,"sourceRefs":["/home/admin/workspace/movie/assets/characters/duo/leonardo/movie_duo_leonardo_v02_metadata.json","/home/admin/workspace/movie/assets/scenes/ts01/leonardo/movie_ts01_sc01_leonardo_v01_duoref_metadata.json"],"owner":"movie","active":true,"createdAt":"2026-03-13T21:56:49.342Z","updatedAt":"2026-03-13T21:56:49.342Z","observedAt":"2026-03-13T21:56:49.342Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c67455a3-50ca-471d-b77d-52987092ce80","type":"procedural","key":"movie.leonardo.custom-elements-dataset-plan.v1.2026-03-13","value":"Movie now has a canonical Leonardo Custom Elements dataset plan committed in a243804 on 2026-03-13. Source of truth is docs/leonardo-custom-elements-dataset-plan.md plus tracked training folder skeleton under assets/training/leonardo/elements/{pip,brum}. The plan fixes separate element training for Pip and Brum only (no duo element yet), recommends 24 approved images per character for v1, defines the dataset composition blocks (rotation, expressions, body attitudes, anatomy-critical poses, outfit consistency, simple prop interaction), sets trigger words pipdcv1 and brumdcv1, and standardizes the raw/selects/approved/square-1024/captions/manifests folder flow. Repo .gitignore now ignores generated asset binaries/json under assets so only training structure and docs are tracked.","confidence":0.97,"sourceRefs":["/home/admin/workspace/movie/docs/leonardo-custom-elements-dataset-plan.md","/home/admin/workspace/movie/assets/training/README.md","/home/admin/workspace/movie/.gitignore","git:a243804"],"owner":"movie","active":true,"createdAt":"2026-03-13T22:04:01.392Z","updatedAt":"2026-03-13T22:04:01.392Z","observedAt":"2026-03-13T22:04:01.392Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ea614111-3648-45e1-b4c6-3861d24c1878","type":"episodic","key":"movie.training.first-item.pip-rotation-front.2026-03-13","value":"First live training-item workflow for movie was exercised on 2026-03-13 for Pip dataset v1 slot `pip_v1_rotation_front_01`. The image was generated via Leonardo on the cleaned Phoenix baseline, saved under assets/training/leonardo/elements/pip/raw, reviewed visually, then promoted only to `selects` (not `approved`) because it matched the style and anatomy reasonably well but drifted into a light 3/4 angle instead of a true front-facing neutral rotation. The manifest at assets/training/leonardo/elements/pip/manifests/dataset-v1.md now records this status and serves as the active checklist for the remaining 23 slots.","confidence":0.94,"sourceRefs":["/home/admin/workspace/movie/assets/training/leonardo/elements/pip/raw/pip_v1_rotation_front_01.jpg","/home/admin/workspace/movie/assets/training/leonardo/elements/pip/selects/pip_v1_rotation_front_01.jpg","/home/admin/workspace/movie/assets/training/leonardo/elements/pip/manifests/dataset-v1.md","git:e026441"],"owner":"movie","active":true,"createdAt":"2026-03-13T22:09:16.001Z","updatedAt":"2026-03-13T22:09:16.001Z","observedAt":"2026-03-13T22:09:16.001Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b31e3333-c639-45ac-9374-110fe55fcfcf","type":"procedural","key":"movie.classic-cartoon-render-spec.v1.2026-03-14","value":"Movie now has a canonical classic-cartoon render spec in /home/admin/workspace/movie/docs/classic-cartoon-render-spec.md, committed locally in 98db751 on 2026-03-14. For Bugs Bunny / Looney Tunes-like visual targets, do not rely on brand-style prompts. The stable prompt language must describe craft traits instead: hand-drawn 2D cel animation frame, strong silhouette, flat cel color, painted geometric background, believable weight, readable key pose, and mid-century theatrical cartoon staging. For Leonardo Phoenix specifically, Character Reference is approximate, multiple character references are not supported for this duo workflow, and Phoenix lacks Edge/Line Art preprocessors; tighter duo consistency therefore requires separate Custom Elements for Pip and Brum rather than prompt-only scene generation.","confidence":0.96,"sourceRefs":["/home/admin/workspace/movie/docs/classic-cartoon-render-spec.md","/home/admin/workspace/movie/docs/leonardo-ts-01-generation-pack.md","git:98db751","https://docs.leonardo.ai/docs/generate-images-using-image-to-image-guidance","https://docs.leonardo.ai/docs/phoenix","https://docs.leonardo.ai/docs/train-custom-element-and-generate-images","https://publishing.cdlib.org/ucpressebooks/view?anchor.id=0&brand=eschol&chunk.id=d0e1093&doc.view=content&docId=ft6q2nb3x1&toc.depth=1"],"owner":"movie","active":true,"createdAt":"2026-03-14T11:43:20.379Z","updatedAt":"2026-03-14T11:43:20.379Z","observedAt":"2026-03-14T11:43:20.379Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"10002f17-b5ad-4955-b92e-075f72a744c5","type":"procedural","key":"movie.leonardo.reference-first-workflow.v1.2026-03-14","value":"Movie now treats Leonardo Google image runs as a separate reference-first workflow. After a good style baseline is found, the stable path is: keep style_id, use 1-3 image references, set prompt_enhance OFF, keep seed fixed, and use a short task prompt such as 'Draw a separate lemur in the same style.' This outperforms long descriptive prompts for same-style follow-up generations. Cleanup and logo/title generation should be split into separate passes instead of mixed in one prompt. The rule is documented in docs/leonardo-ts-01-generation-pack.md and was committed locally in bcbef08 on 2026-03-14.","confidence":0.96,"sourceRefs":["/home/admin/workspace/movie/docs/leonardo-ts-01-generation-pack.md","git:bcbef08","user_live_export_2026-03-14_chat","https://docs.leonardo.ai/docs/nano-banana-pro"],"owner":"system","active":true,"createdAt":"2026-03-14T14:06:53.206Z","updatedAt":"2026-03-14T14:06:53.206Z","observedAt":"2026-03-14T14:06:53.206Z","expiresAt":null,"supersedes":"320277a1-05bd-4c55-bbf8-5b62fe8a607e","supersededBy":null,"metadata":{}},{"id":"246de60f-02dd-44ea-b300-7ae6adbe7f49","type":"procedural","key":"movie.runway.api-baseline.v1.2026-03-15","value":"Runway API baseline for movie was established and validated on 2026-03-15. Officially confirmed and implemented in repo: use Runway text_to_image with up to 3 referenceImages for character keyframes, image_to_video for short motion clips, and optional character_performance/act_two for performance-transfer tasks. Local scripts live under /home/admin/workspace/movie/scripts/runway and accept RUNWAYML_API_SECRET with fallback RUNWAY_API_KEY. Live smoke results now confirm the full path: plain text_to_image works; before credits, ephemeral uploads returned 403 until the account had at least one credit purchase; public HTTPS reference images worked as a workaround; after purchasing credits, local upload-based text_to_image succeeded and gen4.5 image_to_video succeeded for a 2-second smoke clip. Canonical doc: /home/admin/workspace/movie/docs/runway-character-workflow.md. Local commits: 901dda2 and 2815d99.","confidence":0.99,"sourceRefs":["/home/admin/workspace/movie/docs/runway-character-workflow.md","/home/admin/workspace/movie/scripts/runway/create-character-keyframe.mjs","/home/admin/workspace/movie/scripts/runway/create-image-to-video.mjs","git:901dda2","git:2815d99"],"owner":"movie","active":true,"createdAt":"2026-03-15T14:02:01.256Z","updatedAt":"2026-03-15T14:02:01.256Z","observedAt":"2026-03-15T14:02:01.256Z","expiresAt":"2026-09-11T14:02:01.256Z","supersedes":"79c00c53-64e2-44ee-9528-1af3d6fc6f16","supersededBy":null,"metadata":{}},{"id":"71e89c34-2b4f-4c50-84d8-181da282d29d","type":"procedural","key":"movie.character-canon-locked-baseline.v1.2026-03-15","value":"On 2026-03-15 movie locked the owner-approved canon asset baseline for character setup. Canon source files are: Brum /home/admin/workspace/movie/assets/characters/brum/Default_0_1dab6305-5c78-47ad-9f98-395c6908be47_0.png, Pip /home/admin/workspace/movie/assets/characters/pip/Default_0_1654966c-8589-481e-b420-fdec1d5c3d39_0.png, Back /home/admin/workspace/movie/assets/characters/gemini-2.5-flash-image_Remove_Brum_the_sloth_and_Pip_the_lemur_from_the_image-0.jpg, Logo /home/admin/workspace/movie/assets/characters/gemini-2.5-flash-image_убери_все_кроме_логотипа_не_изменяй_его_и_фо-0.jpg. Based on these canon files, locked character refs were established at /home/admin/workspace/movie/assets/characters/locked/movie_brum_ref_front_LOCKED.png, /home/admin/workspace/movie/assets/characters/locked/movie_brum_ref_3q_v01_LOCKED.png, /home/admin/workspace/movie/assets/characters/locked/movie_pip_ref_front_LOCKED.png, and /home/admin/workspace/movie/assets/characters/locked/movie_pip_ref_3q_v01_LOCKED.png. All future Runway scene/duo work should use these locked refs instead of intermediate old Leonardo or intermediate Runway outputs.","confidence":0.98,"sourceRefs":["/home/admin/workspace/movie/docs/character-canon-assets.md","/home/admin/workspace/movie/docs/brum-character-ref-pack.md","/home/admin/workspace/movie/docs/pip-character-ref-pack.md"],"owner":"movie","active":true,"createdAt":"2026-03-15T14:24:02.718Z","updatedAt":"2026-03-15T14:24:02.718Z","observedAt":"2026-03-15T14:24:02.718Z","expiresAt":"2026-09-11T14:24:02.718Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"48bfe830-55a1-49d5-b410-11a82873eb2f","type":"procedural","key":"movie.ts01.edit-first-master-pack.v1.2026-03-16","value":"As of 2026-03-16, TS-01 is governed by an edit-first canonical pack: /home/admin/workspace/movie/docs/ts-01-episode-master.md + /home/admin/workspace/movie/docs/ts-01-shot-timeline.md + /home/admin/workspace/movie/docs/runway-frame-prompt-system.md. Old TS-01 docs (production pack, ref brief, board brief, operator worksheet, operator run order) remain supporting only. Canonical rule: do not generate long Runway scenes first; work by locked beats/timeline and short 2-5s shots, with animatic before expensive video passes.","confidence":0.97,"sourceRefs":["/home/admin/workspace/movie/docs/ts-01-episode-master.md","/home/admin/workspace/movie/docs/ts-01-shot-timeline.md","/home/admin/workspace/movie/docs/runway-frame-prompt-system.md","/home/admin/workspace/movie/docs/ts-01-production-pack.md","/home/admin/workspace/movie/docs/ts-01-operator-run-order.md"],"owner":"movie","active":true,"createdAt":"2026-03-16T21:25:36.429Z","updatedAt":"2026-03-16T21:25:36.429Z","observedAt":"2026-03-16T21:25:36.429Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e64da5ea-16b6-47be-b529-2ecf455caa09","type":"procedural","key":"movie.runway.frame-prompt.short.v1.2026-03-16","value":"Canonical short Runway keyframe prompt system for movie now lives in /home/admin/workspace/movie/docs/runway-frame-prompt-system.md and copy-paste prompt file /home/admin/workspace/movie/prompts/runway/ts01_frame_prompt_short.txt. The local Runway keyframe script defaults were updated to use locked front refs for Pip and Brum from assets/characters/locked and the short base prompt rather than older Leonardo refs.","confidence":0.96,"sourceRefs":["/home/admin/workspace/movie/docs/runway-frame-prompt-system.md","/home/admin/workspace/movie/prompts/runway/ts01_frame_prompt_short.txt","/home/admin/workspace/movie/scripts/runway/create-character-keyframe.mjs","/home/admin/workspace/movie/docs/character-canon-assets.md"],"owner":"movie","active":true,"createdAt":"2026-03-16T21:25:36.452Z","updatedAt":"2026-03-16T21:25:36.452Z","observedAt":"2026-03-16T21:25:36.452Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"554323d1-624f-4110-9fd0-200eb89f74f9","type":"procedural","key":"gmg.static-previews.detached-from-landing.2026-03-17","value":"As of 2026-03-17, GMG workspace contains only the primary site at /home/admin/workspace/gmg/public/gmg-preview served by gmg.landing.designcorp.eu. The former gmg2 and gmg3 preview directories were removed from the project, and nginx hosts gmg2.landing.designcorp.eu and gmg3.landing.designcorp.eu were retired to explicit 410 Gone responses so they no longer serve project content or fall through to a default site.","confidence":0.97,"sourceRefs":["/home/admin/workspace/gmg/README.md","/etc/nginx/sites-available/gmg.landing.designcorp.eu","/etc/nginx/sites-available/gmg2.landing.designcorp.eu","/etc/nginx/sites-available/gmg3.landing.designcorp.eu","/home/admin/workspace/gmg"],"owner":"system","active":true,"createdAt":"2026-03-17T10:42:45.159Z","updatedAt":"2026-03-17T10:42:45.159Z","observedAt":"2026-03-17T10:42:45.159Z","expiresAt":null,"supersedes":"7ce57d06-6797-4df8-861c-73cf4686c7d9","supersededBy":null,"metadata":{}},{"id":"7220c65a-fc69-4428-8670-de343ec294d8","type":"procedural","key":"gmg.repo-docs-baseline.2026-03-17","value":"As of 2026-03-17, GMG has a private GitHub repository at https://github.com/DesignCorporation/gmg with origin configured to https://github.com/DesignCorporation/gmg.git and default branch main. Local repo /home/admin/workspace/gmg was pushed to origin/main with commits 4716113 (standalone repo baseline) and 938a545 (record github remote). Central docs for GMG were pushed from docs-designcorp in commit 702b6b9 and docs deployment run 23190679220 completed successfully on main. Current live model remains a static site served directly by nginx from /home/admin/workspace/gmg/public/gmg-preview on gmg.landing.designcorp.eu.","confidence":0.98,"sourceRefs":["https://github.com/DesignCorporation/gmg","git:938a545","git:4716113","git:702b6b9","/home/admin/workspace/gmg/README.md","/home/admin/workspace/gmg/docs/project-overview.md","/home/admin/workspace/docs-designcorp/docs/projects/gmg.md","/home/admin/workspace/docs-designcorp/docs/runbooks/gmg-site-operations.md","gh:run/23190679220"],"owner":"system","active":true,"createdAt":"2026-03-17T10:53:58.894Z","updatedAt":"2026-03-17T10:53:58.894Z","observedAt":"2026-03-17T10:53:58.894Z","expiresAt":null,"supersedes":"acb4f641-5836-423f-bcec-47d658293301","supersededBy":null,"metadata":{}},{"id":"6d2a5971-452c-430d-a932-0a2a02570402","type":"procedural","key":"gmg.client-direction.main-site-redesign.2026-03-17","value":"On 2026-03-17 GMG moved from contest win into a follow-up redesign lead for the main corporate website. Client direction: preserve the current webmap and core site logic as the baseline, focus on visual refresh / skin update, and keep structural changes limited to roughly 15-20% unless clearly justified. Client asked for pricing model (fixed vs hourly), timeline, phases, collaboration process, required materials/access, and approval workflow. Recommended internal stance prepared in gmg docs: fixed-fee primary offer with hourly fallback, 3-5 week design phase, staged process (audit -> visual direction -> key templates -> refinement -> handoff), and emphasis on controlled B2B redesign rather than full structural reinvention.","confidence":0.97,"sourceRefs":["/home/admin/workspace/gmg/docs/contest-brief-and-client-followup-2026-03-17.md","/home/admin/workspace/gmg/docs/proposal-v1-2026-03-17.md","git:36d520c","user_directive_2026-03-17_chat"],"owner":"system","active":true,"createdAt":"2026-03-17T11:03:45.203Z","updatedAt":"2026-03-17T11:03:45.203Z","observedAt":"2026-03-17T11:03:45.203Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"48b3d0a4-2343-4610-abcb-2535514b5d20","type":"episodic","key":"gmg.live-site-scope-audit.2026-03-17","value":"Initial audit of https://graphenemg.com on 2026-03-17 found 59 sitemap pages, 277 posts, and about 36 relevant public URLs after filtering legacy/member/shop pages. Design scope should be estimated as roughly 8-10 template families rather than by raw URL count. Commercially, skin-refresh scope can start around USD 1500-1900, while broader corporate coverage moves into USD 2200-3000+ depending on included template families and special pages.","confidence":0.88,"sourceRefs":["/home/admin/workspace/gmg/docs/site-audit-and-scope-estimate-2026-03-17.md","/home/admin/workspace/gmg/docs/proposal-v1-2026-03-17.md"],"owner":"Codex","active":true,"createdAt":"2026-03-17T11:21:10.290Z","updatedAt":"2026-03-17T11:21:10.290Z","observedAt":"2026-03-17T11:21:10.290Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"450091e8-0b25-414b-90ab-4c0beaeb3ffd","type":"procedural","key":"landing.v2.refactor.backlog.github.2026-03-17","value":"On 2026-03-17 the canonical Landing V2 refactor backlog was created in DesignCorporation/landing and attached to GitHub Project #10. Canonical epic is issue #164, with execution issues #165-#170 and #181-#185. Malformed duplicate issues #171-#180 were closed as duplicates and must not be used for planning or execution.","confidence":0.96,"sourceRefs":["https://github.com/DesignCorporation/landing/issues/164","https://github.com/DesignCorporation/landing/issues/165","https://github.com/DesignCorporation/landing/issues/166","https://github.com/DesignCorporation/landing/issues/167","https://github.com/DesignCorporation/landing/issues/168","https://github.com/DesignCorporation/landing/issues/169","https://github.com/DesignCorporation/landing/issues/170","https://github.com/DesignCorporation/landing/issues/181","https://github.com/DesignCorporation/landing/issues/182","https://github.com/DesignCorporation/landing/issues/183","https://github.com/DesignCorporation/landing/issues/184","https://github.com/DesignCorporation/landing/issues/185","https://github.com/users/DesignCorporation/projects/10"],"owner":"codex","active":true,"createdAt":"2026-03-17T11:36:21.096Z","updatedAt":"2026-03-17T11:36:21.096Z","observedAt":"2026-03-17T11:36:21.096Z","expiresAt":"2026-09-13T11:36:21.096Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"4bb46739-5bc3-4926-8349-a7955b7d9f64","type":"procedural","key":"landing.editor-performance-baseline.v2.2026-03-17","value":"On 2026-03-17 issue #166 established the canonical editor performance baseline for landing. The canonical perf fixture is stitch-prototype/home (locale ru by default), with mutation flows executed on a temporary project created from the system template stitch-launch to avoid mutating the baseline. scripts/smoke-editor-performance.mjs now measures both latency and payload size: baselineBootstrapResponseBytes plus blockSelection/autosave ops request/response bytes. Default budgets are builderRouteMs<=2000, sectionBuilderRouteMs<=5000, bootstrapMs<=1500, blockSelectionFlowMs<=3000, autosaveFlowMs<=3000, publishFlowMs<=5000, bootstrap payload<=250000 bytes, ops response payload<=100000 bytes. After restoring the full dev baseline, the measured reference run on dev was bootstrapMs 361-450 ms, builderRouteMs 154 ms, sectionBuilderRouteMs 648-860 ms, blockSelectionFlowMs 415-425 ms, autosaveFlowMs 202-216 ms, publishFlowMs 311-320 ms, baselineBootstrapResponseBytes 172586, ops response bytes about 70061-70114.","confidence":0.97,"sourceRefs":["/home/admin/workspace/landing/scripts/smoke-editor-performance.mjs","/home/admin/workspace/landing/docs/editor-performance-baseline.md","/home/admin/workspace/landing/docs/editor-stability-baseline.md","/home/admin/workspace/landing/docs/dev-baseline-reset.md","https://github.com/DesignCorporation/landing/issues/166"],"owner":"codex","active":true,"createdAt":"2026-03-17T11:59:32.383Z","updatedAt":"2026-03-17T11:59:32.383Z","observedAt":"2026-03-17T11:59:32.383Z","expiresAt":"2026-09-13T11:59:32.383Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0445dd82-3446-4fc4-9ee7-686825f0fa6a","type":"procedural","key":"landing.bootstrap-contract.slimmed.v1.2026-03-17","value":"On 2026-03-17 issue #167 slimmed the landing bootstrap contract. `/api/constructor/bootstrap` now returns only bootstrap context plus `pageDraft`; it no longer returns published library items. Builder library is now loaded separately from `/api/section-definitions?status=published&detail=summary`, which returns only summary fields needed by the builder left rail and preview cards (`definitionVersionId`, `definitionId`, `name`, `category`, `status`, `componentRef`, `version`, `layoutTree`, `preview`, `protected`, `createdAt`). Builder page draft transport was also slimmed by removing `definitionVersion.defaults` from bootstrap/draft/ops responses via shared serializer `src/lib/server/builder-draft.ts`. On the canonical stitch-prototype/home fixture, baseline bootstrap payload dropped from 172586 bytes to 60720 bytes (~64.8% smaller), and full-draft ops responses dropped from ~70061-70114 bytes to ~60634-60687 bytes (~13.4-13.5% smaller).","confidence":0.97,"sourceRefs":["/home/admin/workspace/landing/src/app/api/constructor/bootstrap/route.ts","/home/admin/workspace/landing/src/app/api/section-definitions/route.ts","/home/admin/workspace/landing/src/lib/server/section-definitions.ts","/home/admin/workspace/landing/src/lib/server/builder-draft.ts","/home/admin/workspace/landing/src/lib/constructor/useBuilderStore.ts","/home/admin/workspace/landing/docs/editor-performance-baseline.md","https://github.com/DesignCorporation/landing/issues/167"],"owner":"codex","active":true,"createdAt":"2026-03-17T12:14:27.149Z","updatedAt":"2026-03-17T12:14:27.149Z","observedAt":"2026-03-17T12:14:27.149Z","expiresAt":"2026-09-13T12:14:27.149Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"34f4e5b1-5670-4bb7-bba0-524352181baf","type":"procedural","key":"gmg.deliverable-guidance","value":"For the current GMG main-site redesign, the recommended default deliverable is Figma with structured reusable components, desktop/mobile layouts, and Elementor implementation notes. The current live site is WordPress + Elementor. Raw HTML should be positioned only as an optional extra for selected key pages because neither Figma nor raw HTML is a direct production import path into Elementor; the implementation team still needs to rebuild inside WordPress/Elementor.","confidence":0.9,"sourceRefs":["/home/admin/workspace/gmg/docs/site-audit-and-scope-estimate-2026-03-17.md","https://graphenemg.com/","https://elementor.com/help/import-export-kit/","https://elementor.com/help/website-migration-service-what-isnt-included/"],"owner":"Codex","active":true,"createdAt":"2026-03-17T12:55:54.985Z","updatedAt":"2026-03-17T12:55:54.985Z","observedAt":"2026-03-17T12:55:54.985Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"53647b97-37c1-40c5-9dd5-f13503caf117","type":"procedural","key":"landing.builder.state-model.v1.2026-03-17","value":"On 2026-03-17 issue #169 split landing builder state into bounded slices. `useBuilderStore()` is now composed from `draftEntities`, `libraryCatalog`, `history`, and `networkMeta` plus a single action surface (`applyOps`, `scheduleOps`, `flushScheduledOps`, `reloadDraft`, `publishDraft`, `undo`, `redo`). `draftEntities` now keeps normalized page meta plus `sectionOrder` and `sectionInstancesById`, with derived `draft` for consumers. `useBuilderShellController()` no longer owns one monolithic local state block; selection state lives in `useBuilderSelectionState`, while drag/publish/filter/viewport/preview UI state lives in `useBuilderUiState`. Heavy builder shells `BuilderCanvasShell`, `BuilderLeftRail`, and `BuilderRightRail` are memoized, and the inspector node is memoized in `LendingLibraryPrototype`, so save-status churn and library refreshes do not force unnecessary canvas/inspector rerenders when their props are unchanged. Verified on dev with lint, build, smoke:block-selection, smoke:editor-performance, and smoke:editor-stability.","confidence":0.97,"sourceRefs":["/home/admin/workspace/landing/src/lib/constructor/useBuilderStore.ts","/home/admin/workspace/landing/src/lib/constructor/builder-store-slices.ts","/home/admin/workspace/landing/src/lib/constructor/builder-store-helpers.ts","/home/admin/workspace/landing/src/components/prototype/builder/useBuilderSelectionState.ts","/home/admin/workspace/landing/src/components/prototype/builder/useBuilderUiState.ts","/home/admin/workspace/landing/src/components/prototype/builder/useBuilderShellController.ts","/home/admin/workspace/landing/src/components/prototype/LendingLibraryPrototype.tsx","/home/admin/workspace/landing/src/components/prototype/builder/BuilderCanvasShell.tsx","/home/admin/workspace/landing/src/components/prototype/builder/BuilderLeftRail.tsx","/home/admin/workspace/landing/src/components/prototype/builder/BuilderRightRail.tsx","/home/admin/workspace/landing/docs/builder-state-model.md","https://github.com/DesignCorporation/landing/issues/169"],"owner":"codex","active":true,"createdAt":"2026-03-17T13:01:58.650Z","updatedAt":"2026-03-17T13:01:58.650Z","observedAt":"2026-03-17T13:01:58.650Z","expiresAt":"2026-09-13T13:01:58.650Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6a4c99b4-d23f-45e8-ad94-ed69bd42e0d1","type":"procedural","key":"landing.template-authoring-lifecycle.v1.2026-03-17","value":"Landing templates now use Template as mutable owner-facing draft metadata and TemplateVersion as the only published immutable snapshot. Owner flow: POST /api/templates creates custom draft metadata, PATCH /api/templates/:slug updates metadata, POST /api/templates/:slug/publish builds the next TemplateVersion from a selected Page draft, GET /api/templates/:slug returns latestVersion plus version history, create-project continues to use only latest published TemplateVersion. UI path: /[locale]/templates/create -> /[locale]/templates/[slug] authoring panel -> publish -> preview/use/create-project. Project dashboard links to template authoring via /templates/create?sourcePageId=<primaryPageId>.","confidence":0.93,"sourceRefs":["/home/admin/workspace/landing/src/lib/server/templates.ts","/home/admin/workspace/landing/src/app/api/templates/route.ts","/home/admin/workspace/landing/src/app/api/templates/[slug]/publish/route.ts","/home/admin/workspace/landing/src/app/[locale]/templates/create/page.tsx","/home/admin/workspace/landing/src/app/[locale]/templates/[slug]/page.tsx"],"owner":"codex","active":true,"createdAt":"2026-03-17T14:24:24.269Z","updatedAt":"2026-03-17T14:24:24.269Z","observedAt":"2026-03-17T14:24:24.269Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0c4da539-0d09-4f43-9e78-470078942547","type":"episodic","key":"landing.issue182.verify.2026-03-17","value":"Issue #182 template authoring and publish lifecycle was verified on 2026-03-17 with pnpm lint, pnpm build, BASE_URL=https://dev.landing.designcorp.eu LOCALE=ru pnpm test:smoke:template-lifecycle, and BASE_URL=https://dev.landing.designcorp.eu LOCALE=ru pnpm test:smoke:launch. Launch smoke had to be updated from legacy test-pink.v1 expectation to current stitch-launch baseline by mutating hero.v1 instead.","confidence":0.96,"sourceRefs":["/home/admin/workspace/landing/scripts/smoke-template-lifecycle.mjs","/home/admin/workspace/landing/scripts/smoke-project-launch.mjs","/home/admin/workspace/landing/docs/template-lifecycle.md"],"owner":"codex","active":true,"createdAt":"2026-03-17T14:24:24.292Z","updatedAt":"2026-03-17T14:24:24.292Z","observedAt":"2026-03-17T14:24:24.292Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"260c44ee-f7d8-4cd3-a04b-337bec990cd1","type":"episodic","key":"landing.main-rollout.v2-owner-delivery.2026-03-17","value":"On 2026-03-17 landing develop commit 64dc19e (Landing V2 owner delivery: issues #183-#185 plus review scaffolding) was merged into main as merge commit 4d4f0bf and pushed to origin/main. Local verification in clean worktree /home/admin/workspace/landing-main passed with `pnpm install --frozen-lockfile`, `pnpm prisma generate`, and `pnpm build`. GitHub Actions for the main push completed successfully: ci run 23206445840 and deploy-prod run 23206445847.","confidence":0.96,"sourceRefs":["git:4d4f0bf","git:64dc19e","gh:run/23206445840","gh:run/23206445847","/home/admin/workspace/landing-main"],"owner":"codex","active":true,"createdAt":"2026-03-17T17:04:05.106Z","updatedAt":"2026-03-17T17:04:05.106Z","observedAt":"2026-03-17T17:04:05.106Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"643cd4fb-90ba-468c-a978-c717e8ea6759","type":"procedural","key":"landing.prod-deploy.temp-main-worktree.2026-03-17","value":"As of 2026-03-17, landing prod deploy no longer depends on a permanent /home/admin/workspace/landing-main checkout. GitHub workflow .github/workflows/deploy-prod.yml now runs on push to main, creates a temporary detached worktree from /home/admin/workspace/landing at origin/main, runs scripts/deploy/deploy-release.sh from that temporary checkout, and removes it on exit. Canonical steady-state layout is now: dev workspace /home/admin/workspace/landing and prod runtime /opt/designcorp/landing/prod/current; no permanent extra main checkout is required.","confidence":0.98,"sourceRefs":["/home/admin/workspace/landing/.github/workflows/deploy-prod.yml","/home/admin/workspace/landing/README.md","/home/admin/workspace/docs-designcorp/docs/control-plane/landing-operating-standard.md","git:c39530f","git:7cc23b6","git:5a2fc2d"],"owner":"codex","active":true,"createdAt":"2026-03-17T17:59:26.759Z","updatedAt":"2026-03-17T17:59:26.759Z","observedAt":"2026-03-17T17:59:26.759Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"4274bcf5-3cab-4388-b358-6029a2b8f966","type":"episodic","key":"gmg.wordpress-preview-deployed.2026-03-18","value":"On 2026-03-18 a dedicated WordPress + Elementor preview stack was deployed for GMG without touching the existing static live host. Host: wp.gmg.landing.designcorp.eu, TLS issued via certbot, WordPress running through nginx reverse proxy to 127.0.0.1:3212, Elementor active, Hello Elementor theme active, preview protected by basic auth.","confidence":0.92,"sourceRefs":["/home/admin/workspace/gmg/docs/runbook.md","/home/admin/workspace/docs-designcorp/docs/runbooks/gmg-site-operations.md"],"owner":"Codex","active":true,"createdAt":"2026-03-18T11:58:11.100Z","updatedAt":"2026-03-18T11:58:11.100Z","observedAt":"2026-03-18T11:58:11.100Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6b244462-f741-4260-bfa1-2bc21bfe19d6","type":"procedural","key":"gmg.wordpress-preview-operations","value":"GMG WordPress preview at https://wp.gmg.landing.designcorp.eu now runs with a versioned starter theme workflow. Theme source lives in /home/admin/workspace/gmg/deploy/wordpress/themes/gmg-starter, runtime mount lives in /opt/designcorp/gmg/prod/themes/gmg-starter, and the supported apply command is /home/admin/workspace/gmg/deploy/wordpress/apply-theme.sh. The script syncs the theme into runtime, refreshes docker compose, recreates the wordpress service, and activates gmg-starter with Primary Navigation and Product Navigation assigned to theme locations. Theme edits must be done in git, not inside the container.","confidence":0.95,"sourceRefs":["/home/admin/workspace/gmg/docs/project-overview.md","/home/admin/workspace/gmg/docs/runbook.md","/home/admin/workspace/gmg/deploy/wordpress/apply-theme.sh"],"owner":"system","active":true,"createdAt":"2026-03-18T12:39:06.178Z","updatedAt":"2026-03-18T12:39:06.178Z","observedAt":"2026-03-18T12:39:06.178Z","expiresAt":null,"supersedes":"991eecaf-1f97-488f-9aa4-1d32446798bd","supersededBy":null,"metadata":{}},{"id":"03f7a443-f46b-42ca-8acb-009e299d82bc","type":"episodic","key":"gmg.wordpress-starter-theme-applied.2026-03-18","value":"On 2026-03-18 the GMG WordPress preview was switched to a versioned child theme named gmg-starter. The front page now renders a custom homepage based on the contest direction, inner pages use a shared shell with product context navigation, and the preview workflow is documented through apply-theme.sh and updated runbooks.","confidence":0.91,"sourceRefs":["/home/admin/workspace/gmg/docs/runbook.md","/home/admin/workspace/docs-designcorp/docs/runbooks/gmg-site-operations.md"],"owner":"Codex","active":true,"createdAt":"2026-03-18T12:39:06.196Z","updatedAt":"2026-03-18T12:39:06.196Z","observedAt":"2026-03-18T12:39:06.196Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ddca663f-ad11-40ef-a5b5-c87d768fc9aa","type":"profile","key":"landing_design_preferences","value":"Landing should be built library-first from premium reusable sections, not template-first. Clean dev-only restart of sections/templates/projects is desired. Start over with correct structure beginning from Header + Hero. Preference: intentional, premium, beautiful landing design from the start; sections should feel complete on their own and then assemble into templates. Navigation/header is mandatory and had been missing before.","confidence":0.97,"sourceRefs":[],"owner":"admin","active":true,"createdAt":"2026-03-18T19:03:11.247Z","updatedAt":"2026-03-18T19:03:11.247Z","observedAt":"2026-03-18T19:03:11.247Z","expiresAt":"2026-09-14T19:03:11.247Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7033929e-0422-4242-8748-82a95e9adc42","type":"procedural","key":"landing.hero-v2.header-hero-canon.2026-03-18","value":"As of 2026-03-18, the canonical first section for the landing library-first rebuild remains `hero.v2`, but it was simplified after product review: it is now `Header + Hero` with mandatory navigation, left-aligned hero copy, CTA and trust row over one strong full-section background image. The previous right-side visual shell/metrics card is explicitly removed from the canon. Required surface model: `style.backgroundImage` plus darkened gradient/overlay for readable copy; no separate visual column is part of the default contract.","confidence":0.99,"sourceRefs":["/home/admin/workspace/landing/docs/header-hero-canon.md","/home/admin/workspace/landing/src/components/runtime-sections/HeroV2Section.tsx","/home/admin/workspace/landing/src/lib/constructor/section-specs.mjs"],"owner":"admin","active":true,"createdAt":"2026-03-18T20:56:51.999Z","updatedAt":"2026-03-18T20:56:51.999Z","observedAt":"2026-03-18T20:56:51.999Z","expiresAt":"2026-09-14T20:56:51.999Z","supersedes":"ca7e0a19-f957-4708-999e-6df8bb6d8e96","supersededBy":null,"metadata":{}},{"id":"e29ebed1-b903-4c8c-8b48-e0d92f17bbbf","type":"procedural","key":"landing.dev-reset.hero-only.library-first.2026-03-18","value":"Lightweight library-first baseline for landing dev reset now preserves four published sections in this order: hero.v2 (Header + Hero), proof-grid.v1 (light proof/trust band), offer-grid.v1 (light offer/services grid), process-flow.v1 (light process/services block). Baseline project remains stitch-prototype, template remains stitch-launch, and prod is not touched.","confidence":0.97,"sourceRefs":["/home/admin/workspace/landing/docs/dev-baseline-reset.md","/home/admin/workspace/landing/docs/library-first-rebuild-plan.md","/home/admin/workspace/landing/src/lib/constructor/section-specs.mjs"],"owner":"codex","active":true,"createdAt":"2026-03-18T22:47:26.214Z","updatedAt":"2026-03-18T22:47:26.214Z","observedAt":"2026-03-18T22:47:26.214Z","expiresAt":"2026-09-14T22:47:26.214Z","supersedes":"73c8a88b-af02-45e8-a207-c3cea96a9565","supersededBy":null,"metadata":{}},{"id":"c8a5c38a-671d-4462-bc1c-2fa43e782c28","type":"episodic","key":"gmg.roadmap-budget-page-added.2026-03-20","value":"On 2026-03-20 a client-facing static roadmap and budget page for the GMG main-site redesign was added at https://gmg.landing.designcorp.eu/gmg-project-roadmap.html. It summarizes scope by template families, fixed design phases, optional implementation phases, hourly out-of-scope rate, and totals of 2300 USD for design-only or 4200 USD for design plus implementation.","confidence":0.86,"sourceRefs":["/home/admin/workspace/gmg/public/gmg-preview/gmg-project-roadmap.html","/home/admin/workspace/gmg/README.md"],"owner":"Codex","active":true,"createdAt":"2026-03-20T09:30:32.545Z","updatedAt":"2026-03-20T09:30:32.545Z","observedAt":"2026-03-20T09:30:32.545Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"285c7093-6faf-4cae-9711-0d65aa129f1f","type":"procedural","key":"landing.library-first.visual-direction.editorial-warm.2026-03-20","value":"As of 2026-03-20, the first library-first landing sequence after hero uses a warm editorial continuum derived from the current hero photo palette. Proof/offer/process sections should avoid separate white card backgrounds and shadows, and instead use one shared warm surface, olive/sage/gold accents, large display typography, and minimal hairline borders for structure.","confidence":0.96,"sourceRefs":["/home/admin/workspace/landing/docs/library-first-rebuild-plan.md","/home/admin/workspace/landing/src/lib/constructor/section-specs.mjs","/home/admin/workspace/landing/src/components/runtime-sections/ProofGridV1Section.tsx","/home/admin/workspace/landing/src/components/runtime-sections/OfferGridV1Section.tsx","/home/admin/workspace/landing/src/components/runtime-sections/ProcessFlowV1Section.tsx"],"owner":"codex","active":true,"createdAt":"2026-03-20T09:56:57.740Z","updatedAt":"2026-03-20T09:56:57.740Z","observedAt":"2026-03-20T09:56:57.740Z","expiresAt":"2026-09-16T09:56:57.740Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"abc5d3e6-605c-40a0-8a7e-66ccd56861cf","type":"profile","key":"landing-display-typography","value":"Permanent display font for landing public/editor surfaces is Rubik via next/font/google. Real imported weights available for Rubik in this project are 300-900; 100/200 are not supported by the Google font package. Template authoring/create name-title fields should render as full-width standalone rows, not half-width grid cells.","confidence":0.91,"sourceRefs":["/home/admin/workspace/landing/src/app/layout.tsx","/home/admin/workspace/landing/src/components/templates/TemplateAuthoringPanel.tsx","/home/admin/workspace/landing/src/components/templates/TemplateDraftCreateForm.tsx"],"owner":"Agent Landing","active":true,"createdAt":"2026-03-22T14:40:52.424Z","updatedAt":"2026-03-22T14:40:52.424Z","observedAt":"2026-03-22T14:40:52.424Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b35732ae-09bc-442c-a62b-d1d95a3331f9","type":"profile","key":"designcorp-visual-doctrine","value":"DesignCorp premium web doctrine: build strong library sections before templates; hero must be image-led with mandatory header/navigation; palette should be derived from the hero image; sections after hero should feel like one continuous flow, not stacked cards; prefer real photography over abstract graphics; use clean display sans over decorative serif; keep shadows and borders minimal; use asymmetry and one dominant element instead of equal card grids; AI design tools such as Stitch are reference engines, not final art-direction authorities.","confidence":0.95,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/design/doctrine-2026.md","/home/admin/workspace/skills/skill-designcorp-visual-doctrine/SKILL.md"],"owner":"Agent Docs","active":true,"createdAt":"2026-03-22T15:04:55.112Z","updatedAt":"2026-03-22T15:04:55.112Z","observedAt":"2026-03-22T15:04:55.112Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"2b605b23-13d1-49ed-be10-97171c82a06d","type":"procedural","key":"dc-swarm.multi-agent-routing.v1.2026-03-22","value":"As of 2026-03-22 dc-swarm supports file-backed task persistence plus broker-based direct/group messaging and controlled handoffs inside a session. Gateway endpoints: GET/POST /tasks, GET /tasks/:id, POST /sessions/:id/messages, POST /sessions/:id/handoffs. Broker event types: broker.message.direct, broker.message.group, broker.handoff.created. Anti-noise policy: owner may send any direct/group intent and initiate handoffs; agent direct messages are limited to question/result/blocker/handoff; agent group messages are limited to result/blocker; self-send and duplicate recipients are rejected. Task handoff updates requestedRole, assigneeParticipantIds, assigneeSessionIds, artifactIds and metadata.lastHandoff. Web and terminal projections both consume the same persisted event stream rather than separate transport state.","confidence":0.94,"sourceRefs":["/home/admin/workspace/dc-swarm/docs/multi-agent-routing.md","/home/admin/workspace/dc-swarm/apps/gateway/src/server.ts","/home/admin/workspace/dc-swarm/packages/orchestrator-core/src/routing-policy.ts","/home/admin/workspace/dc-swarm/packages/task-graph/src/handoffs.ts","git:c76bbce"],"owner":"codex","active":true,"createdAt":"2026-03-22T19:26:34.465Z","updatedAt":"2026-03-22T19:26:34.465Z","observedAt":"2026-03-22T19:26:34.465Z","expiresAt":"2026-09-18T19:26:34.465Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"14fdd932-1771-4ba4-9dbf-84754c9f6054","type":"procedural","key":"dc-swarm.owner-console-baseline.v1.2026-03-22","value":"dc-swarm MVP has a server-rendered owner console in apps/web. The web app stays gateway-driven: session list reads /sessions + /tasks + /approvals, session detail composes /sessions/:id + /sessions/:id/live + /sessions/:id/audit and normalizes display through projectSessionForWeb. Owner actions submit back through the web server to gateway routes for messages, handoffs, actions, and approval decisions. The console also supports lightweight UI variants through ?view=command|audit|field; these only change tone/copy/CTA and theme variables, not the underlying data model. Avoid introducing a separate frontend state store at this stage.","confidence":0.99,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.test.ts","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md","git:b703b13"],"owner":"codex","active":true,"createdAt":"2026-03-22T19:59:50.642Z","updatedAt":"2026-03-22T19:59:50.642Z","observedAt":"2026-03-22T19:59:50.642Z","expiresAt":"2027-03-22T19:59:50.642Z","supersedes":"e00498f9-3656-46ca-bb9f-3e8a23acd5e9","supersededBy":null,"metadata":{}},{"id":"1c47ae71-6021-4b4a-a1f2-f06ff26c18a7","type":"procedural","key":"dc-swarm.preview.dev-ui-swarm.v1.2026-03-22","value":"dc-swarm preview is live at https://dev.ui.designcorp.eu/swarm/ using the existing dev.ui TLS host plus an nginx path proxy, without replacing the root DesignCorp-UI dev app. systemd unit: dc-swarm-preview.service. Local bindings: gateway 127.0.0.1:3041, web 127.0.0.1:3051, base path /swarm, data dir /home/admin/workspace/dc-swarm/.data/preview-gateway. Repo runbook/templates: docs/preview-runbook.md, scripts/start-preview.mjs, ops/systemd/dc-swarm-preview.service, ops/nginx/dc-swarm-preview.conf, ops/nginx/dev.ui.designcorp.eu.preview.conf. Verified: service active, nginx -t ok, external HTTPS GET on /swarm/ redirects to /swarm/sessions?view=command, preview session/detail render with seeded demo data. HEAD for preview routes is not yet treated as a first-class route method; browser GET flow is the verified path.","confidence":0.99,"sourceRefs":["/home/admin/workspace/dc-swarm/docs/preview-runbook.md","/home/admin/workspace/dc-swarm/scripts/start-preview.mjs","/home/admin/workspace/dc-swarm/ops/systemd/dc-swarm-preview.service","/home/admin/workspace/dc-swarm/ops/nginx/dc-swarm-preview.conf","/home/admin/workspace/dc-swarm/ops/nginx/dev.ui.designcorp.eu.preview.conf","git:c3bc3c0"],"owner":"codex","active":true,"createdAt":"2026-03-22T20:12:19.053Z","updatedAt":"2026-03-22T20:12:19.053Z","observedAt":"2026-03-22T20:12:19.053Z","expiresAt":"2027-03-22T20:12:19.053Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c5ab6bb5-4fce-4f5f-a31b-b75f073ec3e3","type":"procedural","key":"dc-swarm.attached-runtime-autosync.v1.2026-03-22","value":"As of 2026-03-22 dc-swarm gateway auto-syncs imported attached runtime sessions in the background. Imported sessions keep `runtimeBinding` in session.metadata and default `autoSyncAttachedRuntime=true`. Gateway periodically rereads attached transcripts using the runtime catalog on interval `DC_SWARM_ATTACHED_SYNC_INTERVAL_MS` (default 5000 ms), imports only new messages by sourceKey, updates `runtimeBinding.lastSyncedAt`, and clears stale `activeRuntimeTurn` metadata on restart. Owner UI shows the attached-session card with `Автосинхронизация` status plus manual `Синхронизировать сейчас` fallback.","confidence":0.96,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/gateway/src/server.ts","/home/admin/workspace/dc-swarm/apps/gateway/src/index.ts","/home/admin/workspace/dc-swarm/apps/gateway/src/gateway.test.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/docs/preview-runbook.md","git:c29dd8e257adbeba203141c64f6c4b523480aae5"],"owner":"codex","active":true,"createdAt":"2026-03-22T22:41:04.508Z","updatedAt":"2026-03-22T22:41:04.508Z","observedAt":"2026-03-22T22:41:04.508Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a42deea9-88c1-4623-81e9-5096831cbce2","type":"procedural","key":"dc-swarm.live-stream-terminal-feed.v1.2026-03-22","value":"dc-swarm owner console now uses gateway SSE at /sessions/:id/stream plus an in-memory runtime terminal feed buffer per session. Managed runtime adapters emit stdout/stderr chunks through RuntimeTurnInput.onTerminalOutput; gateway streams hello/session/events/terminal frames; web proxies the stream and renders a live terminal panel. Imported native sessions still rely on transcript-based sync, but their new imported events also reach the UI through the same SSE channel.","confidence":0.94,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-03-22T23:09:54.207Z","updatedAt":"2026-03-22T23:09:54.207Z","observedAt":"2026-03-22T23:09:54.207Z","expiresAt":"2026-09-18T23:09:54.207Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a16c74e4-e0c2-4efa-aebb-4ef8434cb8c6","type":"procedural","key":"dc-swarm.owner-console.chat-inspector.v1.2026-03-23","value":"As of 2026-03-23 dc-swarm owner UI is reshaped around an OpenClaw-like chat+inspector model. The list screen acts as a launcher/control surface with left sidebar for sessions/create/import, central path to open a session and recent session cards, and a compact live-signals rail. The session detail screen is now chat-first: center column holds conversation feed and quick-task composer, while the right sticky inspector has tabs Overview/Activity/Control. Overview contains runtime context, attached session info and tasks; Activity contains live terminal feed and system trace; Control contains approvals and advanced actions. Live terminal is no longer a separate center-column panel. This model is the canonical owner-console direction until TASK-012 onboarding and later snapshot/read-model improvements.","confidence":0.94,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md","git:04c9571"],"owner":"codex","active":true,"createdAt":"2026-03-23T00:25:21.692Z","updatedAt":"2026-03-23T00:25:21.692Z","observedAt":"2026-03-23T00:25:21.692Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e30cbe17-308e-4ecf-b457-b5f975a55bf1","type":"procedural","key":"dc-swarm.preview.reload-scroll-hardening.2026-03-23","value":"On 2026-03-23 dc-swarm preview availability issue was hardened in two places. 1) apps/web stream proxy now treats client-aborted SSE/reload as normal lifecycle and avoids writing error pages or stream chunks into destroyed responses; web tests include a regression that aborts /sessions/:id/stream and then verifies the console still responds. 2) owner UI page scrolling was restored by removing the full-page body scroll lock and using browser-level vertical scrolling (`overflow-y: auto`). 3) preview shutdown in scripts/start-preview.mjs now forces exit after a short timeout so systemd restarts do not hang indefinitely on open connections.","confidence":0.93,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.test.ts","/home/admin/workspace/dc-swarm/scripts/start-preview.mjs","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md","git:72284f0"],"owner":"codex","active":true,"createdAt":"2026-03-23T08:53:13.944Z","updatedAt":"2026-03-23T08:53:13.944Z","observedAt":"2026-03-23T08:53:13.944Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6b12cfb4-fe16-4cfc-acf1-ef09c8b49367","type":"procedural","key":"dc-swarm.owner-console.prototype-slice3.v1.2026-03-23","value":"As of 2026-03-23 dc-swarm owner console advanced the architect-prototype adoption with a new real-data UI slice in apps/web. The session center feed is now session-aware: pending approvals can surface inline in the main chat as actionable approval cards, and an active runtime turn renders a live thinking indicator with vendor + prompt summary. The right inspector Overview also replaced the old artifact placeholder with a real artifact reference inventory derived from task.artifactIds and event.artifactIds, while session creation exposes a compact Codex/Claude/Gemini runtime chooser. This remains fully gateway-driven and server-rendered; no separate frontend state store was introduced.","confidence":0.94,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md"],"owner":"codex","active":true,"createdAt":"2026-03-23T11:11:25.154Z","updatedAt":"2026-03-23T11:11:25.154Z","observedAt":"2026-03-23T11:11:25.154Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ae5b37fd-7fe7-4756-a374-dbdd5f1b36ea","type":"procedural","key":"dc-swarm.owner-console.swarm-pulse.v1.2026-03-23","value":"As of 2026-03-23 the owner console derives agent pulse from current gateway truth instead of list-position heuristics. apps/web now computes sidebar and overview pulse cards from participant assignments, task statuses, activeRuntimeTurn, attached runtime binding, and the latest non-debug event. The Overview tab includes a Swarm pulse section, while the Active agents rail shows richer state labels and summaries. No new backend contract was introduced; this remains a server-rendered derivation layer over existing session/task/event metadata.","confidence":0.93,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md"],"owner":"codex","active":true,"createdAt":"2026-03-23T12:21:01.614Z","updatedAt":"2026-03-23T12:21:01.614Z","observedAt":"2026-03-23T12:21:01.614Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"aa1f4f0a-edc1-4abc-ad84-ad4531aaefe6","type":"procedural","key":"dc-swarm.owner-console.operator-palette.v1.2026-03-23","value":"As of 2026-03-23 dc-swarm owner console includes a global operator palette in apps/web, opened from the topbar or via Ctrl/Cmd+K. The palette is intentionally gateway-backed and server-rendered: it reuses existing anchors plus current forms/actions (focus quick-task composer, open Tasks/Timeline/Approvals/Artifacts, open session launcher, toggle theme, cancel active runtime turn, sync attached runtime). No new backend contract or frontend state store was introduced.","confidence":0.92,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.test.ts","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md"],"owner":"codex","active":true,"createdAt":"2026-03-23T13:14:28.746Z","updatedAt":"2026-03-23T13:14:28.746Z","observedAt":"2026-03-23T13:14:28.746Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"de971455-a40c-4245-9d29-e0eaa1622e2e","type":"procedural","key":"dc-swarm.artifact-plane.hydration.v1.2026-03-23","value":"As of 2026-03-23 dc-swarm has a minimal file-backed artifact plane in gateway. Gateway store now persists ArtifactRecord files and exposes GET/POST /artifacts, GET /artifacts/:id, and includes `artifacts` in GET /sessions/:id/live. apps/web SessionPageData consumes hydrated artifacts and the owner console artifact workspace now prefers real record metadata (title, kind, storageKind, mimeType, summary/content snippet) while preserving fallback to raw artifact ids referenced by tasks/events.","confidence":0.93,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/gateway/src/store.ts","/home/admin/workspace/dc-swarm/apps/gateway/src/server.ts","/home/admin/workspace/dc-swarm/apps/gateway/src/gateway.test.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.test.ts","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md"],"owner":"codex","active":true,"createdAt":"2026-03-23T13:27:11.830Z","updatedAt":"2026-03-23T13:27:11.830Z","observedAt":"2026-03-23T13:27:11.830Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"bca388cc-bfe9-4b4a-9c33-3af9aa395ec1","type":"procedural","key":"dc-swarm.owner-console.artifact-record-only.v1.2026-03-23","value":"As of 2026-03-23 the owner console artifact workspace in apps/web is not limited to task/event references anymore. It merges hydrated session artifact records from GET /sessions/:id/live with task/event artifactIds, derives a new `standalone` / `record-only` scope for artifacts that exist in gateway but have not surfaced in task or trace linkage yet, and exposes that state through server-rendered summary cards and client-side filters/search.","confidence":0.93,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.test.ts","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md"],"owner":"codex","active":true,"createdAt":"2026-03-23T13:41:25.659Z","updatedAt":"2026-03-23T13:41:25.659Z","observedAt":"2026-03-23T13:41:25.659Z","expiresAt":"2026-09-19T13:41:25.660Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"2dd26fa6-7582-4244-9017-07edae4901aa","type":"procedural","key":"dc-swarm.preview.seed.record-only-artifact.v1.2026-03-23","value":"The preview seed script scripts/seed-preview.mjs now backfills a standalone artifact record into preview-session-knowledge-lab even when the session already exists. Canonical demo artifact id: preview-artifact-knowledge-daily-log, title: `Daily knowledge review log`. This ensures swarm.designcorp.eu visibly exercises the Record-only artifact review state after preview restarts.","confidence":0.94,"sourceRefs":["/home/admin/workspace/dc-swarm/scripts/seed-preview.mjs","https://swarm.designcorp.eu/sessions/preview-session-knowledge-lab?view=command"],"owner":"codex","active":true,"createdAt":"2026-03-23T13:41:25.694Z","updatedAt":"2026-03-23T13:41:25.694Z","observedAt":"2026-03-23T13:41:25.694Z","expiresAt":"2026-09-19T13:41:25.694Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"199c8901-9510-455f-b9a8-62f2dc0ca9cb","type":"procedural","key":"dc-swarm.owner-console.agent-health-signal-layer.v1.2026-03-23","value":"As of 2026-03-23 apps/web includes a dedicated Agent health workspace inside Overview. It is explicitly a derived signal-health layer, not a gateway heartbeat model: participant state is inferred from activeRuntimeTurn plus recency of task/event signals and attached-runtime mode. Surfaced states are busy, online, idle, and stale; attached sessions are labeled monitor-only. Health cards include recovery hints and owner actions while staying fully server-rendered and gateway-driven.","confidence":0.93,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.test.ts","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md","https://swarm.designcorp.eu/sessions/preview-session-knowledge-lab?view=command"],"owner":"codex","active":true,"createdAt":"2026-03-23T14:03:46.739Z","updatedAt":"2026-03-23T14:03:46.739Z","observedAt":"2026-03-23T14:03:46.739Z","expiresAt":"2026-09-19T14:03:46.739Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9312494a-57fb-43c7-a2c2-9eef7486eced","type":"procedural","key":"dc-swarm.gateway.participant-health.v1.2026-03-23","value":"As of 2026-03-23 GET /sessions/:id/live in dc-swarm gateway includes participantHealth derived in the control plane. The shared contract is participantHealthRecord. Health states are busy, online, idle, stale, dead; attached runtimes are marked monitor-only. Derivation currently uses active runtime turns plus recency of task/event signals and attached-runtime sync timestamps. apps/web now renders Active agents, Swarm pulse and Agent health from this gateway truth instead of local browser-only heuristics.","confidence":0.94,"sourceRefs":["/home/admin/workspace/dc-swarm/packages/shared/src/health.ts","/home/admin/workspace/dc-swarm/apps/gateway/src/server.ts","/home/admin/workspace/dc-swarm/apps/gateway/src/gateway.test.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md"],"owner":"codex","active":true,"createdAt":"2026-03-23T14:42:36.772Z","updatedAt":"2026-03-23T14:42:36.772Z","observedAt":"2026-03-23T14:42:36.772Z","expiresAt":"2026-09-19T14:42:36.772Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b972f41f-a264-4191-8124-ad6e3f9cf2a0","type":"episodic","key":"freelancehunt.safe.contest.2026-03-23","value":"Created separate workspace /home/admin/workspace/fh-safe-contest with first HTML draft index.html and structure.md for the Freelancehunt Safe promo-page contest. Strategy: conversion-first landing for SMB/first-time clients, using HTML as the production draft for screenshot submission and possible later Figma transfer.","confidence":0.92,"sourceRefs":["https://freelancehunt.com/contest/redizayn-promo-storinki-produktu/7590.html","https://freelancehunt.com/service/safe"],"owner":"system","active":true,"createdAt":"2026-03-23T19:37:47.322Z","updatedAt":"2026-03-23T19:37:47.322Z","observedAt":"2026-03-23T19:37:47.322Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"5d0cc6f5-5125-4d74-98df-75b018368e78","type":"procedural","key":"freelancehunt.safe.contest.preview-host","value":"Contest preview host is https://safe.landing.designcorp.eu/ served by nginx from /opt/designcorp/fh-safe-contest/prod. Source HTML lives in /home/admin/workspace/fh-safe-contest/index.html and can be republished with /home/admin/workspace/fh-safe-contest/publish-preview.sh. Nginx site file: /etc/nginx/sites-available/safe.landing.designcorp.eu.","confidence":0.96,"sourceRefs":["/home/admin/workspace/fh-safe-contest/publish-preview.sh","/etc/nginx/sites-available/safe.landing.designcorp.eu"],"owner":"system","active":true,"createdAt":"2026-03-23T19:48:51.641Z","updatedAt":"2026-03-23T19:48:51.641Z","observedAt":"2026-03-23T19:48:51.641Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"095175f9-eb21-47f8-a31d-5d19aeff6f5b","type":"profile","key":"safe-promo-doctrine","value":"Safe promo doctrine: sell calm controlled hiring, not meta design commentary. Audience: SMB, startups, first-time clients hiring freelancers. Use product language only, no phrases like 'strong page should'. Hero should be one poster with dominant visual and one primary CTA. Prefer 5-6 strong sections over many medium ones. Cardless by default; avoid repeated rounded-card-with-shadow pattern. Use real product evidence and workflow visuals over decorative gradients. Create strong rhythm contrast across sections. Palette: brand orange accent with deep graphite/navy base and lighter sections after hero. Typography must be short, direct, authoritative. Each section answers one question and moves user toward action. Core flow: Hero, trust rail, three protection pillars, how it works, direct vs safe, evidence, final CTA. Winning criteria: looks production-ready, speaks business language, explains Safe in 5-10 seconds, improves conversion logic over current page.","confidence":0.93,"sourceRefs":["/home/admin/workspace/fh-safe-contest/design-doctrine-safe.md","https://freelancehunt.com/contest/redizayn-promo-storinki-produktu/7590.html","https://safe.landing.designcorp.eu/"],"owner":"codex","active":true,"createdAt":"2026-03-23T20:12:09.519Z","updatedAt":"2026-03-23T20:12:09.519Z","observedAt":"2026-03-23T20:12:09.519Z","expiresAt":"2026-09-19T20:12:09.519Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"399ed643-49db-4c4e-abb1-04e133565b2c","type":"procedural","key":"docs.figma-mcp-codex.runbook.v1.2026-03-24","value":"Canonical internal runbook for connecting Figma MCP to Codex now lives at /runbooks/figma-mcp-codex in docs-designcorp. Source of truth is `codex mcp list` plus the remote server `https://mcp.figma.com/mcp`. Standard setup is `codex mcp add figma --url https://mcp.figma.com/mcp`, relogin is `codex mcp login figma`, and healthy status is `Auth = OAuth`. Important server-host nuance: if the OAuth browser opens on a different machine than the Codex host, the final `http://127.0.0.1:<port>/callback?...` must be executed on the Codex host itself (for example with `curl`) or the login will not complete. The runbook also documents core workflows for reading design context, transferring live UI to Figma, and write-to-canvas usage.","confidence":0.97,"sourceRefs":["/home/admin/workspace/docs-designcorp/docs/runbooks/figma-mcp-codex.md","/home/admin/workspace/docs-designcorp/docs/.vitepress/config.mts"],"owner":"system","active":true,"createdAt":"2026-03-24T21:17:17.578Z","updatedAt":"2026-03-24T21:17:17.578Z","observedAt":"2026-03-24T21:17:17.578Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f3163a29-5edd-46aa-9062-825dc7ce642d","type":"procedural","key":"gmg.restart-pack.html-to-figma.v1.2026-03-25","value":"GMG restart context is now documented in /home/admin/workspace/gmg/docs/restart-pack-2026-03-25.md and linked from README plus project-overview. Canonical public baselines are split: `https://gmg.landing.designcorp.eu/` maps to `public/gmg-preview/index.html` as the contest-winning baseline, while `https://gmg.landing.designcorp.eu/graphenemg-home-refresh.html` maps to `public/gmg-preview/graphenemg-home-refresh.html` as the active working HTML file for the next stage. Current design workflow is HTML first, then Figma after direction lock. The working HTML already includes the Figma MCP html-to-design capture script, so that file should be treated as the source for future iteration and later transfer to Figma. Because nginx serves `public/gmg-preview` directly from the workspace, any file write there changes the live site immediately; make a local baseline commit before large edits and do not overwrite `index.html` unless there is an explicit decision to replace the public contest baseline.","confidence":0.97,"sourceRefs":["/home/admin/workspace/gmg/docs/restart-pack-2026-03-25.md","/home/admin/workspace/gmg/README.md","/home/admin/workspace/gmg/docs/project-overview.md"],"owner":"system","active":true,"createdAt":"2026-03-25T19:31:41.282Z","updatedAt":"2026-03-25T19:31:41.282Z","observedAt":"2026-03-25T19:31:41.282Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"3c7892a1-d073-4712-a75c-13417767f84b","type":"procedural","key":"dc-swarm.preview.no-demo-seed.v1.2026-03-25","value":"As of 2026-03-25 the live preview at https://swarm.designcorp.eu runs with DC_SWARM_PREVIEW_ENABLE_SEED=false. scripts/start-preview.mjs now makes seed optional, the systemd unit dc-swarm-preview.service sets the env var to false, and preview-session demo records must not reappear after restart. Real-chat testing should use manually created live sessions only.","confidence":0.94,"sourceRefs":["/home/admin/workspace/dc-swarm/scripts/start-preview.mjs","/home/admin/workspace/dc-swarm/ops/systemd/dc-swarm-preview.service","/home/admin/workspace/dc-swarm/docs/preview-runbook.md","https://github.com/DesignCorporation/dc-swarm/issues/38","git:dfea9fa"],"owner":"codex","active":true,"createdAt":"2026-03-25T20:07:45.847Z","updatedAt":"2026-03-25T20:07:45.847Z","observedAt":"2026-03-25T20:07:45.847Z","expiresAt":"2026-09-21T20:07:45.847Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a1c07cf8-4508-4fcd-9941-aef158eb174c","type":"procedural","key":"gmg.phase1.audit-roadmap.v1.2026-03-25","value":"GMG redesign reset on 2026-03-25/26. Real target is https://graphenemg.com/, not the contest landing. Canonical working baseline is /home/admin/workspace/gmg/public/gmg-preview/graphenemg-home-refresh.html. Current public sitemap is exposed via wp-sitemap.xml and shows 59 pages, 278 posts, 11 portfolio items, 9 categories; treat scope by template family, not raw URL count. Recommended Phase 1 set: homepage + investor section landing + standard corporate inner page. Workflow remains HTML first, then Figma MCP capture after direction lock. Canonical docs: /home/admin/workspace/gmg/docs/phase-1-audit-2026-03-25.md and /home/admin/workspace/gmg/docs/phase-1-roadmap-2026-03-25.md.","confidence":0.95,"sourceRefs":["/home/admin/workspace/gmg/docs/phase-1-audit-2026-03-25.md","/home/admin/workspace/gmg/docs/phase-1-roadmap-2026-03-25.md","/home/admin/workspace/gmg/docs/restart-pack-2026-03-25.md"],"owner":"codex","active":true,"createdAt":"2026-03-25T20:07:53.189Z","updatedAt":"2026-03-25T20:07:53.189Z","observedAt":"2026-03-25T20:07:53.189Z","expiresAt":"2026-09-21T20:07:53.189Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"09863297-b873-460b-802f-61c41b6eddf4","type":"procedural","key":"dc-swarm.structured-review-loop.v1.2026-03-26","value":"As of 2026-03-26 dc-swarm ships a structured critic/verifier review loop. Shared review schemas live in packages/shared/src/review.ts; gateway auto-creates review tasks and review artifacts (critique, change_request, verification_report, final_verdict, source_output) for policy-scoped work; task-graph blocks downstream until source task reviewState reaches pass or an explicit override is present; protected actions are rejected with 409 while required review is pending; owner console Tasks workspace renders blocking reason, stage chips, and readable review artifact deep-links.","confidence":0.95,"sourceRefs":["/home/admin/workspace/dc-swarm/packages/shared/src/review.ts","/home/admin/workspace/dc-swarm/apps/gateway/src/server.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/packages/task-graph/src/dag.ts","git:022d0d4"],"owner":"codex","active":true,"createdAt":"2026-03-26T13:20:39.215Z","updatedAt":"2026-03-26T13:20:39.215Z","observedAt":"2026-03-26T13:20:39.215Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1e67a183-02cd-4122-8bbe-52b6bfd92280","type":"episodic","key":"gmg-2026-03-27-homepage-realignment","value":"Paid GMG project on Freelancehunt thread 8760991 started on 2026-03-24 with 1320 USD / 7 days. Although the formal project description still resembles a reduced Phase 1, the active execution mode is homepage-first realignment: the client rejected gmg-home-experiment-01.html as too close to the current live site and wants the direction to return to the winning contest page. Continue the main work in /home/admin/workspace/gmg/public/gmg-preview/graphenemg-home-refresh.html, treat gmg-home-experiment-01.html as a side experiment/reference only, and re-lock home direction before expanding to investor and inner templates.","confidence":0.92,"sourceRefs":["/home/admin/workspace/gmg/docs/homepage-realignment-roadmap-2026-03-27.md","/home/admin/workspace/gmg/docs/restart-pack-2026-03-25.md"],"owner":"system","active":true,"createdAt":"2026-03-27T19:29:20.461Z","updatedAt":"2026-03-27T19:29:20.461Z","observedAt":"2026-03-27T19:29:20.461Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"4dbc142c-c5e2-4f8e-8c41-4f31ee6cff70","type":"procedural","key":"gmg-roadmap-approved","value":"The public roadmap page at https://gmg.landing.designcorp.eu/gmg-project-roadmap-ru.html was sent to the client and approved. Treat its phase structure, budget framing, and template-family scope as an approved commercial framework. The active homepage-first realignment is an execution slice inside approved Phase 1, not a replacement for the roadmap itself.","confidence":0.95,"sourceRefs":["/home/admin/workspace/gmg/docs/restart-pack-2026-03-25.md","/home/admin/workspace/gmg/docs/homepage-realignment-roadmap-2026-03-27.md"],"owner":"system","active":true,"createdAt":"2026-03-27T19:55:23.865Z","updatedAt":"2026-03-27T19:55:23.865Z","observedAt":"2026-03-27T19:55:23.865Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"52afd7a8-d564-4f7e-ae6c-43ff2a8ec919","type":"procedural","key":"dc-swarm.operator_playbook","value":"dc-swarm live operator bootstrap: 1) check https://swarm.designcorp.eu/health and sudo -n systemctl status dc-swarm-preview.service --no-pager; 2) open /sessions?view=command; 3) for new work use only Codex and Claude, Gemini is disabled from owner-facing create/import/dispatch flows; 4) prefer Launch recipe 'Research -> build -> verify sprint' with Codex=gpt-5.4 and Claude=claude-sonnet-4-6; 5) set tasks as one concrete deliverable with Goal, Constraints, Acceptance; 6) when a session looks stuck inspect Tasks and Trace before assuming chat failure; 7) on restart use sudo -n systemctl restart dc-swarm-preview.service, then recheck health, list, and a real detail page; 8) state survives restart in sqlite store under .data/preview-gateway; canonical repo reference is docs/agent-operator-playbook.md.","confidence":0.95,"sourceRefs":["/home/admin/workspace/dc-swarm/docs/agent-operator-playbook.md","/home/admin/workspace/dc-swarm/docs/preview-runbook.md","/home/admin/workspace/dc-swarm/docs/owner-console-baseline.md"],"owner":"codex","active":true,"createdAt":"2026-03-27T20:44:57.481Z","updatedAt":"2026-03-27T20:44:57.481Z","observedAt":"2026-03-27T20:44:57.481Z","expiresAt":"2027-03-27T20:44:57.481Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7e1cd277-7844-4699-9626-0d7f626c7407","type":"episodic","key":"dc-swarm.2026-03-27.gemini_disabled_owner_flows","value":"As of 2026-03-27, Gemini was removed from new owner workflows on swarm.designcorp.eu because it repeatedly stalled or exhausted quota. New session creation, runtime discovery/import panel, and web-side quick-task dispatch now surface only Codex and Claude. Historical Gemini sessions may still exist in data but should not be used for new work.","confidence":0.92,"sourceRefs":["/home/admin/workspace/dc-swarm/docs/agent-operator-playbook.md","/home/admin/workspace/dc-swarm/apps/web/src/server.ts"],"owner":"codex","active":true,"createdAt":"2026-03-27T20:44:57.497Z","updatedAt":"2026-03-27T20:44:57.497Z","observedAt":"2026-03-27T20:44:57.497Z","expiresAt":"2027-03-27T20:44:57.497Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f0fb454f-9143-47f8-9e80-f194027b586b","type":"procedural","key":"dc-swarm.runtime-discovery.guardrails.2026-03-27","value":"On 2026-03-27 dc-swarm preview 502 incident was traced to Node OOM in the shared preview process during heavy runtime discovery. Gateway runtime discovery is now guarded in two ways: Gemini discovery is disabled by default in LocalRuntimeSessionCatalog, and Codex/Claude session discovery reads jsonl files via streaming line reads instead of loading entire logs into memory. After the fix, /runtime/discovery for workingDirectory=/home/admin/workspace/dc-swarm dropped from about 18s to about 2.5s and no Gemini candidates are returned in owner-facing discovery.","confidence":0.95,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/gateway/src/runtime-catalog.ts","git:dc50505","git:dca5e8b"],"owner":"system","active":true,"createdAt":"2026-03-27T21:03:46.825Z","updatedAt":"2026-03-27T21:03:46.825Z","observedAt":"2026-03-27T21:03:46.825Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"5f6ed36b-13fa-4a47-be7b-a9cc1e5f04ee","type":"episodic","key":"dc-swarm.2026-03-27.preview-502-oom-runtime-discovery","value":"At about 20:56 UTC on 2026-03-27, swarm.designcorp.eu returned 502 because dc-swarm-preview.service crashed with 'FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory'. The incident occurred shortly after heavy /runtime/discovery-panel requests on large swarm sessions. Recovery path: confirm systemd auto-restart, push gateway fixes to disable Gemini discovery by default and stream Codex/Claude discovery reads, restart dc-swarm-preview.service, verify https://swarm.designcorp.eu/health returns ok and /runtime/discovery latency drops to roughly 2.5s.","confidence":0.93,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/gateway/src/runtime-catalog.ts","git:dc50505","git:dca5e8b","journalctl:dc-swarm-preview.service@2026-03-27T20:56:01Z"],"owner":"system","active":true,"createdAt":"2026-03-27T21:03:46.842Z","updatedAt":"2026-03-27T21:03:46.842Z","observedAt":"2026-03-27T21:03:46.842Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"5da588d5-e561-4790-bffb-81ba64c99e0a","type":"episodic","key":"gmg-client-materials-2026-03-27","value":"Client PDF base created for GMG in /home/admin/workspace/gmg/.client-materials/freelancehunt-8760991 with downloaded PDFs, extracted text, and tracked index at /home/admin/workspace/gmg/docs/client-materials-index-2026-03-27.md. Hero in public/gmg-preview/gmg-home-realignment.html temporarily switched to car image nano-banana-2_Castrol_GMG.jpg pending replacement with user-generated video.","confidence":0.92,"sourceRefs":["/home/admin/workspace/gmg/docs/client-materials-index-2026-03-27.md","/home/admin/workspace/gmg/public/gmg-preview/gmg-home-realignment.html"],"owner":"system","active":true,"createdAt":"2026-03-27T23:14:16.033Z","updatedAt":"2026-03-27T23:14:16.033Z","observedAt":"2026-03-27T23:14:16.033Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9820559a-9b04-47d9-9644-608177d425fc","type":"profile","key":"beauty.brand-direction","value":"On 2026-04-01 the owner fixed the new master brand direction for the Beauty project as `Aglaine`. Treat `Beauty` as the legacy/internal project name and `Aglaine` as the preferred external product naming direction for future brand, domain, documentation, and product-surface work unless superseded by a later explicit decision.","confidence":0.97,"sourceRefs":["user_directive_2026-04-01_chat","https://github.com/DesignCorporation/Beauty"],"owner":"codex","active":true,"createdAt":"2026-04-01T23:56:35.708Z","updatedAt":"2026-04-01T23:56:35.708Z","observedAt":"2026-04-01T23:56:35.708Z","expiresAt":"2027-04-01T23:56:35.708Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d0f75cda-e7fe-40b3-818a-8e4a5b483f4e","type":"procedural","key":"beauty-aglaine-workspace-strategy.2026-04-02","value":"On 2026-04-02 the working strategy for the Beauty -> Aglaine transition was fixed as a dual-workspace model. `/home/admin/workspace/beauty` is the legacy audit/reverse-engineering source of truth for current implementation details. `/home/admin/workspace/aglaine` is the canonical workspace for new documentation, target architecture, decisions, migration planning, and future implementation. Current-state facts and target-state design must stay separated in documentation.","confidence":0.96,"sourceRefs":["/home/admin/workspace/aglaine/docs/04-decisions/ADR-0001-workspace-strategy.md","user_directive_2026-04-02_chat"],"owner":"codex","active":true,"createdAt":"2026-04-02T00:12:06.726Z","updatedAt":"2026-04-02T00:12:06.726Z","observedAt":"2026-04-02T00:12:06.726Z","expiresAt":"2027-04-02T00:12:06.727Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"70a2df50-dd0b-4b9a-ae1e-42c048913988","type":"procedural","key":"beauty.booking-architecture-split.2026-04-02","value":"On 2026-04-02 the Beauty booking audit confirmed a split booking architecture: appointment write-side, scheduling policy, reminders, and salon-side read routes are primarily owned by `services/salon-api`, while client booking history/read aggregation is implemented in `services/auth-service` via `ClientSalonRelation` and cross-tenant lookup. Future Aglaine planning should treat this split as a legacy architecture fact and avoid reproducing it unintentionally.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/01-current-system/booking-and-scheduling-lifecycle.md","/home/admin/workspace/aglaine/docs/03-target-architecture/booking-domain-direction.md"],"owner":"codex","active":true,"createdAt":"2026-04-02T00:39:19.693Z","updatedAt":"2026-04-02T00:39:19.693Z","observedAt":"2026-04-02T00:39:19.693Z","expiresAt":"2027-04-02T00:39:19.693Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"229596dd-8d28-406d-a9e5-b7a608b27286","type":"episodic","key":"serveradmin.low-memory.print-dev.restart.2026-04-03","value":"On 2026-04-03 the server low-memory P0 alerts from serveradmin were traced primarily to print-dev.service, a long-lived Next.js dev server for dev.print.designcorp.eu. Before intervention, systemd MemoryCurrent for print-dev.service was about 13.9 GB and MemAvailable had fallen to about 1.4-1.9 GB with repeated P0 events in /home/admin/logs/serveradmin/events.jsonl from 09:00Z through 09:55Z. A minimal safe recovery was `sudo -n systemctl restart print-dev.service`, which reduced print-dev memory to about 426 MB, raised MemAvailable to about 13 GB, preserved dev.print availability (HTTP 200), and stopped new low-memory P0 events after 09:55:33Z. Residual separate signal: dc-swarm-preview.service remained healthy but continued to emit sustained high CPU P1 alerts around the same period.","confidence":0.93,"sourceRefs":["/home/admin/logs/serveradmin/events.jsonl","/home/admin/logs/serveradmin/audit.jsonl","/etc/systemd/system/print-dev.service"],"owner":"codex","active":true,"createdAt":"2026-04-03T09:56:47.782Z","updatedAt":"2026-04-03T09:56:47.782Z","observedAt":"2026-04-03T09:56:47.782Z","expiresAt":"2026-09-30T09:56:47.783Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"fc86c73e-1db4-413d-b767-3d59c899e795","type":"procedural","key":"aglaine.phase1.persistence-bootstrap.2026-04-03","value":"As of 2026-04-03 Aglaine has a real phase-1 persistence baseline for auth/workspace. Dev database is a dedicated Docker Compose PostgreSQL service `aglaine-dev-db` defined in /home/admin/workspace/aglaine/ops/docker-compose.dev-db.yml and bound to 127.0.0.1:4028. Runtime uses Prisma 7 with prisma.config.ts and @prisma/adapter-pg; when AGLAINE_DATABASE_URL is present, the API runs in `prisma` mode and auth/workspace state is backed by Account, Workspace, WorkspaceMembership, and Session tables. The live dev service aglaine-dev.service now runs with AGLAINE_DATABASE_URL and https://dev.aglaine.designcorp.eu/health reports persistence.driver = prisma.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/persistence-database-bootstrap.md","/home/admin/workspace/aglaine/ops/docker-compose.dev-db.yml","/home/admin/workspace/aglaine/ops/systemd/aglaine-dev.service","/home/admin/workspace/aglaine/prisma/schema.prisma"],"owner":"system","active":true,"createdAt":"2026-04-03T12:53:35.550Z","updatedAt":"2026-04-03T12:53:35.550Z","observedAt":"2026-04-03T12:53:35.550Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6c9a18fa-5530-43e5-9ae8-196dd6c810c8","type":"procedural","key":"aglaine.booking-scheduling-schema-baseline.2026-04-03","value":"As of 2026-04-03 Aglaine phase-1 persistence includes the first booking-bearing schema baseline. Prisma now defines ServiceCategory, Service, WorkspaceStaffProfile, StaffServiceAssignment, WorkspaceWorkingHour, StaffWorkingHour, ScheduleException, CustomerWorkspaceRelation, Appointment, AppointmentServiceLine, and AppointmentAssignee, alongside new enums for weekdays, schedule exception kinds, customer relation status, appointment status, and appointment source. Dev seed provisions a non-empty booking graph: 3 services, 3 staff profiles, 14 workspace-hour rows, 21 staff-hour rows, 2 schedule exceptions, 1 customer-workspace relation, and 1 appointment with line item and assignee. This baseline is documented in docs/06-delivery/booking-scheduling-database-baseline.md and is intended as the foundation for the next booking repository/availability/API packet.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/booking-scheduling-database-baseline.md","/home/admin/workspace/aglaine/prisma/schema.prisma","/home/admin/workspace/aglaine/prisma/seed.mjs","/home/admin/workspace/aglaine/prisma/migrations/20260403130204_booking_scheduling_baseline/migration.sql"],"owner":"system","active":true,"createdAt":"2026-04-03T13:05:51.266Z","updatedAt":"2026-04-03T13:05:51.266Z","observedAt":"2026-04-03T13:05:51.266Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"83171e8e-5d39-40d3-80fd-4b83d7f1088b","type":"episodic","key":"aglaine.catalog-scheduling-management.2026-04-03","value":"Catalog-and-staff management packet is now runnable in Aglaine phase-1 runtime. Added catalogSchedulingStore contract and bootstrap/prisma implementations, wired API routes for context, category/service create-update, staff profile create-update, workspace hours replace, staff schedule read-replace, and schedule exception create-delete. Typecheck/test/build passed, and live Prisma smoke on dev.aglaine.designcorp.eu succeeded with real writes on ws-lumi. Known limitation: bootstrap catalogSchedulingStore and bookingStore still use separate mutable in-memory state, so bootstrap catalog writes do not automatically reshape bootstrap booking availability.","confidence":0.93,"sourceRefs":[],"owner":"system","active":true,"createdAt":"2026-04-03T14:07:13.795Z","updatedAt":"2026-04-03T14:07:13.795Z","observedAt":"2026-04-03T14:07:13.795Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f202858a-220d-4189-9011-a089b37d45cc","type":"episodic","key":"aglaine.notification-core-bootstrap.2026-04-03","value":"Implemented the first runnable notification-core packet in Aglaine. Added Prisma notification models (Notification, NotificationDelivery, NotificationJob), unified notification feed endpoints, booking-to-notification event handoff for create/confirm/cancel, and worker processing for reminder jobs and email deliveries. Verified with pnpm typecheck/test/build, applied migration 20260403143422_notification_core_baseline, and revalidated dev.aglaine.designcorp.eu after clearing an orphan process that blocked port 4020.","confidence":0.86,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/notification-core-bootstrap.md","/home/admin/workspace/aglaine/apps/api/src/modules/notification-core/routes.ts","/home/admin/workspace/aglaine/apps/worker/src/worker.ts","/home/admin/workspace/aglaine/prisma/migrations/20260403143422_notification_core_baseline/migration.sql"],"owner":"system","active":true,"createdAt":"2026-04-03T14:37:34.294Z","updatedAt":"2026-04-03T14:37:34.294Z","observedAt":"2026-04-03T14:37:34.294Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e021d93b-b92a-49be-9db7-b3b32b670cfa","type":"episodic","key":"aglaine.minimal-ui-slice.2026-04-03","value":"Implemented the first minimal UI slice in /home/admin/workspace/aglaine/apps/web using shadcn/ui primitives with custom Aglaine shell composition. Dev hosting now uses split routing on dev.aglaine.designcorp.eu: browser traffic -> 127.0.0.1:4021, API and /health -> 127.0.0.1:4020. Verified with pnpm typecheck, pnpm test, pnpm build, nginx config test/reload, aglaine-dev restart, and live smoke for root HTML, health, runtime-shape, owner booking list, client booking context, and client availability.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/minimal-ui-slice.md","/home/admin/workspace/aglaine/ops/nginx/aglaine.designcorp.eu.conf","/home/admin/workspace/aglaine/apps/web/src/App.tsx"],"owner":"codex","active":true,"createdAt":"2026-04-03T15:49:52.637Z","updatedAt":"2026-04-03T15:49:52.637Z","observedAt":"2026-04-03T15:49:52.637Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"cad48f23-da5d-4212-8456-33ccfecdd77b","type":"procedural","key":"aglaine.dev-domain-split-routing","value":"For Aglaine dev hosting, keep API runtime on 4020 and web runtime on 4021. Nginx must proxy /api/* and /health to 127.0.0.1:4020 and all other browser traffic to 127.0.0.1:4021. aglaine-dev.service should run pnpm dev so api, worker, and web start together.","confidence":0.98,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-operations/domain-and-port-plan.md","/home/admin/workspace/aglaine/docs/06-operations/dev-hosting-bootstrap.md","/home/admin/workspace/aglaine/scripts/dev.mjs"],"owner":"codex","active":true,"createdAt":"2026-04-03T15:49:52.655Z","updatedAt":"2026-04-03T15:49:52.655Z","observedAt":"2026-04-03T15:49:52.655Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7153d34a-5ebf-49ba-8581-6df34a6dd1a2","type":"episodic","key":"aglaine.white-screen-vite-dotfiles-fix.2026-04-03","value":"White screen on dev.aglaine.designcorp.eu after minimal UI slice was caused by nginx deny-dotfiles blocking Vite dev asset paths with dot-prefixed segments. Browser bootstrap failed on /node_modules/.vite/* and /@fs/.../.pnpm/... with ERR_EMPTY_RESPONSE, leaving #root empty. Fixed by adding ^~ proxy exceptions for /node_modules/.vite/ and /@fs/home/admin/workspace/aglaine/ before deny-dotfiles in the dev vhost.","confidence":0.98,"sourceRefs":["/home/admin/workspace/aglaine/ops/nginx/aglaine.designcorp.eu.conf","/home/admin/workspace/aglaine/docs/06-operations/dev-hosting-bootstrap.md"],"owner":"codex","active":true,"createdAt":"2026-04-03T15:59:51.693Z","updatedAt":"2026-04-03T15:59:51.693Z","observedAt":"2026-04-03T15:59:51.693Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b5500894-c27e-496b-abf8-612a135c52bc","type":"procedural","key":"aglaine.vite-dev-nginx-dotpaths","value":"When exposing a Vite dev server behind the shared DesignCorp nginx snippets, allowlist Vite paths with dot-prefixed segments before including deny-dotfiles. For Aglaine this means proxy exceptions for /node_modules/.vite/ and /@fs/home/admin/workspace/aglaine/. Otherwise browser module fetches fail with ERR_EMPTY_RESPONSE and the app shows a blank screen.","confidence":0.99,"sourceRefs":["/home/admin/workspace/aglaine/ops/nginx/aglaine.designcorp.eu.conf","/home/admin/workspace/aglaine/docs/06-operations/dev-hosting-bootstrap.md"],"owner":"codex","active":true,"createdAt":"2026-04-03T15:59:51.712Z","updatedAt":"2026-04-03T15:59:51.712Z","observedAt":"2026-04-03T15:59:51.712Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"60623907-2d49-4b44-bd31-a773f726fbab","type":"procedural","key":"aglaine.ui-package-baseline.2026-04-03","value":"As of 2026-04-03 Aglaine has the first internal `packages/ui` baseline for stable shell-level frontend primitives. The package currently owns BrandMark, FieldLabel, ErrorNotice, WorkspaceSwitcher, WorkspaceNav, NotificationKindBadge, NotificationFeedPanel, plus dependent Badge/Button/Card/ScrollArea/Select primitives and shared cn utility. apps/web now imports these shared shell components from `@aglaine/ui`, the old local `apps/web/src/components/experience-shared.tsx` surface has been removed, root build/typecheck include `build:ui` and `typecheck:ui`, and the web app resolves `@aglaine/ui` directly to `packages/ui/src/index.ts` during development/build.","confidence":0.93,"sourceRefs":["/home/admin/workspace/aglaine/packages/ui/src/index.ts","/home/admin/workspace/aglaine/docs/06-delivery/ui-package-baseline.md","/home/admin/workspace/aglaine/apps/web/src/features/salon-page.tsx","/home/admin/workspace/aglaine/package.json"],"owner":"system","active":true,"createdAt":"2026-04-03T17:07:52.291Z","updatedAt":"2026-04-03T17:07:52.291Z","observedAt":"2026-04-03T17:07:52.291Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"318f7dc4-9262-432a-94ff-aa36cb8d6fc7","type":"procedural","key":"aglaine.route-scoped-data-layer.2026-04-03","value":"As of 2026-04-03 Aglaine web uses a shared frontend query layer based on @tanstack/react-query. apps/web now provides a central QueryClient in src/lib/query-client.ts and route-scoped fetch/invalidation helpers in src/lib/route-data.ts. Canonical query keys currently cover auth session, salon route state, client route state, and a catalog namespace. Session restore no longer uses one-off component effects; App.tsx reads auth through the shared session query and updates cache on login, workspace switch, and logout. SalonPage and ClientPage now read their canonical route models from shared query keys and refresh through invalidateWorkspaceScope(queryClient) instead of manually rebuilding route state via local Promise.all load functions. Dev runtime was revalidated on dev.aglaine.designcorp.eu after restarting aglaine-dev.service.","confidence":0.94,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/route-scoped-data-layer.md","/home/admin/workspace/aglaine/apps/web/src/lib/route-data.ts","/home/admin/workspace/aglaine/apps/web/src/App.tsx","/home/admin/workspace/aglaine/apps/web/src/features/salon-page.tsx","/home/admin/workspace/aglaine/apps/web/src/features/client-page.tsx"],"owner":"system","active":true,"createdAt":"2026-04-03T17:28:28.010Z","updatedAt":"2026-04-03T17:28:28.010Z","observedAt":"2026-04-03T17:28:28.010Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"99d0ac11-e799-4939-aef5-96c8655e68c7","type":"episodic","key":"aglaine.catalog-availability-query-layer.2026-04-03","value":"Shared frontend query layer now covers catalog context, staff schedule, and booking availability for salon/client flows. CatalogManagementPanel reads canonical data via react-query and patches staff-schedule cache after mutations; salon and client availability lookups use shared query keys and clear availability state on workspace switch. Docs synced in route-scoped-data-layer.md, minimal-ui-slice.md, and phase-1-execution-plan.md. Live dev runtime revalidated on dev.aglaine.designcorp.eu after restart.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/apps/web/src/lib/route-data.ts","/home/admin/workspace/aglaine/apps/web/src/features/catalog-management-panel.tsx","/home/admin/workspace/aglaine/apps/web/src/features/salon-page.tsx","/home/admin/workspace/aglaine/apps/web/src/features/client-page.tsx","/home/admin/workspace/aglaine/docs/06-delivery/route-scoped-data-layer.md"],"owner":"codex","active":true,"createdAt":"2026-04-03T18:07:31.202Z","updatedAt":"2026-04-03T18:07:31.202Z","observedAt":"2026-04-03T18:07:31.202Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0e55782e-65cb-4465-b342-d18e56a3ca10","type":"procedural","key":"aglaine.web-bundle-splitting.route-lazy.v1.2026-04-03","value":"As of 2026-04-03 Aglaine web no longer ships one oversized browser chunk. apps/web/src/App.tsx now keeps session restore and route guards synchronous in the entry chunk while loading salon and client surfaces through React.lazy route boundaries, and apps/web/src/features/salon-page.tsx loads CatalogManagementPanel behind a dedicated Suspense heavy-panel boundary. Production build changed from a single main chunk of about 565.31 kB minified to a split shape with index about 202.35 kB, shared input chunk about 277.32 kB, salon-page about 22.07 kB, client-page about 14.06 kB, and catalog-management-panel about 46.79 kB; the previous Vite 500 kB warning no longer reproduces. Verified with pnpm typecheck, pnpm test, pnpm build, and live dev smoke on dev.aglaine.designcorp.eu for owner/client login, auth/me session restore, workspace-access, customer-history, and salon/client route URLs.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/apps/web/src/App.tsx","/home/admin/workspace/aglaine/apps/web/src/features/salon-page.tsx","/home/admin/workspace/aglaine/docs/06-delivery/minimal-ui-slice.md","/home/admin/workspace/aglaine/docs/06-delivery/route-scoped-data-layer.md","/home/admin/workspace/aglaine/docs/05-migration/phase-1-execution-plan.md"],"owner":"codex","active":true,"createdAt":"2026-04-03T19:51:55.884Z","updatedAt":"2026-04-03T19:51:55.884Z","observedAt":"2026-04-03T19:51:55.884Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"07883af1-a8b0-4844-9ed2-2937e08de8c5","type":"episodic","key":"aglaine.web-shell-canonical-sidebar.issue-14.2026-04-03","value":"Issue #14 was revised to align Aglaine to the actual shadcn sidebar-07 composition, not a card-like aside. The shell now uses a fixed-width sidebar sibling from 768px upward, an inset header with the sidebar trigger, and shared salon/client composition over the same shell primitives. Sidebar scope is limited to brand, workspace switcher, primary nav, and compact utility footer; actor/runtime/signals live in the inset header, right rail, or page content. Verification passed with pnpm typecheck, pnpm test, pnpm build, HTTP route smoke, and headless Chrome screenshots for 1280/1024/768 plus collapsed and right-rail open/close states. Unrelated production-hosting changes from issue #11 remained untouched.","confidence":0.84,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-03T21:22:10.975Z","updatedAt":"2026-04-03T21:22:10.975Z","observedAt":"2026-04-03T21:22:10.975Z","expiresAt":null,"supersedes":"92906e6c-a57c-4a83-9e24-727968fc5ef0","supersededBy":null,"metadata":{}},{"id":"f8e35b2a-2a77-46ec-aafc-5fc03d6f7270","type":"procedural","key":"aglaine.master-profile-self-settings.routes.2026-04-06","value":"As of 2026-04-06 Aglaine splits staff scheduling UX into three route classes: `/salon/settings` for workspace-wide salon settings such as Workspace hours, `/salon/masters/:staffProfileId` as a read-only master detail route, and `/salon/account` as actor-scoped self-service for the signed-in staff profile. Self-service schedule mutations now use server-resolved routes under `/api/catalog-scheduling/me/schedule*` and capability `schedule:self:manage`, so the browser no longer submits an arbitrary writable staffProfileId for personal schedule edits. Bootstrap persistence now includes loginable `stylist@aglaine.local` to keep the self-settings flow testable in development-shell mode.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/master-profile-and-self-settings.md","/home/admin/workspace/aglaine/apps/api/src/modules/catalog-scheduling/routes.ts","/home/admin/workspace/aglaine/apps/web/src/features/salon-page.tsx","/home/admin/workspace/aglaine/apps/web/src/features/staff-profile-panel.tsx","/home/admin/workspace/aglaine/packages/persistence/src/bootstrap-driver.ts"],"owner":"codex","active":true,"createdAt":"2026-04-06T14:52:48.744Z","updatedAt":"2026-04-06T14:52:48.744Z","observedAt":"2026-04-06T14:52:48.744Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"aeb857a3-b09d-4ab8-9610-420454a12a59","type":"procedural","key":"aglaine.customer-relations-api-contract.2026-04-06","value":"As of 2026-04-06 Aglaine has a runnable `customer-relations` backend packet. Active routes are GET/POST `/api/customer-relations/clients`, GET/PATCH `/api/customer-relations/clients/:customerRelationId`, and PATCH `/api/customer-relations/clients/:customerRelationId/status`. `CustomerWorkspaceRelation` is now a workspace-local client record with required displayName, optional email/phone/birthday/notes, and optional linked `customerAccountId` instead of using `Account` as the salon-editable source of truth. Capability `customer:read` + `customer:manage` is enabled for OWNER, MANAGER, and RECEPTIONIST, but not STAFF. Bootstrap and Prisma now both include receptionist login `reception@aglaine.local`. Booking storage still uses `Appointment.customerRelationId`, but the current workspace booking editor continues to submit `customerAccountId` until the dedicated relation-based booking migration lands.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/customer-relations-api-contract.md","/home/admin/workspace/aglaine/apps/api/src/modules/customer-relations/routes.ts","/home/admin/workspace/aglaine/packages/persistence/src/contracts.ts","/home/admin/workspace/aglaine/packages/persistence/src/capabilities.ts","/home/admin/workspace/aglaine/prisma/schema.prisma"],"owner":"codex","active":true,"createdAt":"2026-04-06T16:35:41.503Z","updatedAt":"2026-04-06T16:35:41.503Z","observedAt":"2026-04-06T16:35:41.503Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a1957e07-d7ac-4d28-a38c-95706c4b68a0","type":"procedural","key":"aglaine.booking-client-identity","value":"Workspace-side manual booking now uses customerRelationId as the canonical client identity. The salon booking editor reads selectable clients from GET /api/customer-relations/clients, while GET /api/bookings/context remains only a compatibility projection for workspace display/services/staff. Appointment customer snapshots may have a null linked account for manually created workspace clients without portal identity.","confidence":0.94,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-06T17:19:25.291Z","updatedAt":"2026-04-06T17:19:25.291Z","observedAt":"2026-04-06T17:19:25.291Z","expiresAt":"2026-10-03T17:19:25.291Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"885846cb-580a-48dc-8029-14d0556e7bf7","type":"procedural","key":"aglaine.booking-queue-refactor-backlog.2026-04-06","value":"On 2026-04-06 the next booking queue refactor for Aglaine was decomposed in GitHub Project 13 under epic #20 with subissues #22 contract for booking detail/queue editing/numbering, #23 workspaceCode and appointmentReference generation, #21 booking detail route and API split, #25 queue table refresh (date/time/reference/avatar), and #24 limited quick-edit with explicit save/cancel. Product direction fixed in backlog: keep domain naming as booking/appointment, move full editing to a dedicated detail route, avoid autosave, and keep avatar scope at initials fallback unless media is separately approved.","confidence":0.92,"sourceRefs":["https://github.com/DesignCorporation/Aglaine/issues/20","https://github.com/DesignCorporation/Aglaine/issues/21","https://github.com/DesignCorporation/Aglaine/issues/22","https://github.com/DesignCorporation/Aglaine/issues/23","https://github.com/DesignCorporation/Aglaine/issues/24","https://github.com/DesignCorporation/Aglaine/issues/25"],"owner":"codex","active":true,"createdAt":"2026-04-06T18:34:12.832Z","updatedAt":"2026-04-06T18:34:12.832Z","observedAt":"2026-04-06T18:34:12.832Z","expiresAt":"2026-10-03T18:34:12.832Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6d12c968-f007-4201-bf8a-72a24da64a20","type":"procedural","key":"aglaine.booking-queue-detail-contract.2026-04-06","value":"Docs-first contract for booking queue refactor: keep booking/appointment naming; split surfaces into /salon/bookings, /salon/bookings/new, and /salon/bookings/:appointmentId; forbid autosave; keep queue quick-edit intentionally narrow with explicit Save/Cancel; introduce immutable workspaceCode and appointmentReference with DD.MM.YYYY.WORKSPACECODE.NNN shape using workspace-local creation date; queue avatar scope stays initials-only in first packet.","confidence":0.92,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-06T18:43:43.764Z","updatedAt":"2026-04-06T18:43:43.764Z","observedAt":"2026-04-06T18:43:43.764Z","expiresAt":"2026-10-03T18:43:43.764Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"87c7d932-3629-43e1-9920-2da4b82205d6","type":"procedural","key":"aglaine.workspace-code-and-appointment-reference.2026-04-06","value":"Implemented baseline for immutable workspaceCode and appointmentReference. Workspace now stores countryCode, cityName, placeCode, branchSequence, and workspaceCode; Appointment now stores appointmentReference; WorkspaceAppointmentSequence owns per-workspace, per-local-day nextSequence. appointmentReference format is DD.MM.YYYY.WORKSPACECODE.NNN using workspace-local createdAt. Current demo backfill is FRPAR01 for Atelier Aura and PLWAW01 for Lumi Studio.","confidence":0.95,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-06T19:14:57.815Z","updatedAt":"2026-04-06T19:14:57.815Z","observedAt":"2026-04-06T19:14:57.815Z","expiresAt":"2026-10-03T19:14:57.815Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"aea28850-b0ac-41f3-b65b-d94a4bb81be8","type":"procedural","key":"aglaine.booking-queue.compact-detail-first.2026-04-07","value":"On 2026-04-07 the Aglaine booking queue contract was tightened to a compact detail-first list. `/salon/bookings` now keeps only five columns: client, service, master, date, and time, with initials avatar fallback and row-first navigation into `/salon/bookings/:appointmentId`. Reference, status, cancellation actions, and other appointment context belong on the dedicated booking detail route instead of the queue table. Queue inline quick-edit is not part of the current contract.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/03-target-architecture/booking-queue-and-reference-direction.md","/home/admin/workspace/aglaine/docs/06-delivery/booking-queue-detail-contract.md","/home/admin/workspace/aglaine/apps/web/src/features/salon-page.tsx"],"owner":"codex","active":true,"createdAt":"2026-04-07T13:46:08.114Z","updatedAt":"2026-04-07T13:46:08.114Z","observedAt":"2026-04-07T13:46:08.114Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f0d052c7-570d-4117-8b18-c9bb0ef35e5f","type":"procedural","key":"aglaine_manual_cash_payment_operator_flow","value":"Aglaine payment bootstrap uses a dedicated payments module and keeps booking/payment ownership split intact. Manual and cash settlement is operator-facing only on /salon/bookings/:appointmentId, with GET/POST /api/payments/appointments/:appointmentId/records and PATCH /api/payments/records/:paymentId. Roles OWNER, MANAGER, RECEPTIONIST have payment:read + payment:manage; ACCOUNTANT has payment:read; STAFF has no payment visibility. Allowed lifecycle in this packet is create pending/captured and update pending -> captured|cancelled. Booking detail hides payment linkage for actors without payment capability, booking status remains independent from payment state, and duplicate active settlement records are blocked until the prior record is cancelled or failed.","confidence":0.94,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-07T16:15:11.549Z","updatedAt":"2026-04-07T16:15:11.549Z","observedAt":"2026-04-07T16:15:11.549Z","expiresAt":"2026-10-04T16:15:11.549Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0e61e734-e778-4b7b-b2b2-4c05d2879897","type":"procedural","key":"aglaine_refund_invoice_reporting_follow_up","value":"Aglaine issue #33 is defined docs-first in docs/06-delivery/refund-invoice-reporting-follow-up.md. The next commercial packet is intentionally narrower than full billing parity: refunds remain payment-owned records linked to PaymentRecord with canonical minor-unit money and statuses pending/succeeded/failed/cancelled; invoices remain billing-owned records with their own numbering, issue snapshot, and statuses draft/issued/voided; reporting is a read model derived from payment/refund/invoice truth and must stay currency-aware. Booking only exposes appointment context and payable snapshots, not refund, invoice, or reporting truth. Legacy drift not to reintroduce includes booking-ledger shortcuts, browser/provider choreography as canonical contract, invoice email as source of truth, mixed amount units, stale refund sync, and reporting derived from formatted strings.","confidence":0.93,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-07T18:17:02.515Z","updatedAt":"2026-04-07T18:17:02.515Z","observedAt":"2026-04-07T18:17:02.515Z","expiresAt":"2026-10-04T18:17:02.515Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"67033b58-8929-4d70-b59d-72555480ad3b","type":"procedural","key":"aglaine.commercial-reporting-projections.2026-04-07","value":"Issue #38 implemented locally in /home/admin/workspace/aglaine. Aglaine now exposes read-only GET /api/reporting/commercial-summary backed by paymentStore.readCommercialReportingSummary(...). Reporting is derived only from PaymentRecord/PaymentEvent, RefundRecord/RefundEvent, and InvoiceRecord/InvoiceEvent. The summary is currency-bucketed and intentionally separates windowed flow totals from window-scoped status snapshots: payment buckets expose capturedFlowTotal and refundedFlowTotal plus statusCounts; invoice buckets expose issuedFlowCount, issuedFlowTotal, statusCounts, and statusTotals. Status snapshot buckets are evaluated as of windowEndsAt (or generation time when omitted) but only include records whose createdAt falls inside the requested window, which prevents seed-era records from polluting narrower reporting windows. Cross-currency aggregation is forbidden; each currency gets a separate bucket.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/commercial-reporting-projections.md","/home/admin/workspace/aglaine/packages/persistence/src/commercial-reporting.ts","/home/admin/workspace/aglaine/apps/api/src/modules/commercial-reporting/routes.ts","/home/admin/workspace/aglaine/apps/api/src/server.test.ts"],"owner":"system","active":true,"createdAt":"2026-04-07T20:54:12.906Z","updatedAt":"2026-04-07T20:54:12.906Z","observedAt":"2026-04-07T20:54:12.906Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"8dae3945-500c-4e5b-9131-913a69bc3eea","type":"procedural","key":"aglaine.product-surface-topology.2026-04-07","value":"As of 2026-04-07 Aglaine canonical product topology keeps four explicit browser surface classes: marketing root on aglaine.designcorp.eu -> later aglaine.com, salon CRM on salon.aglaine.designcorp.eu -> later salon.aglaine.com, reserved persistent customer-facing surface on my.aglaine.designcorp.eu -> later my.aglaine.com, and reserved internal admin on admin.aglaine.designcorp.eu -> later admin.aglaine.com. Public booking entry is explicitly not equal to the persistent customer portal. Reuse of one internal shell system for signed-in surfaces does not justify collapsing marketing, salon, customer, and admin into one host.","confidence":0.96,"sourceRefs":["/home/admin/workspace/aglaine/docs/03-target-architecture/product-surface-topology-direction.md","/home/admin/workspace/aglaine/docs/06-operations/domain-and-port-plan.md","/home/admin/workspace/aglaine/docs/03-target-architecture/web-shell-direction.md"],"owner":"codex","active":true,"createdAt":"2026-04-07T22:35:57.360Z","updatedAt":"2026-04-07T22:35:57.360Z","observedAt":"2026-04-07T22:35:57.360Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1ce20f73-30c9-4f38-b8c6-63157c423bf1","type":"procedural","key":"aglaine.account-first-registration-contract.2026-04-07","value":"As of 2026-04-07 Aglaine canonical registration direction is account-first, not salon-first. Account is created or authenticated before workspace creation; post-auth branching must explicitly allow create salon, join by invite, or enter an existing workspace. One actor may hold multiple workspace memberships with different roles. P0 auth baseline is email/password plus Google sign-up/login on one shared auth platform; SMS is not mandatory and WhatsApp is not required for P0 registration. Legal/company details remain optional early and should not block first CRM entry. Current /salon/onboarding/new remains only an authenticated internal workspace-user flow, not the final public registration shape.","confidence":0.96,"sourceRefs":["/home/admin/workspace/aglaine/docs/03-target-architecture/account-first-registration-direction.md","/home/admin/workspace/aglaine/docs/03-target-architecture/auth-and-session-direction.md","/home/admin/workspace/aglaine/docs/06-delivery/workspace-access-bootstrap.md"],"owner":"codex","active":true,"createdAt":"2026-04-07T22:57:09.292Z","updatedAt":"2026-04-07T22:57:09.292Z","observedAt":"2026-04-07T22:57:09.292Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ee039801-d350-4cee-8e08-3902e24d8920","type":"procedural","key":"aglaine.public-host-split.2026-04-07","value":"Issue #45 introduces host-aware surface routing in apps/web. Root aglaine.* is marketing-only and no longer renders CRM routes by default. salon.aglaine.* and dev.aglaine.designcorp.eu remain salon CRM surfaces. Browser runtime uses resolveHostSurfaceConfig/buildCrossHostHref to redirect product paths from marketing host to salon host while preserving path/search/hash. Tracked nginx template and deploy smoke scripts now include PUBLIC_SALON_URL and verify both root and salon hostnames.","confidence":0.92,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-07T23:13:32.871Z","updatedAt":"2026-04-07T23:13:32.871Z","observedAt":"2026-04-07T23:13:32.871Z","expiresAt":"2027-04-07T23:13:32.871Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b7496ae9-b69c-4902-8aa2-3a4ba61491d2","type":"procedural","key":"aglaine.public-salon-auth-registration-baseline.2026-04-07","value":"Issue #46 adds the first public salon auth packet. On the salon surface, `/login` handles email/password sign-in, `/register` creates a new workspace-user account, and `/salon/next` serves as the post-auth chooser for create salon / join by invite / enter workspace. Auth API now includes POST `/api/auth/register`; new actors are signed in immediately with session authenticationMethod normalized to `password`. Email verification is explicitly staged, not enforced yet. The existing `/salon/onboarding/new` route remains the authenticated workspace-creation flow and is reached from the create-salon branch rather than being replaced by public registration.","confidence":0.94,"sourceRefs":["/home/admin/workspace/aglaine/apps/api/src/modules/auth-session/routes.ts","/home/admin/workspace/aglaine/apps/web/src/App.tsx","/home/admin/workspace/aglaine/apps/web/src/features/registration-page.tsx","/home/admin/workspace/aglaine/apps/web/src/features/auth-next-step-page.tsx","/home/admin/workspace/aglaine/docs/06-delivery/public-salon-auth-entry-and-registration-baseline.md"],"owner":"codex","active":true,"createdAt":"2026-04-08T00:04:29.820Z","updatedAt":"2026-04-08T00:04:29.820Z","observedAt":"2026-04-08T00:04:29.820Z","expiresAt":"2027-04-08T00:04:29.820Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0afe791e-329d-4aad-a21c-63ac731dfe85","type":"procedural","key":"aglaine.google-salon-auth.2026-04-08","value":"As of 2026-04-08 Aglaine public salon auth supports optional Google sign-up/login on the same canonical Account and Session model. New runtime auth routes are GET /api/auth/providers and POST /api/auth/google. Backend verifies Google ID tokens and either restores an existing account by googleSubject or creates a new workspace-user account when the verified email is unused. P0 duplicate/linking policy is strict: if the email already belongs to an email/password account, Google login returns an explicit conflict instead of auto-linking; if the email is already linked to a different Google subject, provider conflict is returned; unverified Google email is rejected. Runtime config key is AGLAINE_GOOGLE_CLIENT_ID. If it is missing, the providers endpoint reports google.available=false with reason not-configured and the salon UI falls back to email/password without rendering a broken provider flow.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/apps/api/src/modules/auth-session/routes.ts","/home/admin/workspace/aglaine/apps/api/src/modules/auth-session/google.ts","/home/admin/workspace/aglaine/apps/web/src/features/google-auth-panel.tsx","/home/admin/workspace/aglaine/packages/persistence/src/prisma-driver.ts","/home/admin/workspace/aglaine/docs/06-delivery/google-signup-and-login-on-salon-surface.md"],"owner":"system","active":true,"createdAt":"2026-04-08T10:39:04.122Z","updatedAt":"2026-04-08T10:39:04.122Z","observedAt":"2026-04-08T10:39:04.122Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"22078c05-f242-4e6d-b608-6285cdb13f71","type":"procedural","key":"aglaine.public-salon-registration-quick-setup.2026-04-08","value":"Public salon registration is now account-first and runs through /login or /register -> /salon/next -> /salon/onboarding/new. Workspace creation captures salon name, business type, country, city, currency default with manual override, legal profile, optional company details, and optional starter catalog provisioning. Backend reuses canonical workspaceCode generation, stores workspace businessType/defaultCurrency/legalProfile/company fields, creates OWNER membership, switches active workspace immediately, and optionally provisions starter categories/services server-side. If starter setup is applied, onboardingStage moves to catalog-setup; otherwise it remains bootstrap.","confidence":0.98,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/public-salon-registration-and-quick-setup.md","/home/admin/workspace/aglaine/docs/03-target-architecture/account-first-registration-direction.md","/home/admin/workspace/aglaine/docs/06-delivery/workspace-access-bootstrap.md"],"owner":"codex","active":true,"createdAt":"2026-04-08T11:07:12.672Z","updatedAt":"2026-04-08T11:07:12.672Z","observedAt":"2026-04-08T11:07:12.672Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"eca757a4-928f-4e1d-bfd1-8919d9fc1a98","type":"procedural","key":"aglaine.public-registration.contact-address-contract.2026-04-08","value":"As of 2026-04-08 Aglaine public salon registration keeps the account-first flow `/register|/login -> /salon/next -> /salon/onboarding/new`, but email/password account signup now requires a user phone number. Salon creation now stores richer workspace registration metadata: companyName and companyLegalAddress are required when legalProfile is `company`, companyTaxId remains optional, and salonAddress is optional regardless of legalProfile. The canonical auth/session envelope now exposes actor.phone, while Google auth remains implemented but not currently configured on dev/prod and still needs a later profile-completion packet to enforce mandatory phone when the provider is enabled.","confidence":0.97,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/public-salon-auth-entry-and-registration-baseline.md","/home/admin/workspace/aglaine/docs/06-delivery/public-salon-registration-and-quick-setup.md","/home/admin/workspace/aglaine/docs/03-target-architecture/account-first-registration-direction.md"],"owner":"codex","active":true,"createdAt":"2026-04-08T12:48:21.603Z","updatedAt":"2026-04-08T12:48:21.603Z","observedAt":"2026-04-08T12:48:21.603Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"27ae1725-6ec3-48e8-b366-66634c0b6064","type":"procedural","key":"aglaine.public-registration.demo-quick-setup.2026-04-08","value":"Public salon registration remains account-first: user registers first, then chooses Create a salon from /salon/next. Email/password signup now requires a phone number. Salon registration captures business type, currency, legal profile, company legal address when legalProfile=company, and optional salon address. If quick setup is enabled, the backend provisions starter categories/services plus one demo staff profile, one demo client, and one confirmed demo appointment for the next business day.","confidence":0.94,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-08T13:53:49.836Z","updatedAt":"2026-04-08T13:53:49.836Z","observedAt":"2026-04-08T13:53:49.836Z","expiresAt":"2026-10-05T13:53:49.836Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c2141b83-dc7e-4e0c-b1da-11e10d5243ef","type":"procedural","key":"aglaine.live-smoke-regression-baseline.2026-04-08","value":"Issue #40 establishes a pragmatic release-oriented smoke baseline in Aglaine. Canonical command is `pnpm test:smoke:core`, implemented by `scripts/smoke/live-runtime-baseline.mjs`. The automated baseline combines one headless Chrome browser pass for host/surface behavior (marketing root, public salon login, marketing-host product redirect, dev register, post-auth next-step, and authenticated salon routes) with one API-heavy live regression on dev.aglaine.designcorp.eu covering auth provider availability, public account registration, public salon registration with quick setup, quick-setup demo data visibility, catalog/client/booking writable flow, and manual cash payment capture. Manual smoke remains intentionally small and focuses on visual/product sanity such as address-bar redirect confirmation, register/onboarding layout review, demo data visibility across CRM pages, and payment-block visibility by role.","confidence":0.97,"sourceRefs":["/home/admin/workspace/aglaine/scripts/smoke/live-runtime-baseline.mjs","/home/admin/workspace/aglaine/package.json","/home/admin/workspace/aglaine/docs/06-delivery/live-smoke-and-regression-baseline.md","/home/admin/workspace/aglaine/docs/05-migration/verification-strategy.md"],"owner":"codex","active":true,"createdAt":"2026-04-08T14:49:42.176Z","updatedAt":"2026-04-08T14:49:42.176Z","observedAt":"2026-04-08T14:49:42.176Z","expiresAt":"2026-10-05T14:49:42.176Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"2bbea400-c11d-4fd8-90c5-02031bfda6df","type":"procedural","key":"aglaine.booking-calendar-workbench-baseline.2026-04-09","value":"Issue #56 introduced the first calendar-first salon workbench baseline. Aglaine now exposes /salon/bookings/calendar alongside queue/create/detail, backed by GET /api/bookings/calendar?date=YYYY-MM-DD&view=day|week and a dedicated calendar read model instead of reusing queue DTOs. Day view columns are staff profiles, week view columns are days, blocks are positioned by local appointment time, and cross-midnight appointments are segmented per local day. Scope intentionally excludes month view, drag/drop, inline create, advanced overlap packing, and heavy filters. Verification baseline for the packet was pnpm typecheck, pnpm test, pnpm build, pnpm test:smoke:core, targeted calendar tests, and live dev verification on dev.aglaine.designcorp.eu.","confidence":0.94,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/booking-calendar-workbench-baseline.md","/home/admin/workspace/aglaine/apps/api/src/modules/booking-core/calendar.ts","/home/admin/workspace/aglaine/apps/web/src/features/booking-calendar-panel.tsx","git:7b8e3e9"],"owner":"system","active":true,"createdAt":"2026-04-09T23:08:50.489Z","updatedAt":"2026-04-09T23:08:50.489Z","observedAt":"2026-04-09T23:08:50.489Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9f33c1a6-0562-4a4f-b78e-baa1e6e49b50","type":"procedural","key":"aglaine.booking-calendar-write-context.2026-04-09","value":"Issue #58 establishes the first writable calendar contract for Aglaine without introducing a parallel scheduler API. `/salon/bookings/calendar` remains URL-backed via `view`, `date`, and optional `staffProfileId`. Empty-slot clicks now seed canonical create route context through `/salon/bookings/new?...&startsAtLocal=YYYY-MM-DDTHH:mm`, while existing appointment blocks expose an explicit reschedule entry into the canonical detail route `/salon/bookings/:appointmentId?...&intent=reschedule`. Create and reschedule still use the existing booking create/update APIs and explicit save/cancel semantics; week-view create requires a staff scope to resolve a canonical staffProfileId. Smoke baseline now verifies day/week calendar routes, create-from-calendar route entry, and detail-reschedule route entry on the live dev runtime.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/booking-calendar-create-and-reschedule-context.md","/home/admin/workspace/aglaine/apps/web/src/features/booking-calendar-panel.tsx","/home/admin/workspace/aglaine/apps/web/src/features/salon-page.tsx","/home/admin/workspace/aglaine/scripts/smoke/live-runtime-baseline.mjs"],"owner":"system","active":true,"createdAt":"2026-04-09T23:40:27.873Z","updatedAt":"2026-04-09T23:40:27.873Z","observedAt":"2026-04-09T23:40:27.873Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"04e14860-2c17-43ec-85a6-1e7d65557f6d","type":"procedural","key":"aglaine.calendar-primary-navigation-split.2026-04-10","value":"Issue #61 promotes Calendar to a primary salon navigation destination. Canonical scheduling route is now `/salon/calendar`; legacy `/salon/bookings/calendar` is preserved as a compatibility redirect with query/hash passthrough. Sidebar now exposes separate primary destinations for `Bookings` (queue/create/detail-first workflow) and `Calendar` (scheduling-first workflow), while create-from-calendar and reschedule flows still hand off to the existing canonical booking routes `/salon/bookings/new` and `/salon/bookings/:appointmentId`. Smoke baseline now verifies both the new primary calendar route and the legacy redirect.","confidence":0.96,"sourceRefs":["/home/admin/workspace/aglaine/apps/web/src/App.tsx","/home/admin/workspace/aglaine/apps/web/src/features/salon-page.tsx","/home/admin/workspace/aglaine/apps/web/src/lib/booking-calendar.ts","/home/admin/workspace/aglaine/scripts/smoke/live-runtime-baseline.mjs","/home/admin/workspace/aglaine/docs/06-delivery/booking-calendar-primary-navigation-split.md"],"owner":"system","active":true,"createdAt":"2026-04-10T12:02:20.800Z","updatedAt":"2026-04-10T12:02:20.800Z","observedAt":"2026-04-10T12:02:20.800Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"53120e9d-52cd-48a8-872d-31909e994e6f","type":"procedural","key":"aglaine.public-com-domains.2026-04-10","value":"As of 2026-04-10 Aglaine public .com domains are live on the existing nginx/certbot production contour. `/etc/nginx/sites-available/aglaine.designcorp.eu` now serves `aglaine.designcorp.eu`, `salon.aglaine.designcorp.eu`, `aglaine.com`, `www.aglaine.com`, and `salon.aglaine.com` from the same production site. The existing Let's Encrypt certificate named `aglaine.designcorp.eu` was expanded to include `aglaine.com`, `www.aglaine.com`, and `salon.aglaine.com`. Current cert domains: aglaine.designcorp.eu, dev.aglaine.designcorp.eu, salon.aglaine.designcorp.eu, aglaine.com, www.aglaine.com, salon.aglaine.com. Cloudflare proxy is active for aglaine.com and salon.aglaine.com; HTTPS now returns 200 on both hosts.","confidence":0.97,"sourceRefs":["/etc/nginx/sites-available/aglaine.designcorp.eu","/home/admin/workspace/aglaine/apps/web/src/lib/host-surface.ts","/home/admin/workspace/aglaine/docs/06-operations/production-hosting-baseline.md"],"owner":"system","active":true,"createdAt":"2026-04-10T14:57:49.737Z","updatedAt":"2026-04-10T14:57:49.737Z","observedAt":"2026-04-10T14:57:49.737Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"18d8e9d2-4214-489d-b794-c002f5db19e4","type":"episodic","key":"fh-safe-contest.landing-polish.v2.2026-04-10","value":"On 2026-04-10 the Freelancehunt Safe contest page in /home/admin/workspace/fh-safe-contest/index.html was upgraded from mixed product+meta contest copy to product-first sales narrative. Changes: removed internal/meta phrases about 'promo page' and 'strong page', strengthened risk/problem framing, clarified value/workflow/comparison copy, expanded trust/proof into a stronger evidence block with 494,924 stat plus protected-process cards, tightened FAQ wording, converted final CTA to decision-oriented language with lifecycle meta cards, and removed contest-process wording from footer/meta. Local browser screenshot smoke on a temporary http.server confirmed the updated page rendered desktop and mobile without layout breakage.","confidence":0.92,"sourceRefs":["/home/admin/workspace/fh-safe-contest/index.html"],"owner":"codex","active":true,"createdAt":"2026-04-10T18:41:11.776Z","updatedAt":"2026-04-10T18:41:11.776Z","observedAt":"2026-04-10T18:41:11.776Z","expiresAt":"2026-10-07T18:41:11.776Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"45bf0508-b68e-48df-bd5e-8e02e311a865","type":"episodic","key":"fh-safe-contest.freelancehunt-header-and-copy-realignment.2026-04-10","value":"On 2026-04-10 the Safe contest landing was realigned to the official Freelancehunt product context after reviewing the contest page and the latest client comment ('Вітаю! Всі роботи переглянули... більшість з них - це стокова версія AI без жодних змін виконавця'). Changes in /home/admin/workspace/fh-safe-contest/index.html: replaced the custom FH badge header with a Freelancehunt-style top bar using a clean logo capture from the official Safe page, green CTA buttons and product-shell cues; rewrote section headlines/body copy to remove meta/designer/instructional wording and make it read like final marketing copy; reintroduced green as a trust/system accent while keeping orange as primary CTA. Deploy support in publish-preview.sh now also copies required assets, including the header logo PNG, to /opt/designcorp/fh-safe-contest/prod/assets. Live preview verified on https://safe.landing.designcorp.eu/ with the new header rendering correctly.","confidence":0.94,"sourceRefs":["/home/admin/workspace/fh-safe-contest/index.html","/home/admin/workspace/fh-safe-contest/publish-preview.sh","https://freelancehunt.com/contest/redizayn-promo-storinki-produktu/7590.html","https://freelancehunt.com/service/safe","https://safe.landing.designcorp.eu/"],"owner":"codex","active":true,"createdAt":"2026-04-10T19:00:01.794Z","updatedAt":"2026-04-10T19:00:01.794Z","observedAt":"2026-04-10T19:00:01.794Z","expiresAt":"2026-10-07T19:00:01.794Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"08280846-4914-404a-9be6-aca725f3f057","type":"episodic","key":"fh-safe-contest.svg-header-and-author-sections.2026-04-10","value":"On 2026-04-10 the Safe contest landing in /home/admin/workspace/fh-safe-contest was advanced from the earlier product-first rewrite to a more contest-differentiated version: official Freelancehunt SVG logo `/assets/freelancehunt-ru.svg` is now the live header asset, `publish-preview.sh` deploys that SVG instead of the old PNG, and the middle of the page uses two custom Safe-specific narrative sections (`deal-architecture` and `journey`) rather than generic template card blocks. Local Playwright screenshot smoke passed for desktop and mobile viewports; live preview https://safe.landing.designcorp.eu/ was republished and verified to serve the SVG asset with HTTP 200 and the updated section markers in HTML.","confidence":0.95,"sourceRefs":["/home/admin/workspace/fh-safe-contest/index.html","/home/admin/workspace/fh-safe-contest/publish-preview.sh","https://safe.landing.designcorp.eu/"],"owner":"system","active":true,"createdAt":"2026-04-10T19:14:06.638Z","updatedAt":"2026-04-10T19:14:06.638Z","observedAt":"2026-04-10T19:14:06.638Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c5730b91-df7a-45d2-9747-d0895b25372f","type":"episodic","key":"fh-safe-contest.hero-silver-vault-reset.2026-04-10","value":"On 2026-04-10 the Safe contest landing hero in /home/admin/workspace/fh-safe-contest was reset to a simpler photo-led direction after feedback that the page felt overworked and hard to read. The hero now uses a full-screen silver vault-door photo (`assets/hero-safe-silver-vault.jpg`) with the vault door composed on the right, removes the previous right-side hero card, shortens the headline to 'Працюйте з фрилансером без ризику передоплати', keeps one short supporting paragraph plus compact trust chips and proof line, and deploys the new asset through publish-preview.sh. Local Playwright screenshots and live preview verification on https://safe.landing.designcorp.eu/ confirmed the new hero rendered correctly on desktop and mobile.","confidence":0.95,"sourceRefs":["/home/admin/workspace/fh-safe-contest/index.html","/home/admin/workspace/fh-safe-contest/publish-preview.sh","https://safe.landing.designcorp.eu/"],"owner":"system","active":true,"createdAt":"2026-04-10T19:29:54.112Z","updatedAt":"2026-04-10T19:29:54.112Z","observedAt":"2026-04-10T19:29:54.112Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"80852588-4218-4e2d-b037-ca34a55b3cf7","type":"procedural","key":"fh-safe-contest.workspace-served-domain.2026-04-10","value":"As of 2026-04-10 the public preview domain `https://safe.landing.designcorp.eu/` is served directly from workspace path `/home/admin/workspace/fh-safe-contest` via `/etc/nginx/sites-available/safe.landing.designcorp.eu`, not from `/opt/designcorp/fh-safe-contest/prod`. Nginx root was changed to the workspace, but public exposure is intentionally limited to `GET /`, `GET /index.html`, and `GET /assets/*`; other workspace files such as `.md` and `.sh` return 404. This makes HTML/CSS/asset edits visible immediately on the live domain without running `publish-preview.sh`. Backup of the previous nginx site file was saved as `/etc/nginx/sites-available/safe.landing.designcorp.eu.bak-20260410T193958Z`.","confidence":0.98,"sourceRefs":["/etc/nginx/sites-available/safe.landing.designcorp.eu","/etc/nginx/sites-available/safe.landing.designcorp.eu.bak-20260410T193958Z","/home/admin/workspace/fh-safe-contest/index.html"],"owner":"system","active":true,"createdAt":"2026-04-10T19:40:43.850Z","updatedAt":"2026-04-10T19:40:43.850Z","observedAt":"2026-04-10T19:40:43.850Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"8c3a4eeb-b5a0-4176-8e4e-40a8bac96653","type":"procedural","key":"aglaine.workspace-invite-acceptance-flow.2026-04-12","value":"As of 2026-04-12 Aglaine supports account-first workspace invite flow inside workspace-access. Owners can create email invites via POST /api/workspace-invites; public preview lives at GET /api/workspace-invites/:token; authenticated acceptance lives at POST /api/workspace-invites/:token/accept; revoke lives at POST /api/workspace-invites/:id/revoke. Invite is a durable WorkspaceInvite record with hashed one-time token and explicit states pending/accepted/expired/revoked. Membership is created only at acceptance time, invited email must match the accepting account email, and successful acceptance synchronizes the active session into the invited workspace. The salon web surface now exposes /join-by-invite and preserves account-first return flow through login/register via next=/join-by-invite?token=... .","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/workspace-invite-acceptance-flow.md","/home/admin/workspace/aglaine/apps/api/src/modules/workspace-access/routes.ts","/home/admin/workspace/aglaine/apps/web/src/features/workspace-invite-page.tsx","/home/admin/workspace/aglaine/apps/api/src/server.test.ts"],"owner":"codex","active":true,"createdAt":"2026-04-12T12:47:57.367Z","updatedAt":"2026-04-12T12:47:57.367Z","observedAt":"2026-04-12T12:47:57.367Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1dda36b8-739f-4df9-96d4-f860bf674b47","type":"procedural","key":"aglaine_subagent_operating_mode","value":"For Aglaine, the main agent remains the single project owner and keeps full product, architecture, and release context. Subagents may be used only for narrow bounded analysis, implementation, or verification subtasks to save tokens. The main agent must assign exact scope, review every result, run checks, and remain solely responsible for commits, pushes, issue closure, and final decisions. The user does not want to hand the project to anyone else directly.","confidence":0.98,"sourceRefs":[],"owner":"admin","active":true,"createdAt":"2026-04-12T20:49:30.260Z","updatedAt":"2026-04-12T20:49:30.260Z","observedAt":"2026-04-12T20:49:30.260Z","expiresAt":"2027-04-12T20:49:30.260Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a659e91f-9136-4d17-af80-5640c4b3dd50","type":"procedural","key":"gmg.preview-topology.phase-status.2026-04-13","value":"As of 2026-04-13 GMG uses three active static nginx hosts, not only the legacy gmg host. `gmg.landing.designcorp.eu` serves `/home/admin/workspace/gmg/public/gmg-preview` (older March baseline/history), `gmg2.landing.designcorp.eu` serves `/home/admin/workspace/gmg/public/gmg2-preview` with `X-Robots-Tag: noindex, nofollow, noarchive` and is the current structured Phase 1 preview system, and `gmg3.landing.designcorp.eu` serves `/home/admin/workspace/gmg/private/gmg2-phase2-preview` with the same noindex policy. Inside `public/gmg2-preview/preview-status/index.html`, the current project status is: homepage and `/about-gmg/` approved, about/investor inner-route family live and awaiting comments, while products hub, product detail families, news, and contact are planned as Phase 2 design scope. Do not rely on older March docs that say gmg2/gmg3 are retired without first checking nginx and the routed preview files.","confidence":0.95,"sourceRefs":["/etc/nginx/sites-available/gmg.landing.designcorp.eu","/etc/nginx/sites-available/gmg2.landing.designcorp.eu","/etc/nginx/sites-available/gmg3.landing.designcorp.eu","/home/admin/workspace/gmg/public/gmg2-preview/preview-status/index.html"],"owner":"codex","active":true,"createdAt":"2026-04-13T09:05:35.132Z","updatedAt":"2026-04-13T09:05:35.132Z","observedAt":"2026-04-13T09:05:35.132Z","expiresAt":"2026-10-10T09:05:35.132Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d2392f00-6e98-41ac-86c1-ab10008879d8","type":"procedural","key":"aglaine_workspace_subscription_billing_contract","value":"Aglaine now has a docs-first canonical workspace subscription billing contract fixed on 2026-04-13: separate SaaS billing from operator appointment payments; use Beta/Free access, Salon base monthly, and Billable staff seat monthly; billable seat means an active bookable provider; staged overdue lifecycle is past_due_soft (0-3), growth_frozen (4-6), restricted_mode (7-11), suspended (12+); owner-only billing recovery plus support override and export-before-full-lock are required. Source of truth is docs/04-decisions/ADR-0005-workspace-subscription-billing-and-grace-policy.md plus companion direction/delivery docs.","confidence":0.97,"sourceRefs":["/home/admin/workspace/aglaine/docs/04-decisions/ADR-0005-workspace-subscription-billing-and-grace-policy.md","/home/admin/workspace/aglaine/docs/03-target-architecture/subscription-billing-direction.md","/home/admin/workspace/aglaine/docs/06-delivery/subscription-billing-model-and-grace-policy.md"],"owner":"codex","active":true,"createdAt":"2026-04-13T09:34:44.027Z","updatedAt":"2026-04-13T09:34:44.027Z","observedAt":"2026-04-13T09:34:44.027Z","expiresAt":"2026-10-10T09:34:44.027Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"90c5c04d-58fa-4a67-9d3d-dde9657a3fa4","type":"procedural","key":"gmg2.preview.no-cache-review-host.2026-04-14","value":"As of 2026-04-14 the gmg2 review host `https://gmg2.landing.designcorp.eu` is configured to send explicit preview no-cache headers (`Cache-Control: no-store, no-cache, must-revalidate, max-age=0` and `Pragma: no-cache`) from `/etc/nginx/sites-available/gmg2.landing.designcorp.eu`. Root cause was reviewers seeing stale page HTML after content/icon updates because the preview vhost previously returned only ETag/Last-Modified without explicit cache policy.","confidence":0.94,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-14T08:21:07.773Z","updatedAt":"2026-04-14T08:21:07.773Z","observedAt":"2026-04-14T08:21:07.773Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ba3d63b6-a15d-4f32-ba0a-f1dad8425837","type":"procedural","key":"amazoncookbook.production-hosting.2026-04-14","value":"As of 2026-04-14 AmazonCookBook production is live on https://amazoncookbook.designcorp.eu as a static Next.js export served directly by nginx. Repo path: /home/admin/workspace/AmazonCookBook. Release root: /opt/designcorp/amazoncookbook/prod with releases/<timestamp>-<sha> and current symlink; nginx public root is /opt/designcorp/amazoncookbook/prod/current/out. The repo now contains CI workflow .github/workflows/ci.yml, deploy workflow .github/workflows/deploy-prod.yml, deploy scripts in scripts/deploy/, and bootstrap nginx template ops/nginx/amazoncookbook.designcorp.eu.conf. Site is intentionally noindex via Next metadata/robots and nginx X-Robots-Tag because it is an internal editorial workspace.","confidence":0.96,"sourceRefs":["/home/admin/workspace/AmazonCookBook/docs/production-hosting.md","/home/admin/workspace/AmazonCookBook/ops/nginx/amazoncookbook.designcorp.eu.conf","/etc/nginx/sites-available/amazoncookbook.designcorp.eu","/opt/designcorp/amazoncookbook/prod"],"owner":"system","active":true,"createdAt":"2026-04-14T11:32:34.884Z","updatedAt":"2026-04-14T11:32:34.884Z","observedAt":"2026-04-14T11:32:34.884Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6f7ab84f-fadd-4364-8838-b3ea7448e74a","type":"episodic","key":"amazoncookbook.first-live-rollout.2026-04-14","value":"On 2026-04-14 AmazonCookBook was bootstrapped and published live on amazoncookbook.designcorp.eu. Local commits 8cda87b and 8c69cea added static export production hosting, GitHub Actions CI/deploy workflow, deploy/rollback/smoke scripts, and nginx bootstrap config. Initial certbot attempt failed with a transient Let's Encrypt ACME 'No such authorization' 404 on authz fetch; immediate retry succeeded and issued certificate /etc/letsencrypt/live/amazoncookbook.designcorp.eu/*. Final smoke passed for https://amazoncookbook.designcorp.eu/ and /books/ with HTTP 200.","confidence":0.94,"sourceRefs":["/home/admin/workspace/AmazonCookBook/docs/production-hosting.md","/etc/nginx/sites-available/amazoncookbook.designcorp.eu","/opt/designcorp/amazoncookbook/prod/releases/20260414112857-8c69cea","/home/admin/workspace/AmazonCookBook","/home/admin/letsencrypt-amazoncookbook.log"],"owner":"system","active":true,"createdAt":"2026-04-14T11:32:36.548Z","updatedAt":"2026-04-14T11:32:36.548Z","observedAt":"2026-04-14T11:32:36.548Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b6312bce-06f0-4654-b57f-6aa25c905e08","type":"procedural","key":"amazoncookbook.github-runner.2026-04-14","value":"As of 2026-04-14 AmazonCookBook has a dedicated repo-level GitHub Actions self-hosted runner named `amazoncookbook-prod`, installed in /home/admin/actions-runner/amazoncookbook and managed by systemd unit actions-runner-amazoncookbook.service. Root cause of the first queued deploy was that the existing designcorp runner was registered only to https://github.com/DesignCorporation/designcorp, so AmazonCookBook workflows could not see it. Current AmazonCookBook workflows runs-on: [self-hosted, Linux, X64] and the repo-level runner now satisfies that label set.","confidence":0.95,"sourceRefs":["/etc/systemd/system/actions-runner-amazoncookbook.service","/home/admin/actions-runner/amazoncookbook/.runner","https://github.com/DesignCorporation/AmazonCookBook/actions"],"owner":"system","active":true,"createdAt":"2026-04-14T11:40:56.599Z","updatedAt":"2026-04-14T11:40:56.599Z","observedAt":"2026-04-14T11:40:56.599Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"19341dd3-73bf-456f-968e-98e62879e9ea","type":"procedural","key":"amazoncookbook.ui.digital-atelier.2026-04-14","value":"As of 2026-04-14 AmazonCookBook adopted the `Digital Atelier` UI direction as the canonical internal workspace surface. Live routes now map to four primary product moods: `/` as Project Library, `/books/[slug]` as Production Board, `/books/[slug]/recipes/[recipeSlug]` as Asset Workspace, and `/books/[slug]/listing` as Launch Pack with integrated launch readiness. The implementation uses Newsreader + Work Sans, warm paper neutrals, serif-led editorial hierarchy, side-rail workspace layout, and smoke markers `Project Library`, `Editorial project index`, `Project Blueprint`, and `Recipe brief archive`.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/docs/digital-atelier-ui.md","/home/admin/workspace/AmazonCookBook/app/page.tsx","/home/admin/workspace/AmazonCookBook/app/books/[slug]/page.tsx","/home/admin/workspace/AmazonCookBook/app/books/[slug]/recipes/[recipeSlug]/page.tsx","/home/admin/workspace/AmazonCookBook/app/books/[slug]/listing/page.tsx","/home/admin/workspace/AmazonCookBook/app/globals.css"],"owner":"system","active":true,"createdAt":"2026-04-14T13:56:28.652Z","updatedAt":"2026-04-14T13:56:28.652Z","observedAt":"2026-04-14T13:56:28.652Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c02812c0-06cd-4a7d-ae38-3cf527f9414b","type":"profile","key":"AmazonCookBook","value":"Publishing model v2: the canonical domain registry lives in content/projects/<project-slug>/project.json and defines project -> edition -> variant. The current editorial payload remains in content/books/<workspace-slug>/..., and each variant links to one active workspace through workspaceSlug. Translations and trim-size or marketplace variants stay grouped under one project instead of being treated as unrelated books.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/docs/adr/0001-publishing-library-v2.md","/home/admin/workspace/AmazonCookBook/docs/content-model.md"],"owner":"codex","active":true,"createdAt":"2026-04-14T17:23:22.712Z","updatedAt":"2026-04-14T17:23:22.712Z","observedAt":"2026-04-14T17:23:22.712Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"dc574b36-f34e-49c6-8af4-d1861bd8bea7","type":"procedural","key":"aglaine.subscription-billing.restriction-runtime","value":"As of 2026-04-14 Aglaine runtime enforces workspace subscription billing policy end-to-end: a paid seat is consumed only by active bookable staff; catalog staff create/activate flows block exceeding paid seat quantity; overdue stages project into runtime truth as past_due_soft, growth_frozen, restricted_mode, and suspended; workspace-access and salon UI read the same restriction snapshot; suspended keeps owner-only billing recovery plus recovery export while non-owners lose operational access; support override is persisted behind AGLAINE_SUPPORT_OVERRIDE_TOKEN and suppresses effective restriction without manual data repair. Verification baseline for this packet is pnpm typecheck, pnpm test, pnpm build, and targeted server tests for seat limit, restricted mode, suspended owner recovery, and override clear/reactivation.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/seat-enforcement-and-staged-access-restrictions.md","/home/admin/workspace/aglaine/docs/06-operations/workspace-subscription-billing-runtime-baseline.md","https://github.com/DesignCorporation/Aglaine/issues/76"],"owner":"codex","active":true,"createdAt":"2026-04-14T20:58:24.883Z","updatedAt":"2026-04-14T20:58:24.883Z","observedAt":"2026-04-14T20:58:24.883Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"665c8dda-d3bc-4165-ac6d-adfd3172a5be","type":"procedural","key":"aglaine.first-day-operator-crm-polish.2026-04-14","value":"Issue #79 established the first-day salon CRM polish baseline in Aglaine. The existing queue, calendar, booking detail, and booking create routes now form an explicit operator loop with recovery actions instead of dead ends; services, staff, clients, and booking states use product-facing operator copy rather than route/module jargon; billing restriction banners explain staged access honestly; and the booking queue keeps a mobile-safe card layout for smaller widths while desktop retains the denser table. Verification baseline for this packet is pnpm typecheck, pnpm test, pnpm build, and pnpm test:smoke:dev with AGLAINE_SMOKE_SKIP_PUBLIC_HOSTS=1 so the current workspace build can be validated independently of older deployed public hosts.","confidence":0.94,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-delivery/first-day-operator-crm-polish.md","/home/admin/workspace/aglaine/apps/web/src/features/salon-page.tsx","/home/admin/workspace/aglaine/apps/web/src/features/booking-calendar-panel.tsx","/home/admin/workspace/aglaine/apps/web/src/features/catalog-management-panel.tsx","/home/admin/workspace/aglaine/apps/web/src/features/customer-relations-panel.tsx","/home/admin/workspace/aglaine/scripts/smoke/live-runtime-baseline.mjs"],"owner":"system","active":true,"createdAt":"2026-04-14T21:37:31.301Z","updatedAt":"2026-04-14T21:37:31.301Z","observedAt":"2026-04-14T21:37:31.301Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"4a3956f7-aa6a-492e-adbb-63d93eae7f39","type":"procedural","key":"freelancehunt-mcp.desktop-runtime-recovery.2026-04-15","value":"If the server-side noVNC URL for freelancehunt-mcp fails with `connect ECONNREFUSED 0.0.0.0:6080`, first verify that nothing is listening on 127.0.0.1:6080/5901/9222. The project’s desktop stack is not systemd-managed; it is started by `pnpm desktop:start` and can disappear after process loss or host changes. On 2026-04-15 recovery succeeded by starting the stack on a clean display instead of the default `:99`, because an unrelated `Xvfb :99` was already present and could conflict with the repo script. Working recovery command: `FH_DESKTOP_DISPLAY=:100 pnpm desktop:start` from `/home/admin/workspace/freelancehunt-mcp`. Successful recovery state includes `websockify` on 127.0.0.1:6080, `x11vnc` on 127.0.0.1:5901, and Chrome CDP on 127.0.0.1:9222.","confidence":0.9,"sourceRefs":["/home/admin/workspace/freelancehunt-mcp/scripts/start-desktop-browser.mjs","/home/admin/workspace/freelancehunt-mcp/docs/runbook.md","/home/admin/workspace/freelancehunt-mcp/.state/desktop-runtime/websockify.log","/home/admin/workspace/freelancehunt-mcp/.state/desktop-runtime/x11vnc.log","/home/admin/workspace/freelancehunt-mcp/.state/desktop-runtime/xvfb.log"],"owner":"system","active":true,"createdAt":"2026-04-15T15:07:31.317Z","updatedAt":"2026-04-15T15:07:31.317Z","observedAt":"2026-04-15T15:07:31.317Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"edb6c297-9ea6-49ff-b78a-66d96473bd2b","type":"procedural","key":"AmazonCookBook","value":"AmazonCookBook now has a separate Prisma/Postgres application DB foundation that does not replace the file-based editorial content layer. Local DB workflow is: copy .env.db.example to .env.db.local, run `pnpm db:up`, `pnpm db:generate`, apply migrations via `pnpm exec tsx scripts/run-prisma.ts migrate deploy`, optional local seed via `ADMIN_SEED_EMAIL=... pnpm db:seed`, and verify with `pnpm check:platform-db`. The foundation schema covers Organization, Workspace, User, Membership, AuditEvent, RevisionRecord, Job, and VisualAsset, while recipes/manuscript/listing remain in content files for now.","confidence":0.94,"sourceRefs":["/home/admin/workspace/AmazonCookBook/docs/app-database.md","/home/admin/workspace/AmazonCookBook/prisma/schema.prisma","/home/admin/workspace/AmazonCookBook/package.json"],"owner":"system","active":true,"createdAt":"2026-04-16T18:27:22.186Z","updatedAt":"2026-04-16T18:27:22.186Z","observedAt":"2026-04-16T18:27:22.186Z","expiresAt":null,"supersedes":"042038a4-de25-4ee9-b1ab-8871713305d8","supersededBy":null,"metadata":{}},{"id":"4e43b76e-434d-4c04-b49a-a0f47db11bea","type":"procedural","key":"aglaine.subscription-billing.test-mode-smoke.2026-04-17","value":"Aglaine now has a dedicated repeatable billing smoke command `pnpm test:smoke:billing` implemented by `scripts/smoke/subscription-billing-test-mode.mjs`. The command targets the live dev host by default (`AGLAINE_SMOKE_DEV_URL`, default https://dev.aglaine.designcorp.eu), reads env from repo `.env` first and then shell env, verifies owner registration and workspace creation, real Stripe test-mode customer and checkout-session creation, signed webhook replay for active/paid/duplicate/overdue lifecycle, restricted_mode projection, billing export, and support override enable/clear cycle. The command hard-fails preflight if `AGLAINE_STRIPE_SECRET_KEY`, `AGLAINE_STRIPE_WEBHOOK_SECRET`, `AGLAINE_STRIPE_BASE_PRICE_ID`, `AGLAINE_STRIPE_SEAT_PRICE_ID`, or `AGLAINE_SUPPORT_OVERRIDE_TOKEN` are missing from the command environment.","confidence":0.96,"sourceRefs":["/home/admin/workspace/aglaine/scripts/smoke/subscription-billing-test-mode.mjs","/home/admin/workspace/aglaine/package.json","/home/admin/workspace/aglaine/docs/06-operations/workspace-subscription-billing-runtime-baseline.md"],"owner":"system","active":true,"createdAt":"2026-04-17T10:43:40.865Z","updatedAt":"2026-04-17T10:43:40.865Z","observedAt":"2026-04-17T10:43:40.865Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b338a41f-b5ff-4e33-8cf6-e2ae07d5dab1","type":"procedural","key":"aglaine.subscription-billing.live-testmode-verification.2026-04-17","value":"As of 2026-04-17 Aglaine workspace subscription billing is live-verified on the dev runtime with real Stripe test-mode configuration. `pnpm test:smoke:billing` passed against https://dev.aglaine.designcorp.eu using repo `.env` values and covered owner registration, workspace creation, real Stripe customer bootstrap, real checkout session creation, signed webhook replay for activation/paid/duplicate/overdue lifecycle, owner billing portal session, `restricted_mode` projection, recovery export, and support override enable/clear with restriction restoration. Canonical documentation was synced in docs/06-operations/workspace-subscription-billing-runtime-baseline.md and docs/06-delivery/workspace-subscription-billing-foundation.md.","confidence":0.98,"sourceRefs":["/home/admin/workspace/aglaine/scripts/smoke/subscription-billing-test-mode.mjs","/home/admin/workspace/aglaine/docs/06-operations/workspace-subscription-billing-runtime-baseline.md","/home/admin/workspace/aglaine/docs/06-delivery/workspace-subscription-billing-foundation.md"],"owner":"system","active":true,"createdAt":"2026-04-17T15:07:24.240Z","updatedAt":"2026-04-17T15:07:24.240Z","observedAt":"2026-04-17T15:07:24.240Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"08630385-4b7b-4c11-8f7b-c054af4986a8","type":"procedural","key":"AmazonCookBook.interior-manifest.v1","value":"As of 2026-04-17 AmazonCookBook has a first real interior assembly contract in the file-driven content layer. The canonical schema now supports optional `content/books/<workspace-slug>/interior/manifest.json`, validated by `pnpm validate:content`, and the seeded example lives at `content/books/high-protein-high-fiber/interior/manifest.json`. The manifest currently defines trim/bleed/paper/ink, page-numbering rules, template defaults, section opener rules, per-recipe template overrides, and inserted front/back matter pages. The site remains editor+preview; interior assembly is now a validated content contract for future pagination/export rather than a website print hack.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/lib/content-schema.ts","/home/admin/workspace/AmazonCookBook/lib/content-validation.ts","/home/admin/workspace/AmazonCookBook/content/books/high-protein-high-fiber/interior/manifest.json","/home/admin/workspace/AmazonCookBook/docs/interior-manifest.md","/home/admin/workspace/AmazonCookBook/docs/interior-architecture.md"],"owner":"system","active":true,"createdAt":"2026-04-17T15:13:28.069Z","updatedAt":"2026-04-17T15:13:28.069Z","observedAt":"2026-04-17T15:13:28.069Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"808c99f5-6250-4da5-a8e6-48c0338e9444","type":"procedural","key":"AmazonCookBook.interior-assembler.v1","value":"As of 2026-04-17 AmazonCookBook has a code-level interior assembler baseline in `lib/interior-assembler.ts`, verified by `pnpm check:interior-assembler`. It resolves a variant workspace plus `interior/manifest.json` into an ordered page plan with inserted front/back matter pages, section opener pages, recipe pages with template overrides/dense fallback, blank-page insertion for right-page starts, basic Roman/Arabic pagination, TOC entries, and placeholder indexes by meal type and ingredient. It is not yet a PDF renderer; it is the canonical page-plan layer that future export jobs must consume.","confidence":0.94,"sourceRefs":["/home/admin/workspace/AmazonCookBook/lib/interior-assembler.ts","/home/admin/workspace/AmazonCookBook/scripts/check-interior-assembler.ts","/home/admin/workspace/AmazonCookBook/content/books/high-protein-high-fiber/interior/manifest.json","/home/admin/workspace/AmazonCookBook/docs/interior-architecture.md","/home/admin/workspace/AmazonCookBook/docs/publish-pipeline.md"],"owner":"system","active":true,"createdAt":"2026-04-17T15:23:03.681Z","updatedAt":"2026-04-17T15:23:03.681Z","observedAt":"2026-04-17T15:23:03.681Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c319733e-654c-4e11-8353-0623eea5f1cf","type":"procedural","key":"AmazonCookBook.interior-proof-renderer.v1","value":"As of 2026-04-17 AmazonCookBook has a dedicated proof-render layer on top of the interior assembler. The assembled review surface lives at `/books/[bookSlug]/variants/[variantSlug]/interior`, while the clean export surface lives at `/proof/books/[bookSlug]/variants/[variantSlug]/interior` and does not depend on the variant workspace shell. A working CLI export command now exists: `pnpm export:interior-proof -- --projectSlug=<slug> --variantSlug=<variantSlug>`, implemented by `scripts/export-interior-proof.ts`, which launches Chromium and renders an A4 proof PDF from the proof route using print CSS. The current default output path is `tmp/interior-proofs/<project>-<variant>-proof.pdf` with an accompanying first-page PNG screenshot.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/app/proof/books/[slug]/variants/[variantSlug]/interior/page.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/interior/VariantInteriorPreview.tsx","/home/admin/workspace/AmazonCookBook/scripts/export-interior-proof.ts","/home/admin/workspace/AmazonCookBook/README.md","/home/admin/workspace/AmazonCookBook/docs/interior-architecture.md","/home/admin/workspace/AmazonCookBook/docs/publish-pipeline.md"],"owner":"system","active":true,"createdAt":"2026-04-17T15:46:52.855Z","updatedAt":"2026-04-17T15:46:52.855Z","observedAt":"2026-04-17T15:46:52.855Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"12b1a5b0-99e1-45bc-8ccb-e1e5928cfb98","type":"procedural","key":"serveradmin.site-registry.nginx-discovery.v1.2026-04-18","value":"As of 2026-04-18, serveradmin agent auto-discovers active nginx vhosts from `/etc/nginx/sites-enabled` and backfills `/home/admin/logs/serveradmin/sites.json` with missing canonical hosts. Discovery runs on the live agent loop (default every 5 minutes via `SERVERADMIN_SITE_DISCOVERY_INTERVAL_MS`), uses the first hostname from each active `server_name` block as the canonical site id/domain, preserves existing manual metadata, and fills missing `nginxPath`, `healthUrl`, `port`, `deployPath`, `env`, `owner`, and `criticality`. This closes the earlier coverage gap where new projects existed in nginx/access logs but never entered site-down monitoring or Telegram availability alerts because the registry was still the old static 12-site set.","confidence":0.96,"sourceRefs":["/home/admin/workspace/serveradmin/src/agent.js","/home/admin/workspace/serveradmin/README.md","/home/admin/workspace/serveradmin/serveradmin.env.example"],"owner":"codex","active":true,"createdAt":"2026-04-18T21:04:59.783Z","updatedAt":"2026-04-18T21:04:59.783Z","observedAt":"2026-04-18T21:04:59.783Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"fd481811-7a9b-4b47-9dc8-15419034e70c","type":"episodic","key":"serveradmin.registry-expansion-and-live-incidents.2026-04-18","value":"On 2026-04-18 serveradmin coverage was expanded from the legacy 12-site static registry to 34 active monitored hosts by enabling nginx-backed site discovery in the live agent. Immediately after sync, serveradmin surfaced real availability incidents that had been invisible to site-down monitoring before: `chat.designcorp.eu` and `dev.chat.designcorp.eu` returned 502 because loopback ports `127.0.0.1:3032/3036` were not listening, and `swarm.designcorp.eu` returned 502 while `dc-swarm-preview.service` was failing in `ExecStartPre=/home/admin/.npm-global/bin/pnpm --dir /home/admin/workspace/dc-swarm build` with exit code 2.","confidence":0.95,"sourceRefs":["/home/admin/workspace/serveradmin/src/agent.js","/home/admin/logs/serveradmin/events.jsonl","/etc/nginx/sites-available/chat.designcorp.eu","/etc/nginx/sites-available/swarm.designcorp.eu","/etc/systemd/system/dc-swarm-preview.service"],"owner":"codex","active":true,"createdAt":"2026-04-18T21:04:59.831Z","updatedAt":"2026-04-18T21:04:59.831Z","observedAt":"2026-04-18T21:04:59.831Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a110ba59-34ce-430a-bfd6-d877112fcf31","type":"procedural","key":"AmazonCookBook.shell.split-view.v1","value":"As of 2026-04-19 AmazonCookBook no longer uses shell-level aside portal/context injection for Book Hub and Variant Studio inspectors. The canonical workspace shell pattern is left rail + topbar + page-owned split layout via components/workspace/WorkspaceSplitView.tsx, where each page renders its own right inspector as a normal second column. This replaced the previous BookProjectAside/VariantAside provider-slot-host chain because it produced empty right panels and brittle hydration/runtime behavior. Canonical CSS now keeps shell width based only on rail width, while the right inspector lives inside the content area and stacks under the main pane on smaller widths.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/components/workspace/WorkspaceSplitView.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/BookProjectShell.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/VariantShell.tsx","/home/admin/workspace/AmazonCookBook/app/globals.css"],"owner":"system","active":true,"createdAt":"2026-04-19T11:55:07.028Z","updatedAt":"2026-04-19T11:55:07.028Z","observedAt":"2026-04-19T11:55:07.028Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"bcde9cbb-771b-4f38-ba3b-5faf39faa0ba","type":"episodic","key":"dc-swarm.preview.build-typefix-recovery.2026-04-19","value":"2026-04-19: resolved swarm.designcorp.eu 502 alert by fixing a TypeScript build break in dc-swarm apps/web/src/server.ts. Root cause: handleApprovalDecisionSubmit passed optionalFormValue(form, 'returnTab') as string|undefined into resolveReturnWorkspaceTab, which requires string|null. Minimal fix: coalesce to null before the call. After pnpm build succeeded, dc-swarm-preview.service started normally, /health returned 200, and serveradmin auto-resolved the site after changing the swarm registry healthUrl from / to /health because the root route returns 303 while serveradmin OK statuses exclude 303.","confidence":0.96,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/ops/systemd/dc-swarm-preview.service","/home/admin/logs/serveradmin/sites.json","/home/admin/logs/serveradmin/events.jsonl"],"owner":"codex","active":true,"createdAt":"2026-04-19T17:30:36.559Z","updatedAt":"2026-04-19T17:30:36.559Z","observedAt":"2026-04-19T17:30:36.559Z","expiresAt":"2026-08-17T17:30:36.559Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e4e5312e-5fed-459c-bc2b-9ee9ec5646e6","type":"procedural","key":"AmazonCookBook.next-wave-backlog.2026-04-19","value":"As of 2026-04-19, after the IA/shell milestone was committed and pushed, the active next-wave backlog for AmazonCookBook is ordered as: #45 project/variant creation flows v1, #46 Interior page plan editor v1, #28 visual asset upload/linking in Content/Interior, #27 QA/readiness layer for Variant Studio and Publish workspace, #29 draft/publish workflow v1, #30 OAuth auth layer for MCP server, #10 export/publish jobs v1, and #9 as the umbrella KDP/visual operations layer. Old issue wording was updated to match the canonical IA Book Hub -> Variant Studio -> Interior/Content/Cover/Publish and to remove references to obsolete top-level screens such as separate Visuals or variant dashboard.","confidence":0.95,"sourceRefs":["https://github.com/DesignCorporation/AmazonCookBook/issues/22","https://github.com/DesignCorporation/AmazonCookBook/issues/45","https://github.com/DesignCorporation/AmazonCookBook/issues/46","https://github.com/DesignCorporation/AmazonCookBook/issues/27","https://github.com/DesignCorporation/AmazonCookBook/issues/28","https://github.com/DesignCorporation/AmazonCookBook/issues/9","https://github.com/DesignCorporation/AmazonCookBook/issues/10"],"owner":"system","active":true,"createdAt":"2026-04-19T17:32:54.569Z","updatedAt":"2026-04-19T17:32:54.569Z","observedAt":"2026-04-19T17:32:54.569Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9685f501-867c-4f29-aae4-9baa6910b597","type":"procedural","key":"serveradmin.safe-service-controls.v1.2026-04-19","value":"As of 2026-04-19, serveradmin has Safe Service Controls V1 for site-centric runtime operations. Core API surface: GET /api/sites/:id/runtime for runtime binding + structured systemd/docker target states + site health, GET /api/sites/:id/runtime/logs?target=<id>&lines=<n> for recent journalctl/docker logs on one bound target, and POST /api/v2/jobs with operation=service_control and payload.action=restart for safe restarts. Arbitrary unit/container names are never accepted from requests; backend resolves targets only from site runtime metadata (runtime.units/runtime.containers) or a controlled bootstrap map for known DesignCorp projects: serveradmin, chat, swarm, designcorp, hub, print, ui. serviceControl capability is now considered true only when explicit runtime targets are bound.","confidence":0.95,"sourceRefs":["/home/admin/workspace/serveradmin/src/ui.js","/home/admin/workspace/serveradmin/src/site-model.js","/home/admin/workspace/serveradmin/web/src/App.jsx","/home/admin/workspace/serveradmin/README.md","/home/admin/workspace/serveradmin/API_CAPABILITIES_V2.md"],"owner":"codex","active":true,"createdAt":"2026-04-19T19:09:28.650Z","updatedAt":"2026-04-19T19:09:28.650Z","observedAt":"2026-04-19T19:09:28.650Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a3fda7af-48c7-4a69-b491-c5db7d05e108","type":"episodic","key":"serveradmin.incident-cockpit.v1.2026-04-19","value":"Issue #31 implemented and deployed live in serveradmin-ui. Added GET /api/incidents/:key/cockpit with site-linked diagnosis (runtime, nginx, ssl, runtime logs, related jobs/actions, probable cause), fixed siteRuntimeStatus to use real HTTP health probe instead of basicHostStatus, and incidents feed now auto-resolves rows when a later site_resolved event exists unless reopened later. Live smoke on prod passed for swarm.designcorp.eu and serveradmin.designcorp.eu runtime health.","confidence":0.88,"sourceRefs":[],"owner":"system","active":true,"createdAt":"2026-04-19T19:42:06.647Z","updatedAt":"2026-04-19T19:42:06.647Z","observedAt":"2026-04-19T19:42:06.647Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"00c3082f-3558-4ef0-9be5-b1da8ae47246","type":"procedural","key":"serveradmin.one-click-workflows.v1.2026-04-19","value":"Serveradmin live now exposes one-click workflows via /api/workflows/{catalog,runs,preflight,run}. Supported workflows: publish_project, ssl_issue, rollback_release, grant_access. Each run uses steps preflight/apply/verify/fallback with correlation_id workflow:<id> and preserves existing approvals/risk_ack policy for high-risk apply stages. Workflow persistence in /home/admin/logs/serveradmin/workflows.json is sanitized before write/read: secret keys token, temporary_password, password are redacted from stored step details.","confidence":0.94,"sourceRefs":["local:/home/admin/workspace/serveradmin/src/ui.js","local:/home/admin/workspace/serveradmin/web/src/App.jsx","github:DesignCorporation/serveradmin#32"],"owner":"designcorp","active":true,"createdAt":"2026-04-19T20:07:27.784Z","updatedAt":"2026-04-19T20:07:27.784Z","observedAt":"2026-04-19T20:07:27.784Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1a28d65e-1397-4be8-a838-1bf0f24ed95d","type":"procedural","key":"serveradmin.health-policy-v2-onboarding-v1.2026-04-19","value":"Serveradmin live site model now includes healthPolicy (probeType, expectedStatuses, followRedirects, source) and managedStatus (managed, missing, warnings, summary). Agent discovery auto-tunes canonical health checks for discovery-managed sites without overwriting explicit settings: root 401 -> auth-expected, root redirect plus /health 200 -> canonical /health, root redirect only -> redirect-ok. Projects/Sites form now includes nginxPath, healthUrl, healthPolicy, runtime targets, and backup mode so onboarding can complete in-product.","confidence":0.94,"sourceRefs":["local:/home/admin/workspace/serveradmin/src/site-model.js","local:/home/admin/workspace/serveradmin/src/agent.js","local:/home/admin/workspace/serveradmin/src/ui.js","local:/home/admin/workspace/serveradmin/web/src/App.jsx","github:DesignCorporation/serveradmin#33","github:DesignCorporation/serveradmin#36"],"owner":"designcorp","active":true,"createdAt":"2026-04-19T20:19:22.796Z","updatedAt":"2026-04-19T20:19:22.796Z","observedAt":"2026-04-19T20:19:22.796Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"640ab9ac-efc9-45ef-9004-b35fff800d46","type":"procedural","key":"serveradmin.backend-route-modularization.phase1.2026-04-19","value":"As of 2026-04-19, serveradmin prod route-level V3 API handling is split out of src/ui.js into src/ui-api/{approvals,workflows,jobs,sites,runtime,deploy,nginx,incidents,access,health,ssl,backup}.js and composed through modularApiHandlers. This refactor preserves the live API contract while making route-domain changes safer; however src/ui.js is not yet a fully thin composition layer because substantial domain service logic still remains there. Verification baseline: node --check on src/ui.js and src/ui-api/*.js, temporary local smoke on port 3398, live deploy to /opt/designcorp/serveradmin/prod/app/src, restart serveradmin-ui.service, and live API smoke on 127.0.0.1:3099 for workflows/jobs/runtime/backup/incidents/ssl routes.","confidence":0.93,"sourceRefs":["/home/admin/workspace/serveradmin/src/ui.js","/home/admin/workspace/serveradmin/src/ui-api/index.js","/home/admin/workspace/serveradmin/README.md","https://github.com/DesignCorporation/serveradmin/commit/af67209","https://github.com/DesignCorporation/docs/commit/5bae048"],"owner":"system","active":true,"createdAt":"2026-04-19T20:46:25.243Z","updatedAt":"2026-04-19T20:46:25.243Z","observedAt":"2026-04-19T20:46:25.243Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"385c99d5-8a4c-4254-9918-d290d9a707ae","type":"procedural","key":"gmg_phase_copy_calibration","value":"GMG stakeholder review pattern from Lilia: prefer direct public-facing copy, shorter hero headlines and ledes, remove meta-language like 'this page should/this route should', remove redundant explainer sections and logic sidebars, use short neutral CTA labels such as 'More', and prefer real GMG materials over stock-feeling imagery. Apply this calibration to gmg3 before stakeholder review.","confidence":0.95,"sourceRefs":["/home/admin/workspace/gmg/docs/gmg3-lilia-calibration-2026-04-21.md"],"owner":"system","active":true,"createdAt":"2026-04-21T11:18:36.976Z","updatedAt":"2026-04-21T11:18:36.976Z","observedAt":"2026-04-21T11:18:36.976Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f22aff51-1635-4f4e-b6b8-822285d4ae86","type":"procedural","key":"serveradmin_v3_decomposition_state","value":"На 2026-04-21 в serveradmin закрыты issues #29 #30 #31 #32 #33 #35 #36. Issue #34 остаётся открытой: route-level backend decomposition и frontend decomposition phase 2 уже доставлены, но критерий thin composition layer для src/ui.js ещё не выполнен полностью. Prod backend работает через src/ui-api/* + src/ui-html.js; frontend работает через thin App shell + useServerAdminApp hook + section components.","confidence":0.95,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-21T11:45:46.033Z","updatedAt":"2026-04-21T11:45:46.033Z","observedAt":"2026-04-21T11:45:46.033Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"fdf01d47-0e66-46e2-bdca-9a42fc0fbcc0","type":"episodic","key":"serveradmin_phase2_frontend_backend_push_2026_04_21","value":"2026-04-21: pushed serveradmin commit db59af2 to branch codex/serveradmin-v3-workflows-health and docs commit 71949d7 to main. Live prod serveradmin already served the refactored backend/frontend; smoke confirmed 200 on /api/workflows/catalog, /api/incidents/feed?limit=1, /api/resources/sites?limit=1, /api/admin/actions using the prod API token from /home/admin/.config/serveradmin/serveradmin.prod.env. GitHub issue #35 closed as completed; issue #34 commented and left open pending further service extraction from src/ui.js.","confidence":0.95,"sourceRefs":[],"owner":"codex","active":true,"createdAt":"2026-04-21T11:45:51.708Z","updatedAt":"2026-04-21T11:45:51.708Z","observedAt":"2026-04-21T11:45:51.708Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e97a63ac-4fea-491c-8800-1d515e0d7c23","type":"procedural","key":"serveradmin.v4.operator-ready-backlog.2026-04-21","value":"As of 2026-04-21, the active productization cycle for serveradmin is V4 tracked under GitHub epic #38 `Serveradmin V4: operator-ready control plane и product polish`. Child tasks are #39 Home Cockpit V1, #40 Guided Project Onboarding V2, #41 Recovery Center V1, #42 Approval Inbox V2, #43 Secrets & Credentials Center V1, #44 SLO & Monitoring Workspace V1, and #45 In-product Runbooks & Help V1. This cycle is explicitly product/UX oriented rather than backend decomposition work.","confidence":0.95,"sourceRefs":["https://github.com/DesignCorporation/serveradmin/issues/38","https://github.com/DesignCorporation/serveradmin/issues/39","https://github.com/DesignCorporation/serveradmin/issues/40","https://github.com/DesignCorporation/serveradmin/issues/41","https://github.com/DesignCorporation/serveradmin/issues/42","https://github.com/DesignCorporation/serveradmin/issues/43","https://github.com/DesignCorporation/serveradmin/issues/44","https://github.com/DesignCorporation/serveradmin/issues/45"],"owner":"codex","active":true,"createdAt":"2026-04-21T14:50:31.164Z","updatedAt":"2026-04-21T14:50:31.164Z","observedAt":"2026-04-21T14:50:31.164Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ade83aa8-71c7-47b4-ab73-87f2ed701fb3","type":"procedural","key":"serveradmin.operator-home-cockpit.v1.2026-04-21","value":"Serveradmin live UI now has an operator-first home cockpit in Overview. The page prioritizes Operator Queue (active incidents, pending approvals, failed jobs, setup blockers), Readiness Blockers (projects not yet managed), and Recent Changes (workflow runs, backups, releases). Hero quick actions now route to the next useful screen/context instead of static module jumps. Implementation lives in web/src/hooks/useServerAdminApp.js, web/src/sections/OverviewSection.jsx, and web/src/styles.css; delivered in commit 7473648 on branch codex/serveradmin-v4-operator-ready and synced to /opt/designcorp/serveradmin/prod/web-dist.","confidence":0.95,"sourceRefs":["/home/admin/workspace/serveradmin/web/src/hooks/useServerAdminApp.js","/home/admin/workspace/serveradmin/web/src/sections/OverviewSection.jsx","/home/admin/workspace/serveradmin/web/src/styles.css","/home/admin/workspace/serveradmin/README.md","https://github.com/DesignCorporation/serveradmin/commit/7473648","https://github.com/DesignCorporation/serveradmin/issues/39"],"owner":"codex","active":true,"createdAt":"2026-04-21T14:50:31.196Z","updatedAt":"2026-04-21T14:50:31.196Z","observedAt":"2026-04-21T14:50:31.196Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d0609b9f-0441-4b15-b490-486273d9baa9","type":"procedural","key":"AmazonCookBook.interior-pdf-draft-export.v1","value":"As of 2026-04-21, AmazonCookBook variant header can rebuild and download the current draft interior PDF through `/api/books/<slug>/variants/<variantSlug>/interior-pdf/` and `/download/`. The build path must render the authenticated draft-proof surface `/draft/books/<slug>/variants/<variantSlug>/interior/`, not the public `/proof/.../interior` route, because public proof remains published-only after the published-boundary work. Export scripts load `.env.local` via `loadPlatformDbEnv()` so UI auth session cookies can be generated for Playwright proof/export runs.","confidence":0.98,"sourceRefs":["/home/admin/workspace/AmazonCookBook/components/workspace/VariantPdfActions.tsx","/home/admin/workspace/AmazonCookBook/app/api/books/[slug]/variants/[variantSlug]/interior-pdf/route.ts","/home/admin/workspace/AmazonCookBook/app/api/books/[slug]/variants/[variantSlug]/interior-pdf/download/route.ts","/home/admin/workspace/AmazonCookBook/app/draft/books/[slug]/variants/[variantSlug]/interior/page.tsx","/home/admin/workspace/AmazonCookBook/scripts/export-interior-print-ready.ts","/home/admin/workspace/AmazonCookBook/scripts/lib/proof-auth.ts","/home/admin/workspace/AmazonCookBook/docs/publish-pipeline.md","/home/admin/workspace/AmazonCookBook/README.md"],"owner":"system","active":true,"createdAt":"2026-04-21T17:17:27.722Z","updatedAt":"2026-04-21T17:17:27.722Z","observedAt":"2026-04-21T17:17:27.722Z","expiresAt":null,"supersedes":"2cb02c10-ca80-44e1-a533-a87282e03854","supersededBy":null,"metadata":{}},{"id":"57a56e9a-683a-4c93-8e25-ce59bb61e119","type":"procedural","key":"gmg3.css.layering.2026-04-21","value":"As of 2026-04-21, gmg3 CSS is organized as one shared baseline with compatibility entrypoints. `phase1-system.css` is now a wrapper importing `/styles/site-tokens.css`, `/styles/site-base.css`, and `/styles/site-shell-sections.css`. `phase1-landing.css` is a wrapper importing `/styles/site-page-patterns.css` and `/styles/site-draft-pages.css`. Phase 2 must not introduce a separate CSS dialect; new pages extend this shared baseline only.","confidence":0.96,"sourceRefs":["/home/admin/workspace/gmg/public/gmg3-preview/phase1-system.css","/home/admin/workspace/gmg/public/gmg3-preview/phase1-landing.css","/home/admin/workspace/gmg/docs/gmg3-css-architecture-2026-04-21.md"],"owner":"system","active":true,"createdAt":"2026-04-21T18:00:03.451Z","updatedAt":"2026-04-21T18:00:03.451Z","observedAt":"2026-04-21T18:00:03.451Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"94737628-f89b-44d3-b457-24761a47ee43","type":"procedural","key":"AmazonCookBook.backlog.state.2026-04-23","value":"Owner correction on 2026-04-23: do not treat old AmazonCookBook next-wave backlog items #45/#46/#28/#27 as open by default; those tasks are considered closed or substantially implemented. Future audits should verify current repo/app state first rather than relying on the stale 2026-04-19 memory record.","confidence":0.9,"sourceRefs":["user_directive_2026-04-23_chat"],"owner":"codex","active":true,"createdAt":"2026-04-23T22:22:33.640Z","updatedAt":"2026-04-23T22:22:33.640Z","observedAt":"2026-04-23T22:22:33.640Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"587ad664-3da8-4d43-92c6-f3d63e93f31c","type":"episodic","key":"AmazonCookBook.recipe-page-performance.2026-04-23","value":"On 2026-04-23 AmazonCookBook recipe detail slowdown was traced to `assembleVariantInterior()` calling `contentService.getFullRecipeBySlug()` repeatedly inside full-book assembly, causing repeated content snapshot rebuilds. The assembler was changed to take one content snapshot per assembly and build a `fullRecipesBySlug` map; the recipe detail page also uses the already-loaded `book.recipes` list instead of calling `getRecipeBySlug`. Microbenchmark for `high-protein-high-fiber/paperback-primary/mediterranean-salmon-power-bowl`: assembly dropped from about 2560ms to about 22-37ms. Verification passed: `pnpm check:interior-assembler`, `pnpm check:kdp-package`, `pnpm check:mcp-read-tools`, `pnpm typecheck`, and `pnpm build`.","confidence":0.96,"sourceRefs":["/home/admin/workspace/AmazonCookBook/lib/interior-assembler.ts","/home/admin/workspace/AmazonCookBook/app/books/[slug]/variants/[variantSlug]/recipes/[recipeSlug]/page.tsx","/home/admin/workspace/AmazonCookBook/scripts/check-mcp-read-tools.ts"],"owner":"codex","active":true,"createdAt":"2026-04-23T23:11:49.981Z","updatedAt":"2026-04-23T23:11:49.981Z","observedAt":"2026-04-23T23:11:49.981Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b984cfe1-d434-454a-84e5-ecbac223fe20","type":"procedural","key":"AmazonCookBook.visual-print-preflight.v1","value":"As of 2026-04-24 AmazonCookBook has a print photo preflight pipeline and UI. CLI commands: `pnpm visual:preflight --project <projectSlug> --variant <variantSlug>` writes reports under `local-assets/amazoncookbook/reports/visual-preflight/`; `pnpm visual:upscale --project <projectSlug> --variant <variantSlug>` dry-runs ImageMagick Lanczos print-master generation, and `--write` creates local print masters under `local-assets/amazoncookbook/print-masters/`. The Variant Studio `/books/<project>/variants/<variant>/visuals/` route is now a Print Photos workspace showing 300 DPI readiness, missing masters, regenerate/upscale statuses, terminal commands, and filterable recipe rows. Heavy masters/reports remain ignored in local-assets/tmp; committed runtime code is in commits 6493d91 and 2fe776f.","confidence":0.96,"sourceRefs":["/home/admin/workspace/AmazonCookBook/lib/visual-print-preflight.ts","/home/admin/workspace/AmazonCookBook/scripts/preflight-visual-print.ts","/home/admin/workspace/AmazonCookBook/scripts/upscale-visual-print.ts","/home/admin/workspace/AmazonCookBook/components/workspace/VariantPrintPhotosWorkspace.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/VariantPrintPhotosTable.tsx","/home/admin/workspace/AmazonCookBook/docs/asset-storage.md","git:6493d91","git:2fe776f"],"owner":"codex","active":true,"createdAt":"2026-04-24T14:09:35.041Z","updatedAt":"2026-04-24T14:09:35.041Z","observedAt":"2026-04-24T14:09:35.041Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1291fed1-4006-4647-9a92-3b6648426dbe","type":"procedural","key":"AmazonCookBook.visual-batch-ingest.v1","value":"As of 2026-04-24 AmazonCookBook has a local batch recipe photo ingest workflow in commit 4608d3b. Put generated recipe images in `local-assets/amazoncookbook/incoming/<projectSlug>/` and run `pnpm visual:batch-ingest --project <projectSlug> --variant <variantSlug>` for dry-run or add `--write` to ingest. Filenames are matched by recipe slug or normalized recipe title; unmatched/ambiguous names are reported instead of guessed. The command writes deterministic `recipe-main-<recipeSlug>` visual groups, marks new groups primary, approves recipe imageStatus by default unless `--no-approve`, skips recipes with existing local masters unless `--replace`, and writes reports under `local-assets/amazoncookbook/reports/visual-batch-ingest/`.","confidence":0.96,"sourceRefs":["/home/admin/workspace/AmazonCookBook/scripts/batch-ingest-visual-assets.ts","/home/admin/workspace/AmazonCookBook/docs/asset-storage.md","/home/admin/workspace/AmazonCookBook/lib/visual-ingest-service.ts","git:4608d3b"],"owner":"codex","active":true,"createdAt":"2026-04-24T14:25:18.902Z","updatedAt":"2026-04-24T14:25:18.902Z","observedAt":"2026-04-24T14:25:18.902Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0dc09a6a-5288-4dfe-ba1a-bd023523ff3b","type":"procedural","key":"AmazonCookBook.github-runner-node-runtime.2026-04-24","value":"On 2026-04-24 AmazonCookBook deploy-prod failed on the self-hosted runner before checkout because workflow env `FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true` made JS actions call `/home/admin/actions-runner/amazoncookbook/externals/node24/bin/node`, but runner auto-update to `externals.2.334.0` lacked `bin/node` symlinks. Fix applied without sudo: `ln -s /usr/bin/node /home/admin/actions-runner/amazoncookbook/externals.2.334.0/node20/bin/node` and the same for `node24/bin/node`. Rerun `24895667990` then passed and deployed commit `4608d3b`; live smoke with redirects followed returned 200 for `/`, `/books/`, and `/login/`. If runner updates again, check new `externals.<version>/node20/bin/node` and `node24/bin/node` before blaming app builds.","confidence":0.96,"sourceRefs":["https://github.com/DesignCorporation/AmazonCookBook/actions/runs/24895667990","/home/admin/actions-runner/amazoncookbook/externals.2.334.0","/home/admin/workspace/AmazonCookBook/.github/workflows/deploy-prod.yml"],"owner":"codex","active":true,"createdAt":"2026-04-24T14:54:12.268Z","updatedAt":"2026-04-24T14:54:12.268Z","observedAt":"2026-04-24T14:54:12.268Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"34bc49ae-da6e-4cce-a0f5-b8e6d05daf9c","type":"episodic","key":"AmazonCookBook.balanced-lunch-photos-ingested.2026-04-24","value":"On 2026-04-24, 15 Balanced Lunches recipe photos were batch ingested for `high-protein-high-fiber/paperback-primary` in local commit `1894a02`. Dry-run matched all 15 uploaded files with 0 unmatched/failed. Write run ingested 15 deterministic recipe-main visual groups, marked Balanced Lunches recipes imageStatus approved, and created public derivatives. Verification passed: `pnpm validate:content`, `pnpm visual:preflight --project high-protein-high-fiber --variant paperback-primary`, and `pnpm build`. Preflight improved to Ready 30, regenerate 1 (`mediterranean-salmon-power-bowl`), missing visual 69.","confidence":0.94,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/books/high-protein-high-fiber/section-datasets/balanced-lunches.json","/home/admin/workspace/AmazonCookBook/content/books/high-protein-high-fiber/visuals/assets.json","/home/admin/workspace/AmazonCookBook/public/assets/workspace/visuals/high-protein-high-fiber","git:1894a02"],"owner":"codex","active":true,"createdAt":"2026-04-24T17:06:24.918Z","updatedAt":"2026-04-24T17:06:24.918Z","observedAt":"2026-04-24T17:06:24.918Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ad016018-207c-4e53-a048-22548f60e93e","type":"episodic","key":"AmazonCookBook.power-bowl-photos-ingested.2026-04-24","value":"On 2026-04-24, 15 Bowls, Salads & Power Plates photos were batch ingested for `high-protein-high-fiber/paperback-primary` in local commit `0d162be`. Dry-run found 14 planned and 1 existing skip for `mediterranean-salmon-power-bowl`; write was intentionally run with `--replace` to replace the old low-DPI Mediterranean Salmon visual. Verification passed: `pnpm validate:content`, `pnpm visual:preflight --project high-protein-high-fiber --variant paperback-primary`, and `pnpm build`. Preflight is now Ready 45, regenerate 0, missing visual 55.","confidence":0.94,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/books/high-protein-high-fiber/section-datasets/bowls-salads-power-plates.json","/home/admin/workspace/AmazonCookBook/content/books/high-protein-high-fiber/visuals/assets.json","/home/admin/workspace/AmazonCookBook/public/assets/workspace/visuals/high-protein-high-fiber","git:0d162be"],"owner":"codex","active":true,"createdAt":"2026-04-24T17:25:15.901Z","updatedAt":"2026-04-24T17:25:15.901Z","observedAt":"2026-04-24T17:25:15.901Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0e0dc4ac-0773-4faa-b51d-ca883ed382e7","type":"episodic","key":"AmazonCookBook.remaining-photos-ingested.2026-04-24","value":"On 2026-04-24, the remaining 55 uploaded recipe photos for high-protein-high-fiber/paperback-primary were batch ingested from recursive category folders in local commit b25818a. The import skipped 30 existing Balanced Lunches/Bowls photos without replacement, had 0 unmatched/failed files, and updated recipe imageStatus plus public derivatives for Satisfying Dinners, Soups/Stews/Skillets, Snacks/Dips/Small Bites, and Sauces/Dressings/Meal Prep Staples. Verification passed: pnpm validate:content, pnpm visual:preflight --project high-protein-high-fiber --variant paperback-primary, pnpm build. Preflight now has 100 checked assets with missing visual/master 0, regenerate 0, ready 92 and 8 upscale_recommended; local ImageMagick print masters were created for those 8 under ignored local-assets/amazoncookbook/print-masters.","confidence":0.94,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/books/high-protein-high-fiber/visuals/assets.json","/home/admin/workspace/AmazonCookBook/public/assets/workspace/visuals/high-protein-high-fiber","git:b25818a"],"owner":"codex","active":true,"createdAt":"2026-04-24T21:56:53.238Z","updatedAt":"2026-04-24T21:56:53.238Z","observedAt":"2026-04-24T21:56:53.238Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"8cff866d-b8a5-4770-9ffb-50e564ebc759","type":"episodic","key":"AmazonCookBook.interior-backmatter-polish.2026-04-24","value":"On 2026-04-24 AmazonCookBook local commit 95d8e1b polished the high-protein-high-fiber paperback interior after editorial review. Removed production placeholder copy from Copyright/TOC/index intros, changed the current About page to final-safe About the Publisher, replaced mechanical ingredient token extraction with a curated ingredient index whitelist, fixed false Olives entries from olive oil, and made ingredient-index pagination more conservative after PDF page 119 overflowed. Verification passed: validate:content, check:interior-assembler, check:interior-preflight, check:kdp-package, typecheck, visual:preflight, build, fresh local export:interior-print, fresh export:cover, export:kdp-package, pdftotext scans for production phrases/bad index entries, and rendered PDF page 119 screenshot review. Fresh print-ready PDF is local-assets/amazoncookbook/exports/interior/high-protein-high-fiber-paperback-primary-print-ready.pdf; page count is now 140.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/books/high-protein-high-fiber/manuscript-sections","/home/admin/workspace/AmazonCookBook/lib/interior-assembler.ts","git:95d8e1b"],"owner":"codex","active":true,"createdAt":"2026-04-24T23:34:41.851Z","updatedAt":"2026-04-24T23:34:41.851Z","observedAt":"2026-04-24T23:34:41.851Z","expiresAt":null,"supersedes":"6cf2f045-b7bf-42fd-8143-55d1c8f0f23c","supersededBy":null,"metadata":{}},{"id":"b853261d-2cfd-43bf-b72b-90d462f60110","type":"procedural","key":"AmazonCookBook.us-standard-color-launch-target.2026-04-25","value":"As of 2026-04-25, high-protein-high-fiber/paperback-primary is configured as the US launch proof variant: paperback, amazon.com, 8.5x11, white paper, standard_color, no interior bleed, 140 pages, public authorName `Design Corporation`. KDP cover geometry uses mandatory 0.125in cover bleed independent of interior bleed and standard-color paperback spine multiplier 0.002252, producing cover size 17.56528in x 11.25in and spine width 0.31528in for 140 pages. The print-ready cover front image derivative was upscaled to 2588x3659 and verified in the cover PDF at 300 PPI.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/books/high-protein-high-fiber/interior/manifest.json","/home/admin/workspace/AmazonCookBook/content/projects/high-protein-high-fiber/project.json","/home/admin/workspace/AmazonCookBook/lib/kdp-geometry.ts","/home/admin/workspace/AmazonCookBook/local-assets/amazoncookbook/exports/kdp-packages/high-protein-high-fiber-paperback-primary/kdp-checklist.md"],"owner":"codex","active":true,"createdAt":"2026-04-25T16:23:10.865Z","updatedAt":"2026-04-25T16:23:10.865Z","observedAt":"2026-04-25T16:23:10.865Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a3be0cfc-7299-44cc-a9b3-43b2c83aa668","type":"episodic","key":"aglaine.security-headers-rate-limit-baseline.issue-88","value":"On 2026-04-25 Aglaine audit branch audit/aglaine-mvp-ordering-20260425 gained commit beb091b for issue #88: API responses now get baseline security headers, production nginx template defines SPA CSP and shared /api/auth/* limit_req_zone throttling, auth rate-limit IP resolution trusts X-Forwarded-For only from local reverse proxy, and rollout docs were updated. Verified with typecheck, full tests (118/118), build, billing smoke, release smoke, dev smoke rerun, web bundle marker scan, secret pattern scan, and non-root transformed nginx syntax test. Not applied to live prod/nginx yet.","confidence":0.92,"sourceRefs":["/home/admin/workspace/aglaine/apps/api/src/http/security.ts","/home/admin/workspace/aglaine/ops/nginx/aglaine.designcorp.eu.conf","/home/admin/workspace/aglaine/docs/06-operations/security-headers-and-rate-limit-baseline.md","https://github.com/DesignCorporation/Aglaine/issues/88#issuecomment-4320334745"],"owner":"codex","active":true,"createdAt":"2026-04-25T18:58:23.713Z","updatedAt":"2026-04-25T18:58:23.713Z","observedAt":"2026-04-25T18:58:23.713Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"2e8ba1cd-84b6-414c-9bad-0cde8c7ee7e3","type":"episodic","key":"aglaine.release-candidate-go-live-playbook.issue-81","value":"On 2026-04-25 Aglaine audit branch audit/aglaine-mvp-ordering-20260425 gained commit 628100b for issue #81: docs/06-operations/release-candidate-go-live-playbook.md now defines MVP go/no-go gates, production env checklist, pre-release/deployment/post-release smoke, billing support procedures including support override grant/clear, rollback criteria, release note, and known limitations. Linked from operations/docs index and verification strategy. Verified with typecheck, tests (118/118), build, release smoke, web bundle seed marker scan, and git diff --check. Live production still gated by #84 owner-approved merge/deploy/nginx reload/post-release smoke.","confidence":0.9,"sourceRefs":["/home/admin/workspace/aglaine/docs/06-operations/release-candidate-go-live-playbook.md","/home/admin/workspace/aglaine/docs/05-migration/verification-strategy.md","https://github.com/DesignCorporation/Aglaine/issues/81#issuecomment-4320344757"],"owner":"codex","active":true,"createdAt":"2026-04-25T19:03:45.701Z","updatedAt":"2026-04-25T19:03:45.701Z","observedAt":"2026-04-25T19:03:45.701Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"984f8b54-c13b-41b8-98c4-a9c835cc9c99","type":"episodic","key":"aglaine.production-release-smoke-metadata.issue-84","value":"On 2026-04-25 Aglaine audit branch audit/aglaine-mvp-ordering-20260425 gained commit adc8f3b for issue #84 repo-side preparation: web index metadata changed from Aglaine Dev/phase-1 dev wording to production-safe Aglaine metadata, and scripts/deploy/smoke-release.sh now fails on dev/internal metadata markers plus checks SPA fallback entrypoints /login, /register, and /salon/onboarding/new when PUBLIC_SALON_URL is set. Verified with build, tests (118/118), PUBLIC_SALON_URL=https://dev.aglaine.designcorp.eu release smoke, web bundle marker scan, and git diff --check. Live prod deploy still requires owner-approved merge/deploy/env/nginx/post-release smoke.","confidence":0.9,"sourceRefs":["/home/admin/workspace/aglaine/apps/web/index.html","/home/admin/workspace/aglaine/scripts/deploy/smoke-release.sh","/home/admin/workspace/aglaine/docs/06-operations/release-candidate-go-live-playbook.md","https://github.com/DesignCorporation/Aglaine/issues/84#issuecomment-4320350665"],"owner":"codex","active":true,"createdAt":"2026-04-25T19:07:04.149Z","updatedAt":"2026-04-25T19:07:04.149Z","observedAt":"2026-04-25T19:07:04.149Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"efeedb55-aa19-48f4-a0d5-bb790e69cd1a","type":"episodic","key":"aglaine.audit-branch-draft-pr-89","value":"On 2026-04-25 draft PR #89 was opened from audit/aglaine-mvp-ordering-20260425 into main for the Aglaine MVP release hardening audit packet. Latest head at creation was adc8f3b. PR is intentionally draft/reviewable only; merge and production deployment remain separate owner-approved actions, with #84 as the live rollout gate.","confidence":0.9,"sourceRefs":["https://github.com/DesignCorporation/Aglaine/pull/89","https://github.com/DesignCorporation/Aglaine/issues/87#issuecomment-4320353300"],"owner":"codex","active":true,"createdAt":"2026-04-25T19:08:19.860Z","updatedAt":"2026-04-25T19:08:19.860Z","observedAt":"2026-04-25T19:08:19.860Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d5ce198a-6bae-4e46-a191-ee036b20ea29","type":"episodic","key":"aglaine.pr-89-production-env-gate-20260425","value":"Aglaine PR #89 head e148eb3 is pushed, draft, mergeStateStatus CLEAN, and GitHub CI verify passed. Added scripts/deploy/preflight-runtime-config.mjs and deploy-release.sh runs NODE_ENV=production AGLAINE_ENV_FILE preflight after build and before db:migrate/symlink/service restart. Production deploy is intentionally blocked because /opt/designcorp/aglaine/prod/shared/aglaine.env fails production runtime preflight: public seed admin vars are still configured (ADMIN_SEED_EMAIL and related vars). After simulating seed var removal, next blocker is missing SMTP production delivery config (AGLAINE_EMAIL_DELIVERY_TRANSPORT=smtp plus SMTP host/from/port/secure/credentials if needed). No merge/deploy performed.","confidence":0.95,"sourceRefs":["https://github.com/DesignCorporation/Aglaine/pull/89#issuecomment-4320473774","https://github.com/DesignCorporation/Aglaine/issues/84#issuecomment-4320473977","https://github.com/DesignCorporation/Aglaine/issues/87#issuecomment-4320474207"],"owner":"codex","active":true,"createdAt":"2026-04-25T20:18:38.397Z","updatedAt":"2026-04-25T20:18:38.397Z","observedAt":"2026-04-25T20:18:38.397Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7507f39d-8998-4d52-bb8a-1457908b3d95","type":"episodic","key":"aglaine.production-env-smtp-gate-resolved-20260425","value":"On 2026-04-25 the Aglaine production env gate was resolved. Existing DesignCorp SMTP config from /opt/designcorp/designcorp/prod/.env was mapped into /opt/designcorp/aglaine/prod/shared/aglaine.env using Aglaine AGLAINE_EMAIL_* and AGLAINE_SMTP_* keys, public ADMIN_SEED_* vars were removed, and PUBLIC_SALON_URL=https://salon.aglaine.designcorp.eu was added. Backup created at /opt/designcorp/aglaine/prod/shared/aglaine.env.bak-20260425211353. Verification passed: shell source check, AGLAINE_ENV_FILE=/opt/designcorp/aglaine/prod/shared/aglaine.env node scripts/deploy/preflight-runtime-config.mjs, and SMTP nodemailer.verify() without sending an email. PR #89 remains draft; merge/deploy remains owner-approved.","confidence":0.95,"sourceRefs":["https://github.com/DesignCorporation/Aglaine/pull/89#issuecomment-4320571122","https://github.com/DesignCorporation/Aglaine/issues/84#issuecomment-4320571515","/opt/designcorp/aglaine/prod/shared/aglaine.env","/opt/designcorp/aglaine/prod/shared/aglaine.env.bak-20260425211353"],"owner":"codex","active":true,"createdAt":"2026-04-25T21:15:27.798Z","updatedAt":"2026-04-25T21:15:27.798Z","observedAt":"2026-04-25T21:15:27.798Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f9e52349-f7b9-4690-b80f-aa535ad7a69e","type":"episodic","key":"aglaine.salon-create-access-activation-route-split-20260426","value":"On 2026-04-26 Aglaine PR #89 gained commit 8fa6bac to fix the user-reported create-new-salon regression: /salon/onboarding/new is now only the new-salon registration form, while access activation for the selected workspace lives at /salon/access/activate. The bug was caused by overloading /salon/onboarding/new with activation when the active workspace still required trial/access selection. Live smoke now asserts that /salon/onboarding/new does not show the activation CTA after workspace creation and that /salon/access/activate shows activation separately. Verified with web tsc, pnpm typecheck, pnpm test 118/118, pnpm build, release smoke, live dev smoke, and GitHub Actions ci/verify pass.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/apps/web/src/App.tsx","/home/admin/workspace/aglaine/apps/web/src/features/salon-page.tsx","/home/admin/workspace/aglaine/scripts/smoke/live-runtime-baseline.mjs","https://github.com/DesignCorporation/Aglaine/pull/89#issuecomment-4322901984"],"owner":"codex","active":true,"createdAt":"2026-04-26T20:12:05.954Z","updatedAt":"2026-04-26T20:12:05.954Z","observedAt":"2026-04-26T20:12:05.954Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"742a9cc7-848c-4c39-ab0c-7a5a9a577715","type":"episodic","key":"incident-2026-04-27-amazoncookbook-next-rsc-xmrig","value":"2026-04-27 P0 host IOC: fake /var/tmp/systemd-logind XMRig miner launched with config.json (pool 62.60.246.210:443, algo rx/0, user NEUGLOBALLY799911) via dev.amazoncookbook.designcorp.eu RCE path /zlQsmH and /LkfJQa?z=... from attacker IP 138.124.123.107. Remediation: quarantine binary/config/proc evidence, remove admin @reboot cron, stop miner, block exact /LkfJQa and any arg_z in amazon cookbook nginx prod/dev, upgrade AmazonCookBook from vulnerable Next 15.3.2/React 19.0.0 to Next 15.5.15/React 19.1.2, deploy prod/dev, update serveradmin IOC logic to avoid scanner false positives and key host IOC by command. Follow-up: rotate AmazonCookBook runtime secrets/passwords exposed to the process during RCE window 2026-04-27 08:41-10:04 UTC; push local commits only after owner approval.","confidence":0.95,"sourceRefs":["/home/admin/quarantine/20260427T105802Z-xmrig-reinfection","/home/admin/workspace/AmazonCookBook@80984f1","/home/admin/workspace/serveradmin@8ae528d"],"owner":"serveradmin","active":true,"createdAt":"2026-04-27T11:19:26.265Z","updatedAt":"2026-04-27T11:19:26.265Z","observedAt":"2026-04-27T11:19:26.265Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1bac0148-efd8-425e-ad42-886c8a2157cb","type":"episodic","key":"incident-2026-04-27-swarm-health-flapping","value":"2026-04-27 swarm.designcorp.eu health alerts flapped with curl exit 28. Root cause was dc-swarm preview Node event loop pressure: gateway runtime dispatch ran every 250ms and task scheduler/attached sync also scanned sqlite sessions, while listSessions cost about 168ms on the live preview store. Direct backend and nginx/TLS health probes took 6-10s before the fix. Remediation: commit 9dc5310 adds DC_SWARM_RUNTIME_DISPATCH_INTERVAL_MS, live dc-swarm-preview.service sets runtime dispatch 30000ms, task scheduler 120000ms, attached sync 180000ms, then systemd daemon-reload/restart. After restart, public health probe via nginx/TLS returned 200 in about 5-18ms, 35s CPU sample was about 0.8%, and serveradmin had 0 active swarm incidents.","confidence":0.95,"sourceRefs":["/home/admin/workspace/dc-swarm@9dc5310","/etc/systemd/system/dc-swarm-preview.service","/home/admin/logs/serveradmin/events.jsonl"],"owner":"serveradmin","active":true,"createdAt":"2026-04-27T14:03:24.034Z","updatedAt":"2026-04-27T14:03:24.034Z","observedAt":"2026-04-27T14:03:24.034Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e39b6047-b044-43e0-8218-67f8854199ba","type":"episodic","key":"amazoncookbook-2026-04-28-mcp-hardening-scale-followup","value":"AmazonCookBook follow-up completed 2026-04-28: UI owner password/session secret/internal MCP proxy secret rotated; dev/prod env updated; nginx reloaded with HSTS and prod /mcp blocked; dev raw /mcp kept for read connector but write/upload in authMode=none now require x-amazoncookbook-internal-proxy-secret via authenticated Next /api/mcp proxy. MCP app connector listProjects works. Added login rate-limit, ads results editor via updateMarketingPack amazonAdsPlan, route profiler, and saved visual preflight report fallback reducing /visuals profile from ~8.6s to ~1ms. Checks passed: validate:content, check:mcp-read-tools, check:mcp-write-tools, check:mcp-server, check:mcp-oauth, typecheck, build, live write-deny/proxy smoke.","confidence":0.86,"sourceRefs":["/home/admin/workspace/AmazonCookBook/server/mcp/app.ts","/home/admin/workspace/AmazonCookBook/app/api/mcp/route.ts","/home/admin/workspace/AmazonCookBook/lib/visual-print-preflight.ts","/home/admin/workspace/AmazonCookBook/docs/mcp-server.md","/home/admin/workspace/AmazonCookBook/docs/performance-scale.md"],"owner":"codex","active":true,"createdAt":"2026-04-28T10:25:06.214Z","updatedAt":"2026-04-28T10:25:06.214Z","observedAt":"2026-04-28T10:25:06.214Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1ede9b87-1be2-4944-b41b-d842b191fbae","type":"episodic","key":"amazoncookbook-ux-logic-2026-04-28","value":"AmazonCookBook UX logic agreed 2026-04-28: the site is an internal publishing cockpit, not a public landing page. Core flow: Library -> Book Hub -> Variant Studio -> Inspector/readiness -> Content -> Visuals -> Interior or Kindle -> Cover -> Publish -> Economics -> Ads/A+ -> Launch results. Keep this workflow stable while making many small UI/content changes. Next direction: prepare multilingual foundation because current UI mixes Russian and English; technical book/KDP terms may stay in English, but navigational/product UI should support RU/EN and be translated page by page.","confidence":0.9,"sourceRefs":["/home/admin/workspace/AmazonCookBook"],"owner":"codex","active":true,"createdAt":"2026-04-28T11:33:58.483Z","updatedAt":"2026-04-28T11:33:58.483Z","observedAt":"2026-04-28T11:33:58.483Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b0d4b4da-0087-4eb5-95d3-5502a07fe028","type":"episodic","key":"amazoncookbook-i18n-foundation-2026-04-28","value":"AmazonCookBook i18n foundation added 2026-04-28. Decision: keep stable URLs without /ru or /en prefixes; store interface locale in cookie amazoncookbook_locale; supported locales ru/en, default ru. Technical Amazon/KDP/book terms may remain English. Added shared dictionaries/helpers, client locale hook, server request translator helper, topbar RU/EN switcher in Library, Book Project, Variant Studio shells, and docs/i18n.md. Page-by-page translation should preserve workflow: Library -> Book Hub -> Variant Studio -> Inspector -> Content -> Visuals -> Interior/Kindle -> Cover -> Publish -> Economics -> Ads/A+ -> Launch results.","confidence":0.88,"sourceRefs":["/home/admin/workspace/AmazonCookBook/lib/i18n.ts","/home/admin/workspace/AmazonCookBook/lib/i18n-client.ts","/home/admin/workspace/AmazonCookBook/lib/i18n-server.ts","/home/admin/workspace/AmazonCookBook/components/i18n/LocaleSwitcher.tsx","/home/admin/workspace/AmazonCookBook/docs/i18n.md"],"owner":"codex","active":true,"createdAt":"2026-04-28T11:39:29.212Z","updatedAt":"2026-04-28T11:39:29.212Z","observedAt":"2026-04-28T11:39:29.212Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"79d6bc70-0b78-4094-ba23-13944e0bf8e5","type":"procedural","key":"amazoncookbook_variant_identity","value":"AmazonCookBook UI variant identity convention: variant display title comes from format (Paperback, Hardcover, Kindle); locale is shown as uppercase market code (EN-US, EN-UK for en-GB, IT for it-IT); print variants show trim size in inches and centimeters; Kindle/ebook variants omit trim size. URL slugs are generated from format + locale + optional trim size, with dots converted to hyphens for URL safety, e.g. paperback-en-us-8-5x11 and kindle-en-us. Header/topbar titles should use the global Montserrat sans style, not Literata.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/lib/workspace-ui.ts","/home/admin/workspace/AmazonCookBook/components/workspace/VariantSummaryCard.tsx","/home/admin/workspace/AmazonCookBook/app/globals.css"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-04-28T17:32:47.283Z","updatedAt":"2026-04-28T17:32:47.283Z","observedAt":"2026-04-28T17:32:47.283Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f929fc80-0166-4bb5-98aa-99b0a04d53de","type":"procedural","key":"amazoncookbook_workspace_canvas_layout","value":"AmazonCookBook workspace canvas convention: primary workspace containers (`library-stage`, `dashboard-stage`, `project-stage`, `subpage-stack`, `directory-page`, `asset-workspace__article`) should be full-width inside the active shell, not capped to narrow fixed max-widths. Use global tokens `--workspace-main-padding: 50px` and `--workspace-main-padding-mobile: 24px` for consistent main padding across pages.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/app/globals.css"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-04-28T17:54:01.144Z","updatedAt":"2026-04-28T17:54:01.144Z","observedAt":"2026-04-28T17:54:01.144Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a78944d8-68ee-4d58-8420-fe81869991f2","type":"procedural","key":"amazoncookbook_book_page_no_inspector","value":"AmazonCookBook book project hub page (`/books/[slug]/`) should not render a right WorkspaceInspector panel. `BookProjectHub` intentionally omits `WorkspaceInspectorSlot`, so `BookProjectShell` resolves `--inspector-width: 0px` on the project hub. Variant/workflow pages may still use inspector slots.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/components/workspace/BookProjectHub.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/BookProjectShell.tsx"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-04-28T18:02:26.376Z","updatedAt":"2026-04-28T18:02:26.376Z","observedAt":"2026-04-28T18:02:26.376Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d694ec4e-1279-4555-9dc8-b3e935d3046e","type":"procedural","key":"amazoncookbook_book_page_i18n","value":"AmazonCookBook book project page (`/books/[slug]/`) must use i18n for shell rail labels and the add-variant card. `BookProjectShell` accepts `initialLocale` and wraps its subtree in `LocaleProvider`; `BookProjectHub` receives request locale and uses dictionary keys `books.addVariant` and `books.addVariantDescription`. Russian owner role label is `Владелец рабочей области`, not mixed `workspace`.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/lib/i18n.ts","/home/admin/workspace/AmazonCookBook/components/workspace/BookProjectHub.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/BookProjectShell.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/BookProjectRail.tsx"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-04-28T18:09:40.163Z","updatedAt":"2026-04-28T18:09:40.163Z","observedAt":"2026-04-28T18:09:40.163Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6a88eb65-ef09-4ca5-99b9-4d9074051ecf","type":"procedural","key":"amazoncookbook_variant_create_guided_flow","value":"AmazonCookBook variant creation UX decision (2026-04-28): /books/[slug]/variants/new/ is a guided flow, not a technical schema editor. User chooses one language+market preset based on KDP supported languages and one variant format (Paperback, Hardcover, Kindle); trim size appears only for print formats. The UI auto-generates edition language/locale/role/source, marketplace, variant slug, workspace slug, binding, coverStyle, and copy_default_structure strategy. Existing language+locale editions are reused; same-language locale variants avoid slug collisions by falling back to locale-based edition slugs such as en-gb.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/components/workspace/VariantCreateWorkspace.tsx","/home/admin/workspace/AmazonCookBook/lib/kdp-options.ts","/home/admin/workspace/AmazonCookBook/lib/content-write-service.ts"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-04-28T19:31:26.393Z","updatedAt":"2026-04-28T19:31:26.393Z","observedAt":"2026-04-28T19:31:26.393Z","expiresAt":"2027-04-28T19:31:26.393Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6004edb4-a144-4b5e-860b-93c27eed4837","type":"procedural","key":"amazoncookbook_book_type_template_flow","value":"AmazonCookBook create-book UX/model decision (2026-04-28): /books/new/ must start with a book type selector. Current primary types are cookbook, coloring_book, and children_book. Book type controls the starter template and content model: cookbook uses recipe sections/templates and recipeTarget; coloring_book uses coloring/style/activity sections and no recipeTarget; children_book uses story-world/story-pages/illustrations sections and no recipeTarget. Language/locale/marketplace should be chosen through one KDP language+market preset, not separate fields. This prevents recipes, coloring pages, and story templates from being mixed in one workspace model.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/components/workspace/ProjectCreateWorkspace.tsx","/home/admin/workspace/AmazonCookBook/lib/content-write-service.ts","/home/admin/workspace/AmazonCookBook/lib/content-schema.ts"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-04-28T20:36:22.230Z","updatedAt":"2026-04-28T20:36:22.230Z","observedAt":"2026-04-28T20:36:22.230Z","expiresAt":"2027-04-28T20:36:22.230Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"59236db5-16e6-41e6-a5ed-003f8b831217","type":"procedural","key":"amazoncookbook_recipe_layout_policy","value":"As of 2026-04-29, the published High-Protein High-Fiber paperback variant should stay on the one-recipe-per-page interior layout: default recipeTemplate is recipe_cover, signature overrides may use recipe_spread, and recipe_two_up remains available in code for future books/variants only. Do not switch the published variant back to recipe_two_up unless explicitly requested.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/books/high-protein-high-fiber/interior/manifest.json","user_directive_2026-04-29_chat"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-04-29T16:59:36.319Z","updatedAt":"2026-04-29T16:59:36.319Z","observedAt":"2026-04-29T16:59:36.319Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"964957b7-4154-4ee7-aa41-384502a7b715","type":"procedural","key":"gmg3.phase-workflow-lock.2026-04-29","value":"GMG project workflow corrected by owner on 2026-04-29: original work started on gmg, the next approved Phase 1 version was gmg2, and gmg3 is the cleaned active version where Phase 2 work has started. On gmg3, Phase 1 page information and design are locked/approved and must not be changed. The phase approval roadmap page from gmg live must be available in gmg3, and the gmg3 preview-status page is the working route/phase tracking document together with the gmg3 style-guide page.","confidence":0.98,"sourceRefs":["user_directive_2026-04-29_chat","/home/admin/workspace/gmg/public/gmg-preview/gmg-project-roadmap-ru.html","/home/admin/workspace/gmg/public/gmg3-preview/preview-status/index.html","/home/admin/workspace/gmg/public/gmg3-preview/style-guide/index.html"],"owner":"codex","active":true,"createdAt":"2026-04-29T17:07:18.818Z","updatedAt":"2026-04-29T17:07:18.818Z","observedAt":"2026-04-29T17:07:18.818Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"05daf38e-6cd2-493d-bdf8-28b9aade7bff","type":"procedural","key":"gmg.figma.phase1-handoff-file.2026-04-29","value":"GMG Phase 1 Figma handoff file created on 2026-04-29 under Figma account info@designcorp.eu / Sergii's team. File: https://www.figma.com/design/2J3Se61NIBNu4AWtxBHmjE . It contains raw HTML-to-design captures for 12 approved/current gmg3 Phase 1 routes plus /style-guide/, and an overview page named `00 Overview - GMG Phase 1`. Source GMG HTML files were not edited; capture script was injected only through a temporary local server.","confidence":0.96,"sourceRefs":["https://www.figma.com/design/2J3Se61NIBNu4AWtxBHmjE","/home/admin/workspace/gmg/public/gmg3-preview","user_directive_2026-04-29_chat"],"owner":"codex","active":true,"createdAt":"2026-04-29T17:49:22.846Z","updatedAt":"2026-04-29T17:49:22.846Z","observedAt":"2026-04-29T17:49:22.846Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b9832ff5-a7be-4dc7-b0e4-53b8a4208958","type":"procedural","key":"amazoncookbook_variant_marketing_modules","value":"As of 2026-04-29, AmazonCookBook A+ Content and Amazon Ads are variant-level modules for every format, not Kindle-only. Routes /books/<project>/variants/<variant>/aplus/ and /ads/ should exist for paperback, hardcover, and ebook. MCP marketing tools are also variant-scoped: getMarketingPack/updateMarketingPack use projectSlug+variantSlug and patch assetChecklist, adKeywordGroups, coverDirection, aPlusContentNotes, amazonAdsPlan, and aPlusContentPlan.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/app/books/[slug]/variants/[variantSlug]/aplus/page.tsx","/home/admin/workspace/AmazonCookBook/app/books/[slug]/variants/[variantSlug]/ads/page.tsx","/home/admin/workspace/AmazonCookBook/lib/variant-modules.ts","/home/admin/workspace/AmazonCookBook/server/mcp/registry.ts","user_directive_2026-04-29_chat"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-04-29T17:53:24.086Z","updatedAt":"2026-04-29T17:53:24.086Z","observedAt":"2026-04-29T17:53:24.086Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"90dfa2cf-53f6-4596-8ddd-55afea92a7f4","type":"procedural","key":"gmg.phase2.client-facing-copy-rule.2026-04-29","value":"Owner direction for GMG Phase 2 on 2026-04-29: DesignCorp won the Freelancehunt GMG contest because the work felt unique, fresh, professional, matched GMG's brand character, and showed strategic understanding beyond generic quality. Continuing GMG work must preserve that public-facing brand value: do not publish internal/meta explanatory copy such as 'this page/route should', 'page content is being prepared', design-system explanations, or handoff rationale. Phase 2 pages should be written as finished client-site pages for GMG's end users, based on the current graphenemg.com content and improved presentation of product proof, use cases, trust signals, CTAs, and navigation.","confidence":0.96,"sourceRefs":["https://freelancehunt.com/contest/ux-ui-konkurs-redizayn-korporativnogo-lendinga-gmg/7572.html","/home/admin/workspace/gmg/docs/gmg3-lilia-calibration-2026-04-21.md","user_directive_2026-04-29_chat"],"owner":"codex","active":true,"createdAt":"2026-04-29T18:07:00.934Z","updatedAt":"2026-04-29T18:07:00.934Z","observedAt":"2026-04-29T18:07:00.934Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"931397d4-aa7b-479c-8048-43a761f42193","type":"episodic","key":"serveradmin.project-study.2026-04-29","value":"2026-04-29 project study of /home/admin/workspace/serveradmin: internal DesignCorp security/admin platform with Node backend in src, large platform service in src/ui-services/platform.js, modular API routers in src/ui-api, React/Vite frontend in web. Prod backend runs as serveradmin-ui.service from /opt/designcorp/serveradmin/prod/app/src/ui.js on 127.0.0.1:3099; dev listens on 127.0.0.1:3199; serveradmin-agent.service tails nginx/access and records events. Public serveradmin.designcorp.eu and dev.serveradmin.designcorp.eu are protected by nginx Basic Auth, security headers, and proxied X-Serveradmin-Token. Runtime observed still uses legacy SERVERADMIN_API_TOKEN mode rather than SERVERADMIN_RBAC_TOKENS. Initial security risks to revisit: live nginx vhost stores the proxy token as a literal in a 0644 config; legacy direct endpoints (/api/nginx/apply, /api/ssl/issue, /api/backup/restore, cron manage/run_now) may bypass the newer jobs/approvals high-risk policy by allowing operator direct execution. No repo changes were made; web build passed.","confidence":0.9,"sourceRefs":["/home/admin/workspace/serveradmin/README.md","/home/admin/workspace/serveradmin/src/ui.js","/home/admin/workspace/serveradmin/src/ui-api/nginx.js","/home/admin/workspace/serveradmin/src/ui-api/ssl.js","/home/admin/workspace/serveradmin/src/ui-api/backup.js","/home/admin/workspace/serveradmin/src/ui-api/hosting-modules.js","/home/admin/workspace/serveradmin/src/ui-services/platform.js","/home/admin/workspace/docs-designcorp/docs/runbooks/server-security-operations.md"],"owner":"codex","active":true,"createdAt":"2026-04-29T21:39:29.013Z","updatedAt":"2026-04-29T21:39:29.013Z","observedAt":"2026-04-29T21:39:29.013Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ddfa0581-ca92-4bb2-be30-948c47ce5c9b","type":"episodic","key":"aglaine.project-study.2026-04-29","value":"2026-04-29 project study of /home/admin/workspace/aglaine: canonical Aglaine repo replaces legacy Beauty reference-only workspace. Current branch audit/aglaine-mvp-ordering-20260425 at 8fa6bac is clean and synced with origin. Repo is pnpm monorepo on Node >=24.13.1 with apps/api, apps/web, apps/worker and packages/config, domain, persistence, email, ui. API is a Node HTTP modular monolith on 127.0.0.1:4020 dev / 4040 prod with modules auth-session, workspace-access, catalog-scheduling, customer-relations, booking-core, payments, subscription-billing, invoices, commercial-reporting, notification-core. Web is Vite/React 19 on 4021 dev, with host-surface split for marketing root vs salon CRM. Worker processes notification email deliveries/reminders and session cleanup. Prisma schema includes account/session/workspace/membership/invite, catalog/staff/hours/exceptions, customer relations, appointments, payments/refunds/invoices, Stripe subscription state, notification deliveries/jobs. Production baseline uses /opt/designcorp/aglaine/prod releases/current/shared/aglaine.env, nginx static SPA + /api and /health proxy to 4040, systemd services aglaine-prod.service and aglaine-prod-worker.service as admin user. Release remains gated by owner-approved merge/deploy/nginx/post-release smoke. Verified locally in study: pnpm test 118/118, pnpm typecheck pass, pnpm build pass; worktree remained clean.","confidence":0.95,"sourceRefs":["/home/admin/workspace/aglaine/README.md","/home/admin/workspace/aglaine/AGENTS.md","/home/admin/workspace/aglaine/package.json","/home/admin/workspace/aglaine/apps/api/src/server.ts","/home/admin/workspace/aglaine/apps/web/src/lib/host-surface.ts","/home/admin/workspace/aglaine/apps/worker/src/worker.ts","/home/admin/workspace/aglaine/prisma/schema.prisma","/home/admin/workspace/aglaine/docs/06-operations/production-hosting-baseline.md","/home/admin/workspace/aglaine/docs/06-operations/release-candidate-go-live-playbook.md"],"owner":"codex","active":true,"createdAt":"2026-04-29T21:43:50.670Z","updatedAt":"2026-04-29T21:43:50.670Z","observedAt":"2026-04-29T21:43:50.670Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"40813b67-8ef5-40f6-aac1-d4feb1970f33","type":"episodic","key":"incident-2026-04-29-serveradmin-low-memory-next-dev","value":"2026-04-29 P0 low memory recurrence on serveradmin: Telegram alert fired for MemAvailable <= 2147483648 bytes. Live check showed MemAvailable about 1.7 GiB on a 30 GiB host with no swap. Top RSS were dev Next servers: amazoncookbook-dev (~6.5 GiB, /home/admin/workspace/AmazonCookBook, Next 15.5.15), designcorp-dev (~5.3 GiB, /home/admin/workspace/designcorp, Next 16.1.6), print-dev (~4.2 GiB, /home/admin/workspace/print, Next 16.1.6), plus hub-dev/movie-dev around 1.4-1.5 GiB. Remediation performed: sudo -n systemctl restart amazoncookbook-dev designcorp-dev print-dev. After restart MemAvailable recovered to about 16 GiB; the three services were active and dev URL smoke with redirects returned 200 for dev.amazoncookbook.designcorp.eu, dev.designcorp.eu, and dev.print.designcorp.eu. Incident p0----low-memory-available-2147483648-bytes marked resolved through serveradmin API with audit entry at 2026-04-29T21:47:01Z. Follow-up: add memory caps/restart policy for dev Next services and improve serveradmin recurring incident reopen behavior, because same incident key had already been resolved from a previous low-memory event.","confidence":0.96,"sourceRefs":["/home/admin/logs/serveradmin/events.jsonl","/home/admin/logs/serveradmin/operator_audit.jsonl","/etc/systemd/system/amazoncookbook-dev.service","/etc/systemd/system/designcorp-dev.service","/etc/systemd/system/print-dev.service"],"owner":"serveradmin","active":true,"createdAt":"2026-04-29T21:47:17.554Z","updatedAt":"2026-04-29T21:47:17.554Z","observedAt":"2026-04-29T21:47:17.554Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f0881cc6-d690-4d09-a8f2-5a2ab2391a92","type":"episodic","key":"AmazonCookBook.high-protein-high-fiber.paperback-published-2026-04-30","value":"High-Protein High-Fiber paperback variant `paperback-en-us-8-5x11` is published on Amazon.com as ASIN `B0GYX4SPBN` with product URL `https://www.amazon.com/dp/B0GYX4SPBN`. Paperback launch marketing uses the Kindle A+ content family applied to paperback ASIN B0GYX4SPBN and a controlled Sponsored Products launch plan capped at $7/day for the first 7 days until price, print cost, orders, and ACOS are reviewed.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/projects/high-protein-high-fiber/project.json","https://www.amazon.com/dp/B0GYX4SPBN","user message 2026-04-30"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-04-30T20:16:00.111Z","updatedAt":"2026-04-30T20:16:00.111Z","observedAt":"2026-04-30T20:16:00.111Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"38f89157-5f4f-4e6d-a15a-a8c019dab504","type":"episodic","key":"AmazonCookBook.high-protein-high-fiber.paperback-ads-aggressive-controlled-2026-04-30","value":"Paperback ASIN `B0GYX4SPBN` now uses an aggressive controlled Sponsored Products launch plan in `content/projects/high-protein-high-fiber/project.json`: $20/day for first 3 days, hard cap $60, split as Auto $5/day, Exact $7/day, Phrase $5/day, Product Targeting $3/day. Use dynamic down-only except tightly scoped Exact can use up/down after margin is confirmed. Stop/adjust by search-term relevance, print-margin contribution, ACOS, orders, and 25-35 relevant paid clicks with no order.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/projects/high-protein-high-fiber/project.json","Amazon Ads Sponsored Products best practices: https://advertising.amazon.com/en-us/library/guides/sponsored-products-best-practices/","Amazon Ads targeting guide: https://advertising.amazon.com/en-us/library/guides/targeting-with-sponsored-products/"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-04-30T21:29:41.137Z","updatedAt":"2026-04-30T21:29:41.137Z","observedAt":"2026-04-30T21:29:41.137Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0f11c115-12a2-4374-8c85-be255af325ea","type":"procedural","key":"AmazonCookBook.coloring-page-upload-ux.v1","value":"As of 2026-04-30 AmazonCookBook coloring variants have a visible page-based production workflow: variant cards link directly to prompts/upload, the coloring content page exposes per-page prompts and anchors, and the Line-art QA page includes a UI upload form that selects a coloring page and submits pageSlug to /api/mcp/upload-visual-asset. The raw MCP upload schema also accepts pageSlug, so the long-running MCP server on 127.0.0.1:3214 must be restarted after this code change for UI uploads to bind assets to coloring pages.","confidence":0.94,"sourceRefs":["/home/admin/workspace/AmazonCookBook/components/workspace/VariantContentWorkspace.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/VariantLineArtWorkspace.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/editor/VariantVisualUploadManager.tsx","/home/admin/workspace/AmazonCookBook/server/mcp/app.ts","git:487a7dd"],"owner":"codex","active":true,"createdAt":"2026-04-30T21:35:24.313Z","updatedAt":"2026-04-30T21:35:24.313Z","observedAt":"2026-04-30T21:35:24.313Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"bdb2b5fb-5078-4fc3-b034-c1cc90f6d8c2","type":"procedural","key":"AmazonCookBook.coloring-page-detail-workflow.v1","value":"As of 2026-04-30 AmazonCookBook coloring books mirror the cookbook recipe detail workflow. Coloring page slots open at /books/<project>/variants/<variant>/coloring-pages/<pageSlug>; the route is wrapped by VariantShell and uses WorkspaceInspectorSlot. The main surface shows page preview, scene, prompt, metadata, tags, and previous/next page navigation. The right inspector has tabs Next/Prompt/Image/QA, can edit/save the page prompt through updatePrompt, copy the prompt, and upload a generated line-art image through /api/mcp/upload-visual-asset with pageSlug. Content page cards link directly to these detail pages.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/app/books/[slug]/variants/[variantSlug]/coloring-pages/[pageSlug]/page.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/editor/ColoringPageWorkspaceClient.tsx","/home/admin/workspace/AmazonCookBook/components/workspace/VariantContentWorkspace.tsx","git:906f9cb"],"owner":"codex","active":true,"createdAt":"2026-04-30T21:55:39.367Z","updatedAt":"2026-04-30T21:55:39.367Z","observedAt":"2026-04-30T21:55:39.367Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"57eca331-2a8c-4ee9-9ecc-615309cdaf32","type":"episodic","key":"AmazonCookBook.high-protein-high-fiber.launch-snapshot-2026-05-01","value":"Launch snapshot for High-Protein High-Fiber: Kindle ASIN B0GYKLNXXK free promotion downloads reported by owner were 17 on day 1, 22 on day 2, and 1 so far on 2026-05-01; Amazon rank snapshot: #5,033 Free Kindle Store, #5 Healthy Cooking, #8 Courses & Dishes, #14 Quick & Easy Cooking (Kindle Store). Paperback ASIN B0GYX4SPBN product details updated: publication date April 29, 2026, print length 140 pages, ISBN-13 979-8258872906, item weight 15 oz, dimensions 8.5 x 0.32 x 11 inches, ranks #1,183 Quick & Easy Cooking (Books), #2,860 Special Diet Cooking (Books). Paperback ads had zero impressions, so project marketing plan was updated with a no-impression rescue checklist and temporary higher rescue bids while preserving $60 first-test cap.","confidence":0.94,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/projects/high-protein-high-fiber/project.json","user message 2026-05-01","https://www.amazon.com/dp/B0GYKLNXXK","https://www.amazon.com/dp/B0GYX4SPBN"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-05-01T10:33:17.382Z","updatedAt":"2026-05-01T10:33:17.382Z","observedAt":"2026-05-01T10:33:17.382Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ada3a1ff-f9e5-47b1-8288-c8f1de2c22ee","type":"episodic","key":"AmazonCookBook.high-protein-high-fiber.paperback-live-ads-rescue-2026-05-01","value":"On 2026-05-01 live Amazon Ads rescue was applied for paperback ASIN B0GYX4SPBN. Campaign manager still showed a global billing warning for several countries, but United States payment settings appeared Active and US paperback campaigns were Delivering with about 104-105 impressions and 1 click overall. Exact keyword bids were raised from $0.45 to $0.70-$0.95 by relevance; Auto targeting bids were raised to close match $0.45, substitutes $0.35, loose match $0.22, complements $0.15. Phrase and Product campaigns already had $0.75 default bids and were left unchanged. Do not store card/address/personal billing details in project content.","confidence":0.92,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/projects/high-protein-high-fiber/project.json","Amazon Ads live console audit 2026-05-01"],"owner":"system","active":true,"createdAt":"2026-05-01T11:11:21.275Z","updatedAt":"2026-05-01T11:11:21.275Z","observedAt":"2026-05-01T11:11:21.275Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"872a2ab4-476a-4b21-a95a-d1e398767fef","type":"procedural","key":"gmg.phase2.freelancehunt-scope.2026-05-01","value":"GMG Phase 2 Freelancehunt project accepted on 2026-05-01 as `Template scaling and final design handoff`: budget 1209 USD, timeline 7 days. Scope: extend approved visual system to product hub template, product detail template, THERMAL-XR subpage/use-case template, news archive template, individual article template, contact/CTA page, final responsive consistency pass, and structured Figma file with components/styles/spacing/reusable UI logic. Preserve locked Phase 1 design/info in gmg3 and write Phase 2 pages as finished client-site copy, not internal route explanations. At first read, Freelancehunt Safe budget reservation was still pending even though terms were accepted.","confidence":0.97,"sourceRefs":["https://freelancehunt.com/mailbox/read/thread/8825610","/home/admin/workspace/gmg/docs/gmg3-phase-2-freelancehunt-scope-2026-05-01.md"],"owner":"codex","active":true,"createdAt":"2026-05-01T11:30:34.997Z","updatedAt":"2026-05-01T11:30:34.997Z","observedAt":"2026-05-01T11:30:34.997Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"a7cb71e2-1482-4f41-823d-b7f292c655cc","type":"episodic","key":"AmazonCookBook.high-protein-high-fiber.kindle-ads-continuation-2026-05-01","value":"On 2026-05-01 Kindle ASIN B0GYKLNXXK campaigns were moved from a short free-promo window into a live Sponsored Products launch continuation. In Amazon Ads, Auto/Keywords/Products were extended to No end date, daily budgets became Auto $6, Keywords $6, Products $4, Auto default bid raised to $0.55, Product default bid raised to $0.55, Keyword ad groups remained at $0.75. A new portfolio `HPHF Kindle Launch B0GYKLNXXK` was created with $80 total spend cap starting May 1, 2026 and all three Kindle campaigns assigned. Live context: the only account-level click visible at the time was from `BC Ocean Auto`, not HPHF Kindle/paperback.","confidence":0.93,"sourceRefs":["/home/admin/workspace/AmazonCookBook/content/projects/high-protein-high-fiber/project.json","Amazon Ads live console audit 2026-05-01"],"owner":"system","active":true,"createdAt":"2026-05-01T12:08:10.720Z","updatedAt":"2026-05-01T12:08:10.720Z","observedAt":"2026-05-01T12:08:10.720Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c282bab4-bab3-4026-9e5d-8affc07f5316","type":"procedural","key":"gmg.phase1-lock-phase2-scope.2026-05-03","value":"Owner clarification on 2026-05-03: GMG original project started as gmg, Phase 1 was built on gmg2, then everything was pulled into gmg3 where Phase 2 began. Phase 1 is fully approved and must not be changed in content or design. Future work should treat gmg3 as Phase 2 work surface and avoid editing approved Phase 1 content/design unless the owner explicitly approves a targeted exception.","confidence":0.98,"sourceRefs":["user_directive_2026-05-03_chat","/home/admin/workspace/gmg/docs/gmg3-phase-2-freelancehunt-scope-2026-05-01.md","/home/admin/workspace/gmg/docs/gmg3-phase-2-plan-2026-04-17.md"],"owner":"codex","active":true,"createdAt":"2026-05-03T14:16:22.282Z","updatedAt":"2026-05-03T14:16:22.282Z","observedAt":"2026-05-03T14:16:22.282Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c6886bc9-8fd4-4645-90d7-06facceebdda","type":"procedural","key":"serveradmin.daily-report-sec-guard.timers.2026-05-03","value":"On 2026-05-03 the old admin crontab was found empty even though forensics snapshots through 2026-04-19 had `* * * * * /home/admin/bin/sec-guard.sh` and `5 7 * * * /home/admin/bin/nightly-security-report.sh`; the 2026-04-19 snapshot also had malicious XMRig @reboot entries, so the benign cron jobs were likely lost during malware cron cleanup. Telegram itself tested OK via serveradmin API. Stable replacement: `/etc/systemd/system/serveradmin-daily-report.timer` runs `/home/admin/bin/nightly-security-report.sh` daily at 08:00 UTC with Persistent=true; `/etc/systemd/system/serveradmin-sec-guard.timer` runs `/home/admin/bin/sec-guard.sh` every minute. Verify with `systemctl list-timers --all --no-pager | rg 'serveradmin-(daily-report|sec-guard)'` and `systemctl show serveradmin-daily-report.service -p Result -p ExecMainStatus`.","confidence":0.94,"sourceRefs":["/etc/systemd/system/serveradmin-daily-report.timer","/etc/systemd/system/serveradmin-sec-guard.timer","/home/admin/bin/nightly-security-report.sh","/home/admin/bin/sec-guard.sh","/home/admin/logs/forensics/20260419T034001Z-network_ioc/crontab-admin.txt","/home/admin/workspace/docs-designcorp/docs/runbooks/server-security-operations.md"],"owner":"serveradmin","active":true,"createdAt":"2026-05-03T14:17:32.272Z","updatedAt":"2026-05-03T14:17:32.272Z","observedAt":"2026-05-03T14:17:32.272Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b05b5808-725a-46d9-b8f4-842164dc92be","type":"episodic","key":"serveradmin-incident-triage-2026-05-03","value":"2026-05-03 serveradmin incident triage: API config healthy, serveradmin-ui and serveradmin-agent active, nginx -t successful, health metrics showed 34/34 sites up with down=0 warn=0. Last 24h incidents were 241 P1 and 0 P0; most were blocked internet scanner traffic against `.env`, `.git/config`, `wp-*`, `cgi-bin`, and plugin paths, with nginx mostly returning 444 or redirects/400/404/401. One actionable-looking P1 was a false positive from an admin journalctl diagnostic command using high CPU. No live XMRig/fake systemd-logind IOC process found beyond diagnostic searches. The reviewed benign P1 incident keys were resolved through the serveradmin incidents API with audit reason `triaged 2026-05-03: blocked external scanner noise...`; feed then showed open=0, resolved=241. Host memory remained tight at about 3.2 GiB available and no swap; top RSS remained dev Next servers, so memory caps/swap remain follow-up work.","confidence":0.93,"sourceRefs":["/home/admin/logs/serveradmin/events.jsonl","/home/admin/logs/serveradmin/operator_audit.jsonl","/home/admin/logs/serveradmin/health_history.jsonl","/home/admin/logs/serveradmin/incidents_state.json","/home/admin/workspace/docs-designcorp/docs/runbooks/server-security-operations.md"],"owner":"serveradmin","active":true,"createdAt":"2026-05-03T14:18:45.594Z","updatedAt":"2026-05-03T14:18:45.594Z","observedAt":"2026-05-03T14:18:45.594Z","expiresAt":null,"supersedes":"4a9f3ac8-e12b-4d28-b12c-58d167c41034","supersededBy":null,"metadata":{}},{"id":"23404e24-1452-4f1b-8bbe-80f29d940e75","type":"procedural","key":"serveradmin.telegram-ssl-and-dev-alert-scope.2026-05-05","value":"On 2026-05-05 serveradmin Telegram monitoring was adjusted after print.designcorp.eu SSL expired without warning and paused dev services caused repeated site-down pages. Root cause: /home/admin/bin/nightly-security-report.sh only summarized events.jsonl and did not check TLS expiry; serveradmin-agent site-down alerts monitored all active sites including dev. Fix: nightly report now performs public TLS expiry checks for active prod sites from /home/admin/logs/serveradmin/sites.json with SERVERADMIN_SSL_WARN_DAYS default 21 and SERVERADMIN_SSL_CRITICAL_DAYS default 7; scope is SERVERADMIN_SSL_ALERT_ENVS default prod. serveradmin-agent now gates site-down Telegram alerts by SERVERADMIN_SITE_ALERT_ENVS default prod, so intentionally paused dev services do not page Telegram. Restart serveradmin-agent after code changes. Verification: bash -n nightly report passed, node --check src/agent.js passed, TLS smoke checked 21 prod domains with zero current alerts after print cert renewal, dev site_alerts were reset to down=false/fails=0/alert_skipped=true.","confidence":0.95,"sourceRefs":["/home/admin/bin/nightly-security-report.sh","/home/admin/workspace/serveradmin/src/agent.js","/home/admin/workspace/docs-designcorp/docs/runbooks/server-security-operations.md","/home/admin/logs/serveradmin/state.json"],"owner":"serveradmin","active":true,"createdAt":"2026-05-05T19:11:50.954Z","updatedAt":"2026-05-05T19:11:50.954Z","observedAt":"2026-05-05T19:11:50.954Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ec4db83c-27aa-402b-b040-92b768d75db7","type":"procedural","key":"skills.impeccable.external-install.2026-05-06","value":"External Impeccable design skill is installed for DesignCorp. Canonical path: /home/admin/workspace/skills/impeccable. Runtime path: ~/.codex/skills/impeccable symlinks to canonical. Local script references in the installed skill were adapted to /home/admin/workspace/skills/impeccable/scripts/... because the upstream Codex docs assume .agents/skills/impeccable. Use it as an additional frontend design quality layer alongside DesignCorp visual doctrine, especially for teach/document, critique, audit, polish, harden, and anti-AI-slop checks. Restart Codex after install/update so runtime skill discovery picks it up.","confidence":0.96,"sourceRefs":["/home/admin/workspace/skills/impeccable/SKILL.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/impeccable.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/index.md","/home/admin/workspace/docs-designcorp/docs/control-plane/skills-storage-policy.md"],"owner":"codex","active":true,"createdAt":"2026-05-06T18:33:05.290Z","updatedAt":"2026-05-06T18:33:05.290Z","observedAt":"2026-05-06T18:33:05.290Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6b9b8dc3-47ad-4a95-aae0-08dff1c4c466","type":"episodic","key":"impeccable-lab.static-deploy-ssl.2026-05-06","value":"On 2026-05-06 the test frontend project /home/admin/workspace/impeccable-lab was deployed as a static Vite build at https://impeccable-lab.designcorp.eu. Runtime root is /opt/designcorp/impeccable-lab/prod/current, nginx site is /etc/nginx/sites-available/impeccable-lab.designcorp.eu with symlink in sites-enabled, and Let's Encrypt certificate lives at /etc/letsencrypt/live/impeccable-lab.designcorp.eu. HTTP redirects to HTTPS; curl HTTPS smoke returned 200; certificate subject CN is impeccable-lab.designcorp.eu and expires 2026-08-04. Local repo commit fd61783 stores the deployed nginx config template.","confidence":0.95,"sourceRefs":["/home/admin/workspace/impeccable-lab","/etc/nginx/sites-available/impeccable-lab.designcorp.eu","/opt/designcorp/impeccable-lab/prod/current","/etc/letsencrypt/live/impeccable-lab.designcorp.eu","git:fd61783"],"owner":"codex","active":true,"createdAt":"2026-05-06T19:01:01.269Z","updatedAt":"2026-05-06T19:01:01.269Z","observedAt":"2026-05-06T19:01:01.269Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0df84cf7-ea4f-42d2-b65e-155671957b25","type":"procedural","key":"frontend-ai-quality-p0-backlog.2026-05-06","value":"P0 backlog for improving DesignCorp AI frontend/content workflow after Impeccable lab failure: 1) make DESIGN.md mandatory for every frontend project alongside PRODUCT.md; 2) investigate/adopt Refero Styles as source of real-product DESIGN.md/style directions; 3) investigate/adopt Refero as source of real screens and UX patterns before shape/craft; 4) add ru-text or equivalent Russian UX/commercial copy quality gate. Target workflow: Refero references -> Refero Styles/DESIGN.md -> PRODUCT.md -> Impeccable shape -> implementation -> screenshot QA -> critique/harden -> ru-text for Russian copy -> build. This backlog is P0 as a package, with first implementation step DESIGN.md + Refero Styles.","confidence":0.96,"sourceRefs":["user_thread_2026-05-06_pimenov_knowledge_p0","https://pimenov.ai/knowledge/refero-styles-biblioteka-design-md/","https://pimenov.ai/knowledge/refero-biblioteka-ekranov-i-ux-patternov/","https://pimenov.ai/knowledge/design-md-dizajn-sistema-dlya-ai-kodinga/","https://pimenov.ai/knowledge/ru-text-plagin-russkogo-yazyka-dlya-ii-agentov/"],"owner":"codex","active":true,"createdAt":"2026-05-06T19:48:01.436Z","updatedAt":"2026-05-06T19:48:01.436Z","observedAt":"2026-05-06T19:48:01.436Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"756dea71-a6e6-4a0d-b84a-1e8a1e14b7b5","type":"procedural","key":"skills.frontend-ai-quality-gate.installed.2026-05-06","value":"Installed the external ru-text Codex skill from talkstream/ru-text into /home/admin/workspace/skills/ru-text and linked it into /home/admin/.codex/skills/ru-text. Created DesignCorp P0 frontend AI quality gate skill at /home/admin/workspace/skills/skill-frontend-ai-quality-gate and linked it into runtime skills. The gate requires PRODUCT.md, DESIGN.md, 3-8 real references, Impeccable pass, ru-text pass for Russian copy, desktop/mobile screenshot QA, and build/check before final delivery. Wired the gate into designer/autopilot/visual-doctrine skills and documented ru-text + frontend quality gate in docs-designcorp. Validation completed with pnpm docs:build, pnpm km:index, and MCP index rebuild.","confidence":0.96,"sourceRefs":["/home/admin/workspace/skills/skill-frontend-ai-quality-gate/SKILL.md","/home/admin/workspace/skills/ru-text/SKILL.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/skill-frontend-ai-quality-gate.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/ru-text.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/index.md"],"owner":"codex","active":true,"createdAt":"2026-05-06T19:56:04.470Z","updatedAt":"2026-05-06T19:56:04.470Z","observedAt":"2026-05-06T19:56:04.470Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"954fa907-fd25-456d-8750-71c6f111b995","type":"procedural","key":"skills.frontend-ai-quality-gate.scaffold-resources.2026-05-06","value":"Frontend AI Quality Gate skill now includes production starter resources: references/product-template.md, references/design-template.md, references/references-template.md, references/ui-qa-template.md, and scripts/scaffold-quality-docs.sh. The scaffold creates PRODUCT.md, DESIGN.md, REFERENCES.md, and UI_QA.md without overwriting existing files unless --force is passed. The skill now passes official skill-creator quick_validate, has agents/openai.yaml metadata, and docs-designcorp documents the scaffold workflow. Validation: bash -n scaffold script, temp-dir scaffold smoke, quick_validate, pnpm docs:build, pnpm km:index, and MCP rebuild_index all passed.","confidence":0.96,"sourceRefs":["/home/admin/workspace/skills/skill-frontend-ai-quality-gate/SKILL.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/scripts/scaffold-quality-docs.sh","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/references/product-template.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/references/design-template.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/references/references-template.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/references/ui-qa-template.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/skill-frontend-ai-quality-gate.md"],"owner":"codex","active":true,"createdAt":"2026-05-06T20:13:20.570Z","updatedAt":"2026-05-06T20:13:20.570Z","observedAt":"2026-05-06T20:13:20.570Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f4797dae-26b6-49ef-b1db-9b7287ba7bae","type":"procedural","key":"skills.autonomous-uiux-scout.quality-gate-wiring.2026-05-06","value":"Updated skill-autonomous-uiux-scout-2026 to run through skill-frontend-ai-quality-gate before autonomous design execution. The scout now scaffolds PRODUCT.md/DESIGN.md/REFERENCES.md when missing, records final 3-8 references and applied/rejected patterns in REFERENCES.md, prioritizes real products/live sites/screenshots before generic inspiration, and requires 1440+390 screenshot QA, UI_QA.md, Impeccable critique/audit/harden, and ru-text for Russian copy after implementation. Docs page was updated and docs build/index/MCP rebuild passed.","confidence":0.95,"sourceRefs":["/home/admin/workspace/skills/skill-autonomous-uiux-scout-2026/SKILL.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/skill-autonomous-uiux-scout-2026.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/SKILL.md"],"owner":"codex","active":true,"createdAt":"2026-05-06T20:14:57.950Z","updatedAt":"2026-05-06T20:14:57.950Z","observedAt":"2026-05-06T20:14:57.950Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"af86ffc6-d594-4837-aa47-c91b284cdcdf","type":"episodic","key":"impeccable-lab-b2b-ai-redesign-2026-05-06","value":"On 2026-05-06 /home/admin/workspace/impeccable-lab was redesigned from the old DesignCorp Print order-desk demo into a production-ready Russian B2B/AI design lab landing for https://impeccable-lab.designcorp.eu/. PRODUCT.md, DESIGN.md, and docs/SHAPE.md now define Impeccable Lab, reference intake (UNLIMINAL, Good Work, Predictive UX, Planes Studio, HAS Studio), AI design quality-gate positioning, Russian copy rules, and desktop/mobile QA constraints. The static Vite build was deployed by copying dist into /opt/designcorp/impeccable-lab/prod/current without nginx/service changes; old print-packaging.jpg was removed from repo and runtime, and the deploy nginx template no longer has the stale /print-packaging.jpg location. Verification passed: pnpm build, live HTTPS 200, live Playwright screenshots at 1440x900 and 390x844, no horizontal overflow, header CTA visible, proof band visible in first viewport.","confidence":0.94,"sourceRefs":["/home/admin/workspace/impeccable-lab/PRODUCT.md","/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/docs/SHAPE.md","/home/admin/workspace/impeccable-lab/index.html","/home/admin/workspace/impeccable-lab/src/styles.css","https://impeccable-lab.designcorp.eu/"],"owner":"codex","active":true,"createdAt":"2026-05-06T20:25:44.860Z","updatedAt":"2026-05-06T20:25:44.860Z","observedAt":"2026-05-06T20:25:44.860Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"297d07aa-f39b-445e-bdbd-c73e9e3c7a17","type":"procedural","key":"skills.frontend-redesign-reset.2026-05-06","value":"Added Redesign Reset rule to DesignCorp frontend workflow. When the user rejects the current design or calls it weak/template/AI-slop, agents must treat the current UI as evidence/anti-reference, not as a style source. They should preserve only product facts, useful content, routes, integrations, data, and working functionality; they must not preserve failed palette, typography, hero composition, card model, gradients, blobs, spacing rhythm, radii, shadows, or decorative motifs. Agents must record the current UI failure in REFERENCES.md, update DESIGN.md with a new visual direction before code, gather new external references, choose/implement a recommended replacement direction, and report `RESET: old style rejected`. Updated skill-frontend-ai-quality-gate, skill-autonomous-uiux-scout-2026, references-template.md, and docs pages. Validation passed: quick_validate for both skills, scaffold smoke, pnpm docs:build, pnpm km:index, and MCP rebuild_index.","confidence":0.96,"sourceRefs":["/home/admin/workspace/skills/skill-frontend-ai-quality-gate/SKILL.md","/home/admin/workspace/skills/skill-autonomous-uiux-scout-2026/SKILL.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/references/references-template.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/skill-frontend-ai-quality-gate.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/skill-autonomous-uiux-scout-2026.md"],"owner":"codex","active":true,"createdAt":"2026-05-06T20:32:39.517Z","updatedAt":"2026-05-06T20:32:39.517Z","observedAt":"2026-05-06T20:32:39.517Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c9a30244-6363-474e-9190-3b1a320bee71","type":"episodic","key":"impeccable-lab-premium-redesign-2026-05-06","value":"Impeccable Lab landing was redone after user rejected the first QA-board direction. Final 2026-05-06 direction: premium dark B2B/AI design lab launch-room hero, outcome-first Russian copy, abstract product/release surfaces instead of internal checklist UI. References documented: Lazarev Agency, Wonder Makers, Any Studios, Planes Studio, BrandingLab. QA passed locally and live at 1440x900 and 390x844: no horizontal overflow, header CTA visible, proof strip visible in first viewport; HTTPS returned 200; pnpm build passed.","confidence":0.86,"sourceRefs":["/home/admin/workspace/impeccable-lab/PRODUCT.md","/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/docs/SHAPE.md","/home/admin/workspace/impeccable-lab/index.html","/home/admin/workspace/impeccable-lab/src/styles.css","https://www.lazarev.agency/","https://www.wondermakers.digital/","https://www.anystudios.com/","https://www.planes.studio/","https://www.brandinglab.io/"],"owner":"codex","active":true,"createdAt":"2026-05-06T20:38:29.116Z","updatedAt":"2026-05-06T20:38:29.116Z","observedAt":"2026-05-06T20:38:29.116Z","expiresAt":"2026-11-02T20:38:29.116Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6b284411-b2e1-4736-a13f-0787547f9f28","type":"procedural","key":"skills.premium-public-surface-pageart-lane.2026-05-06","value":"Premium public-surface workflow updated after owner provided https://pageart.agency/en as the target quality reference. Diagnosis: bland/non-premium outputs were partly caused by skill-designer-core's Catalyst/product-admin style contract leaking into public landing work and by default Balanced Conversion/screen-wall patterns being treated as premium. Updates: skill-designer-core is now explicitly scoped to product/admin/internal tools and forbidden as primary style source for premium landing/brand surfaces; skill-designcorp-visual-doctrine now has Premium Landing Mode and a PageArt-like immersive agency hero lane (full-bleed premium visual, strong brand layer, early business proof, crafted agency rhythm; do not copy PageArt 1:1); skill-landing-autopilot-pro now treats Balanced Conversion as structure only for premium requests and requires premium aesthetic lane from real references; skill-frontend-ai-quality-gate now has a Premium Public Surface Rule and PageArt interpretation. Validation passed: quick_validate for touched runtime skills, pnpm docs:build, pnpm km:index, MCP rebuild_index.","confidence":0.96,"sourceRefs":["https://pageart.agency/en","/home/admin/workspace/skills/skill-designer-core/SKILL.md","/home/admin/workspace/skills/skill-designcorp-visual-doctrine/SKILL.md","/home/admin/workspace/skills/skill-landing-autopilot-pro/SKILL.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/SKILL.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/skill-designcorp-visual-doctrine.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/skill-frontend-ai-quality-gate.md"],"owner":"codex","active":true,"createdAt":"2026-05-06T20:50:14.606Z","updatedAt":"2026-05-06T20:50:14.606Z","observedAt":"2026-05-06T20:50:14.606Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c75ea356-035c-409f-8a75-a81425ec6240","type":"procedural","key":"skills.frontend-ui-qa-harness.2026-05-06","value":"Added automated UI QA harness to skill-frontend-ai-quality-gate at scripts/run-ui-qa.mjs. Usage: node /home/admin/workspace/skills/skill-frontend-ai-quality-gate/scripts/run-ui-qa.mjs <url> [--out <dir>] [--write-ui-qa]. It loads Playwright from the target project or fallback workspace, captures 1440px desktop and 390px mobile screenshots, checks page-level horizontal overflow, clipped interactive elements, H1 presence, CTA-like controls in the first viewport, text overflow heuristic, touch target heuristic, interactive labels heuristic, and large image/canvas/video primary visual heuristic. It writes screenshots, ui-qa-report.json, UI_QA.generated.md, and exits 1 on P0 failures. Smoke-tested on https://impeccable-lab.designcorp.eu: verdict pass with warnings for no large bitmap/canvas/video primary visual, confirming technical QA is separate from premium art-direction review. Validation passed: node --check, skill quick_validate, pnpm docs:build, pnpm km:index, MCP rebuild_index.","confidence":0.96,"sourceRefs":["/home/admin/workspace/skills/skill-frontend-ai-quality-gate/scripts/run-ui-qa.mjs","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/SKILL.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/skill-frontend-ai-quality-gate.md","https://impeccable-lab.designcorp.eu"],"owner":"codex","active":true,"createdAt":"2026-05-06T21:17:38.847Z","updatedAt":"2026-05-06T21:17:38.847Z","observedAt":"2026-05-06T21:17:38.847Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"31ee7e4e-2ca9-4300-9fae-c51766b216d7","type":"episodic","key":"impeccable-lab-pageart-immersive-redesign-2026-05-06","value":"Impeccable Lab was reset again on 2026-05-06 per owner direction to PageArt-like immersive agency hero. This supersedes the prior dark launch-room/screen-wall direction. Final direction: premium public agency surface, full-bleed code-native visual hero, large brand layer, early proof rail inside first viewport, no fake dashboard, no QA board, no screen wall, no Catalyst/Balanced Conversion visual styling. Updated PRODUCT.md, DESIGN.md, REFERENCES.md, docs/SHAPE.md and implemented in static Vite app. QA passed locally and live at 1440x900 and 390x844: no horizontal overflow, header CTA visible, proof visible, next-section hint visible, formats overlap false, pnpm build passed, live HTTPS returned 200.","confidence":0.92,"sourceRefs":["/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/PRODUCT.md","/home/admin/workspace/impeccable-lab/REFERENCES.md","/home/admin/workspace/impeccable-lab/docs/SHAPE.md","/home/admin/workspace/impeccable-lab/index.html","/home/admin/workspace/impeccable-lab/src/styles.css","https://pageart.agency/en","https://immersive-g.com/","https://monopo.london/","https://www.wokine.com/en/","https://kota.co.uk/work/pixelartworks","https://impeccable-lab.designcorp.eu/"],"owner":"codex","active":true,"createdAt":"2026-05-06T21:24:25.399Z","updatedAt":"2026-05-06T21:24:25.399Z","observedAt":"2026-05-06T21:24:25.399Z","expiresAt":"2026-11-02T21:24:25.399Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7e31a956-6cf5-470d-b706-3cc831dea277","type":"episodic","key":"impeccable-lab-light-bitmap-hero-reset-2026-05-06","value":"On 2026-05-06 Impeccable Lab hero was reset again after owner rejected the black/grid/blocky PageArt-like attempt. Final hero direction for https://impeccable-lab.designcorp.eu/: light bitmap-led premium agency opening using real paper-art image public/hero-paper-art.jpg, Prata display + Golos Text body, headline 'Превращаем AI-черновик в страницу, которую можно показывать', proof as text line, no black hero, no visible CSS grid, no fake dashboard, no QA board, no screen wall, no old hero-stage/stage-plane/stage-word/studio-strip selectors in runtime CSS. DESIGN.md documents this lane and REFERENCES.md records the Pexels paper-art asset. Verification passed: pnpm build, local and live Playwright screenshots at 1440x900 and 390x844, live HTTPS 200, hero image 200, no horizontal overflow, CTA/proof visible in first viewport.","confidence":0.95,"sourceRefs":["/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/REFERENCES.md","/home/admin/workspace/impeccable-lab/index.html","/home/admin/workspace/impeccable-lab/src/styles.css","/home/admin/workspace/impeccable-lab/public/hero-paper-art.jpg","https://impeccable-lab.designcorp.eu/","https://www.pexels.com/photo/colorful-abstract-paper-art-installation-33359896/"],"owner":"codex","active":true,"createdAt":"2026-05-06T21:54:22.816Z","updatedAt":"2026-05-06T21:54:22.816Z","observedAt":"2026-05-06T21:54:22.816Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ccaf32a4-7748-493c-9af1-0f5cf30a7bc3","type":"procedural","key":"impeccable-lab.dev-preview.2026-05-06","value":"Impeccable Lab dev preview is configured at https://dev.impeccable-lab.designcorp.eu/. It proxies through nginx vhost /etc/nginx/sites-available/dev.impeccable-lab.designcorp.eu to Vite on 127.0.0.1:3052. The systemd unit is /etc/systemd/system/impeccable-lab-dev.service, enabled and running as admin from WorkingDirectory /home/admin/workspace/impeccable-lab. Repo templates live in deploy/nginx/dev.impeccable-lab.designcorp.eu and deploy/systemd/impeccable-lab-dev.service. Vite config uses VITE_PUBLIC_DEV_HOST=dev.impeccable-lab.designcorp.eu to allow the external host and set HTTPS HMR. Nginx must allow /node_modules/.pnpm and /node_modules/.vite paths for Vite dev; generic deny-dotfiles blocks Vite pnpm dependencies, so the dev vhost uses an explicit dot-path blocker with those Vite exceptions. Certbot certificate expires 2026-08-04 and renews automatically.","confidence":0.95,"sourceRefs":["/home/admin/workspace/impeccable-lab/deploy/nginx/dev.impeccable-lab.designcorp.eu","/home/admin/workspace/impeccable-lab/deploy/systemd/impeccable-lab-dev.service","/home/admin/workspace/impeccable-lab/vite.config.js","/etc/nginx/sites-available/dev.impeccable-lab.designcorp.eu","/etc/systemd/system/impeccable-lab-dev.service","https://dev.impeccable-lab.designcorp.eu/"],"owner":"codex","active":true,"createdAt":"2026-05-06T22:07:13.102Z","updatedAt":"2026-05-06T22:07:13.102Z","observedAt":"2026-05-06T22:07:13.102Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"19ff8a12-fc7a-4489-9301-1b6a94fe336d","type":"procedural","key":"premium-landing-hero-viewport-header-rules.2026-05-07","value":"Design rule learned from Impeccable Lab owner feedback on 2026-05-07: premium landing hero must fit the first desktop viewport during QA. Do not let large display type force hero height beyond 100svh; reduce H1 size and/or widen the heading field before accepting vertical overflow. On desktop QA, header, CTA and proof line should be visible within 1440x900 unless the user explicitly asks for a scroll-first hero. Header background and bottom rule must span the full viewport width; constrain header content with internal padding/max-width logic, not by making the header element itself a narrow page container. Apply this to future premium public surfaces and record it in project DESIGN.md when relevant.","confidence":0.96,"sourceRefs":["user_feedback_2026-05-07_impeccable_lab_hero_height_header_width","/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/src/styles.css","https://dev.impeccable-lab.designcorp.eu/"],"owner":"codex","active":true,"createdAt":"2026-05-07T08:45:53.436Z","updatedAt":"2026-05-07T08:45:53.436Z","observedAt":"2026-05-07T08:45:53.436Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"160b9831-0230-4266-b5ad-3e87d48b9f00","type":"procedural","key":"premium-hero-animated-canvas-rule.2026-05-07","value":"Design rule learned from Impeccable Lab hero work on 2026-05-07: a premium landing hero can replace a bitmap with code-generated canvas only when it preserves art direction and remains calm. Treat the source bitmap as reference/fallback, not as the active visual. The generated visual should be one full-bleed canvas behind hero copy, with material geometry, slow color breathing, subtle pointer response, capped DPR/fold count for mobile, and prefers-reduced-motion static fallback. Avoid cheap screensaver/neon-wave behavior. Acceptance: canvas must be nonblank, active layer visible while image fallback opacity is 0, HMR has no errors, 1440x900 and 390x844 screenshots pass, hero still fits first viewport and CTA/proof stay visible.","confidence":0.96,"sourceRefs":["/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/index.html","/home/admin/workspace/impeccable-lab/src/main.js","/home/admin/workspace/impeccable-lab/src/styles.css","https://dev.impeccable-lab.designcorp.eu/"],"owner":"codex","active":true,"createdAt":"2026-05-07T09:17:02.036Z","updatedAt":"2026-05-07T09:17:02.036Z","observedAt":"2026-05-07T09:17:02.036Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1565a153-6403-4e09-8c2b-872ea00315b4","type":"episodic","key":"euro5.contest-presentation.static-deploy-ssl.2026-05-07","value":"On 2026-05-07 the EURO5 Freelancehunt contest presentation from /home/admin/tmp/FH was deployed as a static site at https://euro5.designcorp.eu/. Runtime root is /opt/designcorp/euro5/prod/current with public assets and exports, including /exports/euro5-presentation.pdf. Nginx site is /etc/nginx/sites-available/euro5.designcorp.eu with symlink in sites-enabled. DNS resolves euro5.designcorp.eu to 188.34.201.9. Let's Encrypt certificate was issued by certbot --nginx and expires 2026-08-05; HTTP redirects to HTTPS. Verification passed: nginx -t, HTTP 301, HTTPS 200 for page, HTTPS 200 for PDF, live Chrome screenshots at 1440x900 and 390x844.","confidence":0.96,"sourceRefs":["/home/admin/tmp/FH/index.html","/home/admin/tmp/FH/exports/euro5-presentation.pdf","/opt/designcorp/euro5/prod/current","/etc/nginx/sites-available/euro5.designcorp.eu","/home/admin/workspace/docs-designcorp/docs/control-plane/topology.md","https://euro5.designcorp.eu/"],"owner":"codex","active":true,"createdAt":"2026-05-07T09:46:29.050Z","updatedAt":"2026-05-07T09:46:29.050Z","observedAt":"2026-05-07T09:46:29.050Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f8f76066-4f50-4c01-8cfc-668fd7fade8d","type":"procedural","key":"impeccable-lab-premium-hero-paperfan-canvas.2026-05-07","value":"For Impeccable Lab dev hero, the accepted animated canvas direction is source-image-led paper fan, not a perfect radial/kaleidoscope chart. Match public/hero-paper-art.jpg cues: lower/right focal point, uneven ray widths, large translucent coral/amber/violet/blue paper sheets, blurred ray edges, soft crease shadows, a few dark blue/violet fold lines, and slow material breathing. The focal point should dissolve into pale paper and never collect into a dark knot. Fold/crease lines should have subtle curved bowing, not perfectly straight spokes. Geometry should stay mostly still; moving stripe positions felt mechanical/laggy, so pointer parallax stays off and animation should be limited to slow light/color breathing unless explicitly re-approved. Keep hero within 100svh, header full-width, CTA/proof visible at 1440x900 and 390x844, canvas nonblank, reduced motion static, and full-page QA performant enough to pass run-ui-qa.","confidence":0.96,"sourceRefs":["/home/admin/workspace/impeccable-lab/public/hero-paper-art.jpg","/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/src/main.js","/home/admin/workspace/impeccable-lab/.ui-qa/UI_QA.generated.md","https://dev.impeccable-lab.designcorp.eu/"],"owner":"admin","active":true,"createdAt":"2026-05-07T10:20:23.385Z","updatedAt":"2026-05-07T10:20:23.385Z","observedAt":"2026-05-07T10:20:23.385Z","expiresAt":null,"supersedes":"b5e06dbf-bbc5-4a32-84d2-25fd5dbc8f88","supersededBy":null,"metadata":{}},{"id":"3efcaab8-bec0-4b8d-b819-143878dd35c6","type":"episodic","key":"euro5.contest-presentation.brandbook-revision.2026-05-07","value":"On 2026-05-07, revised EURO5 Freelancehunt contest presentation after adding EURO5 Brandbook PDF context. Page uses brandbook colors #0033a0, #102f67, #e8f1ff and Montserrat stack; pink/magenta UI accents removed. Hero now uses a contextual EURO5 station-sign image from the EURO5 061.ua profile, while the card mockup is shown in a separate visualization section. Front and back card layouts are visible side by side, not hidden behind a toggle, and raster layout assets were recolored from pink/green to official blue #0033a0. Regenerated exports/euro5-presentation.pdf (A4 landscape, 15 pages) and cover PNG. Deployed static runtime to /opt/designcorp/euro5/prod/current and verified HTTPS 200 for page, station image, front/back PNGs, and PDF; Chrome screenshots passed for 1440x900 and 390x844.","confidence":0.93,"sourceRefs":["/home/admin/tmp/FH/index.html","/home/admin/tmp/FH/styles.css","/home/admin/tmp/FH/assets/front.png","/home/admin/tmp/FH/assets/back.png","/home/admin/tmp/FH/exports/euro5-presentation.pdf","https://euro5.designcorp.eu/"],"owner":"admin","active":true,"createdAt":"2026-05-07T10:33:18.622Z","updatedAt":"2026-05-07T10:33:18.622Z","observedAt":"2026-05-07T10:33:18.622Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0b3b3895-459e-4fe6-a57e-be56149b2316","type":"episodic","key":"euro5.contest-presentation.duplex-technical-revision.2026-05-07","value":"Updated EURO5 contest presentation on 2026-05-07: mockup visualization is full-width in its own section; dark-section headings are white; material section includes circular PaperConcept Keaykolour Navy Blue texture and explains 2x300 g/m2 duplex/кашування so embossing does not show on reverse; section 05 uses technical prepress assets front-technical.png/back-technical.png with green blind deboss layer and pink foil spot layer (final foil blue or white); PDF regenerated as 11-page A4 landscape and deployed to https://euro5.designcorp.eu/ with smoke checks for page, CSS/JS, assets and PDF.","confidence":0.98,"sourceRefs":["/home/admin/tmp/FH/index.html","/home/admin/tmp/FH/styles.css","/home/admin/tmp/FH/script.js","/home/admin/tmp/FH/UI_QA.md","https://euro5.designcorp.eu/"],"owner":"codex","active":true,"createdAt":"2026-05-07T11:13:22.274Z","updatedAt":"2026-05-07T11:13:22.274Z","observedAt":"2026-05-07T11:13:22.274Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"96967dae-3a5e-4d11-ae18-967f28832503","type":"episodic","key":"euro5.contest-presentation.footer-screenshot.2026-05-07","value":"On 2026-05-07, added footer copyright to the EURO5 contest presentation: © 2026 designcorp.eu with designcorp.eu clickable and localized rights text. Regenerated PDF and generated/deployed full-page PNG screenshot exports/euro5-site-screenshot.png (1440x9408, ~3.38 MB) for Freelancehunt upload. Smoke checked live page, PDF, cover PNG and screenshot PNG.","confidence":0.97,"sourceRefs":["/home/admin/tmp/FH/index.html","/home/admin/tmp/FH/styles.css","/home/admin/tmp/FH/script.js","/home/admin/tmp/FH/exports/euro5-site-screenshot.png","https://euro5.designcorp.eu/exports/euro5-site-screenshot.png"],"owner":"codex","active":true,"createdAt":"2026-05-07T11:33:02.627Z","updatedAt":"2026-05-07T11:33:02.627Z","observedAt":"2026-05-07T11:33:02.627Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"419abe72-8c61-4f00-b3e8-cef35f3f1e44","type":"procedural","key":"impeccable_lab_hero_canvas_motion_performance","value":"For Impeccable Lab hero canvas, static canvas must not include broad paper/ray material. Static renders only base atmosphere, texture, vignette and center dissolve. Animated overlays include broad paper sheets, color ribbons, dark crease lines, and a visible foreground glass petal layer. Glass petals should be clearly visible to the eye: saturated red/blue RGB strokes, wide translucent bodies, inner color core and soft white highlight, with softened hero mask on the visual side. Avoid subtle alpha that only shows in pixel metrics. Keep reduced-motion static by default; dev review can force motion with ?motion=on.","confidence":0.98,"sourceRefs":["/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/src/main.js","/home/admin/workspace/impeccable-lab/src/styles.css"],"owner":"impeccable-lab","active":true,"createdAt":"2026-05-07T12:13:26.225Z","updatedAt":"2026-05-07T12:13:26.225Z","observedAt":"2026-05-07T12:13:26.225Z","expiresAt":"2027-05-07T12:13:26.226Z","supersedes":"b5806021-5b17-4129-b056-0e2df139d32a","supersededBy":null,"metadata":{}},{"id":"171cdaa8-d6db-4eb1-be63-8c44a79c7ce9","type":"procedural","key":"impeccable-lab-hero-paperfan-glasspetal-final.2026-05-07","value":"Accepted Impeccable Lab hero direction after owner approval on 2026-05-07: full-bleed light paper-fan canvas with low/right focal point slightly below the viewport, pale stretched center dissolve, warm translucent paper sheets, coral ribbons, violet/blue crease lines, and visible saturated red/blue foreground glass petals. Keep the hero engine split into a pre-rendered atmosphere layer plus lightweight animated overlays; remove old static ray builders instead of echoing static geometry. Downstream sections should reuse the hero palette through static or very slow petal/ray fragments only, not the full animated tunnel. QA expectation: dev URL checks at 1440x900 and 390x844, no horizontal overflow, hero fits first viewport, header/proof visible, canvas nonblank, motion visible with ?motion=on, reduced-motion static fallback.","confidence":0.97,"sourceRefs":["/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/src/main.js","/home/admin/workspace/impeccable-lab/.ui-qa/hero-lowered/UI_QA.generated.md","https://dev.impeccable-lab.designcorp.eu/?motion=on"],"owner":"codex","active":true,"createdAt":"2026-05-07T12:27:37.456Z","updatedAt":"2026-05-07T12:27:37.456Z","observedAt":"2026-05-07T12:27:37.456Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7cc87580-148a-4141-9571-252282ba7426","type":"episodic","key":"euro5.banner-contest-controlled-flow.2026-05-07","value":"EURO5 banner contest 7622 package created as a separate static page at https://euro5.designcorp.eu/banner/. Direction: Controlled Flow, blue brand field with vector route/system movement graphic, no people/photos/stock assets. Exports: UA PNG 950x2400, ENG PNG 1010x2015, print TIFF CMYK 72 dpi LZW for UA and ENG, plus PDF pack. Local and live UI QA passed on 1440/390; curl live links returned 200 OK. Existing /brand-system draft was left untouched.","confidence":0.94,"sourceRefs":["/home/admin/tmp/FH/banner/index.html","/home/admin/tmp/FH/banner/styles.css","/home/admin/tmp/FH/banner/exports/euro5-banner-ua-950x2400.png","/home/admin/tmp/FH/banner/exports/euro5-banner-ua-print-72dpi-cmyk.tif","https://euro5.designcorp.eu/banner/","https://freelancehunt.com/contest/banerna-reklama-euro5/7622.html"],"owner":"admin","active":true,"createdAt":"2026-05-07T12:47:35.665Z","updatedAt":"2026-05-07T12:47:35.665Z","observedAt":"2026-05-07T12:47:35.665Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6027bfc5-7893-4c7f-b93b-809670be6656","type":"procedural","key":"impeccable-lab-downstream-paper-petal-sections.2026-05-07","value":"Accepted downstream section direction for Impeccable Lab after the paper-fan hero: continue on a light paper base, not a heavy black site; reuse coral/blue/violet hero petals as clipped, mostly static CSS section motifs; process/proof sections should read as editorial sheets and ledgers, not dashboards, cards, QA boards, or product UI panels. Minor petal motion is acceptable as slow opacity breathing only. QA rule: decorative petals must be clipped so document scrollWidth stays equal to viewport at 1440px and 390px.","confidence":0.96,"sourceRefs":["/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/src/styles.css","/home/admin/workspace/impeccable-lab/index.html","/home/admin/workspace/impeccable-lab/.ui-qa/sections-final/UI_QA.generated.md","https://dev.impeccable-lab.designcorp.eu/?motion=on"],"owner":"codex","active":true,"createdAt":"2026-05-07T13:03:39.566Z","updatedAt":"2026-05-07T13:03:39.566Z","observedAt":"2026-05-07T13:03:39.566Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d210326f-b3d1-454a-862c-07c9ae65e7d9","type":"procedural","key":"impeccable-lab-fullbleed-section-and-selected-work-ledger-rule","value":"Updated Impeccable Lab section rule after owner correction on 2026-05-07: From Prompt/transformation and Start/contact sections should have full-bleed viewport backgrounds, but their information/content blocks must remain constrained inside the page field rather than stretching across the whole viewport. Remove section border/top-stripe effects around From Prompt. Header background should use real backdrop blur, not only transparency. Selected-work proof facts should visually match the format tabs (Landing reset / Product story / Launch gate): flat tab-like surfaces, 4px radius, paper neutrals and one coral active emphasis when needed. Do not use grey utility panels or pill metrics. Validate 1440px desktop and 390px mobile screenshots.","confidence":0.95,"sourceRefs":["/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/src/styles.css","/home/admin/workspace/impeccable-lab/.ui-qa/latest-specific-3/UI_QA.generated.md"],"owner":"codex","active":true,"createdAt":"2026-05-07T13:40:55.238Z","updatedAt":"2026-05-07T13:40:55.238Z","observedAt":"2026-05-07T13:40:55.238Z","expiresAt":null,"supersedes":"59982c81-6543-4b6b-af00-f595f2d87088","supersededBy":null,"metadata":{}},{"id":"2391cc89-779d-4c8d-a1cc-d9a1385058f5","type":"procedural","key":"impeccable-lab-from-prompt-background-ownership-rule","value":"Impeccable Lab From Prompt section layout rule: the section itself is full viewport width and owns the paper/petal background; the `from prompt` left label block is only a content/typographic layer inside the constrained page field. Do not put the visual atmosphere background on `.work-media`, because it creates a hard vertical cut at the column boundary (e.g. x=438 on 1440px). Desktop expected rects after fix: `.work-section` left=0 width=1440, `.work-media` left≈30 width≈408, `.work-copy` left≈438 right≈1410, document scrollWidth equals viewport. Mobile stacks full width with no horizontal overflow.","confidence":0.95,"sourceRefs":["/home/admin/workspace/impeccable-lab/src/styles.css","/home/admin/workspace/impeccable-lab/DESIGN.md","/home/admin/workspace/impeccable-lab/.ui-qa/work-section-bg-fix/UI_QA.generated.md"],"owner":"codex","active":true,"createdAt":"2026-05-07T16:33:59.903Z","updatedAt":"2026-05-07T16:33:59.903Z","observedAt":"2026-05-07T16:33:59.903Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c0199364-2773-47fd-9546-99150f079624","type":"episodic","key":"euro5.unified-contest-site-banner-menu.2026-05-07","value":"EURO5 contest presentation is now unified as one static site with shared navigation `Візитки / Банер`. Root remains the business-card presentation, `/banner/` was redesigned to match the main site's style with roll-up conference hero, clean roll-up mockup section, visual metaphor section, UA/ENG banner mockups and production export links. Generated mockup visuals are used only for web presentation context; print exports remain manually controlled PNG/TIFF/PDF. Deployed to /opt/designcorp/euro5/prod/current, live curl smoke returned 200 for root, /banner/, hero asset and new screenshot. Local and live UI QA passed for root and banner at 1440/390.","confidence":0.95,"sourceRefs":["/home/admin/tmp/FH/index.html","/home/admin/tmp/FH/script.js","/home/admin/tmp/FH/banner/index.html","/home/admin/tmp/FH/banner/styles.css","/home/admin/tmp/FH/banner/exports/euro5-banner-site-screenshot.png","https://euro5.designcorp.eu/","https://euro5.designcorp.eu/banner/"],"owner":"admin","active":true,"createdAt":"2026-05-07T17:15:47.982Z","updatedAt":"2026-05-07T17:15:47.982Z","observedAt":"2026-05-07T17:15:47.982Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"12b67ccc-72b3-4e65-a5cd-7e6168586788","type":"episodic","key":"euro5.banner-hero-footer-print-preview-adjustments.2026-05-07","value":"EURO5 unified contest site update on 2026-05-07: banner hero now uses user-provided 16:9 conference roll-up image `/home/admin/tmp/FH/banner/assets/rollup-hero-16x9.jpeg` and live `https://euro5.designcorp.eu/banner/assets/rollup-hero-16x9.jpeg`; desktop hero keeps the image visible with contain/16:9 handling. Business-card page footer was changed to the same dark `site-footer` style used by banner. Banner page visible handoff copy no longer presents TIFF/production files as ready; section 04 is labeled as presentation preview and section 05 lists only screenshot, UA PNG, ENG PNG and PDF. Updated screenshot export: `/home/admin/tmp/FH/banner/exports/euro5-banner-site-screenshot.png` and live `/banner/exports/euro5-banner-site-screenshot.png`. Local and live UI QA passed for root and `/banner/`.","confidence":0.94,"sourceRefs":["/home/admin/tmp/FH/banner/index.html","/home/admin/tmp/FH/banner/styles.css","/home/admin/tmp/FH/index.html","/home/admin/tmp/FH/styles.css","/home/admin/tmp/FH/banner/PRODUCT.md","/home/admin/tmp/FH/banner/DESIGN.md","https://euro5.designcorp.eu/","https://euro5.designcorp.eu/banner/"],"owner":"codex","active":true,"createdAt":"2026-05-07T17:38:31.615Z","updatedAt":"2026-05-07T17:38:31.615Z","observedAt":"2026-05-07T17:38:31.615Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e7950cc2-2882-44a9-9dc1-6be3711d1077","type":"procedural","key":"impeccable-lab-hero-fallback-fouc-rule","value":"For Impeccable Lab premium hero: normal JS/canvas path must not load /hero-paper-art.jpg. Keep fallback bitmap behind data-fallback-src and noscript/emergency fallback only; reveal it only if canvas cannot start. Add small critical CSS in index.html head (body background/color and a{color:inherit;text-decoration:none}) before Vite JS/CSS to avoid initial browser-blue link FOUC. Validate with Playwright request count 0 for hero-paper-art, desktop/mobile UI QA, and pnpm build.","confidence":0.95,"sourceRefs":["/home/admin/workspace/impeccable-lab/index.html","/home/admin/workspace/impeccable-lab/src/main.js","/home/admin/workspace/impeccable-lab/src/styles.css","git:4d90894"],"owner":"designcorp","active":true,"createdAt":"2026-05-07T17:44:10.093Z","updatedAt":"2026-05-07T17:44:10.093Z","observedAt":"2026-05-07T17:44:10.093Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"820d5473-d95b-4f08-a9dc-c8a33b841ba8","type":"episodic","key":"impeccable-lab-prod-deploy-2026-05-07","value":"On 2026-05-07, deployed Impeccable Lab static production by syncing /home/admin/workspace/impeccable-lab/dist/ to /opt/designcorp/impeccable-lab/prod/current/. Production URL https://impeccable-lab.designcorp.eu/ now serves build assets index-pvIyLtLM.js and index-ZbrmICVV.css with canvas hero and data-fallback-src. Playwright verified hero-paper-art requests count 0 on normal motion path; UI QA production pass for desktop 1440 and mobile 390. Code/design commit: 4d90894. Production QA commit: 324142a.","confidence":0.96,"sourceRefs":["/home/admin/workspace/impeccable-lab","/opt/designcorp/impeccable-lab/prod/current","git:4d90894","git:324142a"],"owner":"designcorp","active":true,"createdAt":"2026-05-07T18:03:01.838Z","updatedAt":"2026-05-07T18:03:01.838Z","observedAt":"2026-05-07T18:03:01.838Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f65b979e-e9c6-47fc-920e-102b4ceebafd","type":"episodic","key":"euro5.final-hero-adjustments.2026-05-07","value":"Final EURO5 contest site visual adjustments on 2026-05-07: business-card hero text is accepted right-aligned on desktop while mobile remains left-aligned. Banner hero uses a right-pinned image layer from below header to bottom of hero (`inset: 76px 0 0 auto`, `width: min(72vw, 1160px)`, `height: calc(100% - 76px)`), transparent spec strip with minimal blur, and a softened/stretched dark gradient over the hero image (`100% -> 94% -> 44% -> 14% -> 0% across 0/36/58/78/100`). Live QA passed for root and `/banner/`; banner screenshot export refreshed.","confidence":0.94,"sourceRefs":["/home/admin/tmp/FH/styles.css","/home/admin/tmp/FH/banner/styles.css","/home/admin/tmp/FH/banner/exports/euro5-banner-site-screenshot.png","https://euro5.designcorp.eu/","https://euro5.designcorp.eu/banner/"],"owner":"codex","active":true,"createdAt":"2026-05-07T18:25:25.341Z","updatedAt":"2026-05-07T18:25:25.341Z","observedAt":"2026-05-07T18:25:25.341Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"164b1aaa-3863-4bfc-a0a0-08fabc37351b","type":"episodic","key":"euro5.banner-pdf-removed.2026-05-07","value":"On 2026-05-07 the EURO5 banner presentation PDF was removed from visible handoff because the layout quality was not acceptable. Banner page `/banner/` now presents only site screenshot, UA PNG, and ENG PNG materials; header/footer/export links no longer mention PDF or `euro5-banner-pack.pdf`. The generated PDF file was removed from source and prod exports. Live UI QA for `/banner/` passed after removal and the site screenshot export was refreshed.","confidence":0.93,"sourceRefs":["/home/admin/tmp/FH/banner/index.html","/home/admin/tmp/FH/banner/PRODUCT.md","/home/admin/tmp/FH/banner/DESIGN.md","/home/admin/tmp/FH/banner/exports/euro5-banner-site-screenshot.png","https://euro5.designcorp.eu/banner/"],"owner":"codex","active":true,"createdAt":"2026-05-07T19:23:26.269Z","updatedAt":"2026-05-07T19:23:26.269Z","observedAt":"2026-05-07T19:23:26.269Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"91fb0a80-b606-4aa5-9fc2-ef34ff3370bb","type":"procedural","key":"skills.frontend-p1-quality-upgrade.2026-05-07","value":"Implemented P1 frontend/design quality upgrade inside skill-frontend-ai-quality-gate. Added reference-intake workflow for Refero/Refero Styles, premium scoring rubric, learning loop, semantic snapshot workflow, and graph-lite workflow. Added P1 templates: PREMIUM_SCORE.md, LEARNING_LOOP.md, SEMANTIC_SNAPSHOT.md, FRONTEND_GRAPH.md. Added scaffold script: /home/admin/workspace/skills/skill-frontend-ai-quality-gate/scripts/scaffold-p1-docs.sh which creates those P1 docs without overwriting existing files unless --force is used. Updated SKILL.md and docs page to define P1 Quality Upgrade: Reference Intake, Premium Scoring, Learning Loop, Semantic Snapshot, Graph Lite. Validation passed: bash -n scaffold-p1-docs.sh, temp-dir scaffold smoke, skill quick_validate, pnpm docs:build, pnpm km:index, MCP rebuild_index.","confidence":0.96,"sourceRefs":["/home/admin/workspace/skills/skill-frontend-ai-quality-gate/SKILL.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/scripts/scaffold-p1-docs.sh","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/references/reference-intake-workflow.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/references/premium-scoring-rubric.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/references/learning-loop-template.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/references/semantic-snapshot-workflow.md","/home/admin/workspace/skills/skill-frontend-ai-quality-gate/references/graph-lite-workflow.md","/home/admin/workspace/docs-designcorp/docs/agents/skills/skill-frontend-ai-quality-gate.md"],"owner":"codex","active":true,"createdAt":"2026-05-07T19:50:31.493Z","updatedAt":"2026-05-07T19:50:31.493Z","observedAt":"2026-05-07T19:50:31.493Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ff5d9515-bd43-41c9-91d5-fcab1e49308b","type":"procedural","key":"impeccable-lab-loading-a11y-hardening-rule","value":"For Impeccable Lab production cleanup: self-host Prata/Golos Text under /public/fonts and preload above-the-fold Cyrillic/Latin fonts from index.html; do not use Google Fonts @import/runtime requests. Inline critical CSS must cover header and hero layout so CSS-delay early paint keeps sticky header, full-size hero canvas, and stable H1 geometry. Primary coral action state uses oklch(0.560 0.170 29) with paper text for 4.57:1 contrast. Format controls must use role=tablist/tab, aria-controls, roving tabindex, active aria-selected, panel labelling, and Arrow/Home/End keyboard support. Production nginx should cache /assets/, /fonts/, and /hero-paper-art.jpg with public immutable 30d. Validate with UI QA no warnings, Google requests 0, hero fallback requests 0, CSS-delay early H1 geometry stable, and pnpm build.","confidence":0.96,"sourceRefs":["/home/admin/workspace/impeccable-lab/index.html","/home/admin/workspace/impeccable-lab/src/styles.css","/home/admin/workspace/impeccable-lab/src/main.js","/home/admin/workspace/impeccable-lab/deploy/nginx/impeccable-lab.designcorp.eu","git:f03195e"],"owner":"designcorp","active":true,"createdAt":"2026-05-07T20:18:44.809Z","updatedAt":"2026-05-07T20:18:44.809Z","observedAt":"2026-05-07T20:18:44.809Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"aa482057-98d0-432e-b34b-07db40b31888","type":"episodic","key":"impeccable-lab-p1-p2-hardening-deploy-2026-05-07","value":"On 2026-05-07, completed Impeccable Lab P1/P2 cleanup and deployed to production. Fixes: self-hosted fonts, expanded critical CSS for stable first paint, darker AA-compliant CTA/action coral, tabs keyboard/ARIA hardening, text-overflow warning cleanup, footer touch target, and nginx immutable cache for /fonts/ and /hero-paper-art.jpg. Production serves assets index-Bxu-0z8n.js and index-DOXwqzuC.css. Checks: node --check, git diff --check, pnpm build, UI QA production pass with no warnings, CSS-delay early paint stable, Google font requests 0, hero-paper-art requests 0 on normal canvas path, CTA/action contrast 4.57:1, nginx -t and reload passed. Commit: f03195e.","confidence":0.97,"sourceRefs":["https://impeccable-lab.designcorp.eu/","/home/admin/workspace/impeccable-lab/UI_QA.md","git:f03195e"],"owner":"designcorp","active":true,"createdAt":"2026-05-07T20:19:03.441Z","updatedAt":"2026-05-07T20:19:03.441Z","observedAt":"2026-05-07T20:19:03.441Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"54fd9f2f-266a-4ed1-82c9-79a9e2ea0172","type":"procedural","key":"fh-monitor-baseline-notifications","value":"Freelancehunt monitor in /home/admin/workspace/FH supports `pnpm monitor:baseline` to mark the current relevant feed as seen without sending Telegram. After baseline, set `FH_MONITOR_DRY_RUN=0` in monitor/.env so only new relevant projects/contests are sent to Telegram. Current baseline was created on 2026-05-08 with 9 relevant contests marked seen; Telegram token/chat are configured in monitor/.env.","confidence":0.9,"sourceRefs":["/home/admin/workspace/FH/monitor/scripts/fh-monitor.mjs","/home/admin/workspace/FH/package.json","/home/admin/workspace/FH/monitor/README.md"],"owner":"system","active":true,"createdAt":"2026-05-08T14:56:26.174Z","updatedAt":"2026-05-08T14:56:26.174Z","observedAt":"2026-05-08T14:56:26.174Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"aff33c46-14c0-447b-a095-cafb90655083","type":"procedural","key":"amazoncookbook.ui-contract.2026-05-08","value":"AmazonCookBook now has root UI/product quality docs: PRODUCT.md, DESIGN.md, REFERENCES.md, and UI_QA.md. The accepted product UI direction is a warm editorial KDP publishing library: status-first dashboard, BookArt as the canonical cover/fallback gateway, VariantWorkspaceInspector as the right action center, KDP/A+/Ads terminology preserved, and no standalone Publish page. UI QA expectation: run Impeccable context loader, official login UI QA, authenticated product-route Playwright smoke at 1440 and 390, pnpm typecheck, pnpm validate:content, git diff --check, and pnpm build for non-trivial UI/CSS work. Mobile project rail should wrap into a visible compact grid rather than hidden horizontal scroll so module links are not clipped.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/PRODUCT.md","/home/admin/workspace/AmazonCookBook/DESIGN.md","/home/admin/workspace/AmazonCookBook/REFERENCES.md","/home/admin/workspace/AmazonCookBook/UI_QA.md","/home/admin/workspace/AmazonCookBook/app/styles/responsive.css"],"owner":"codex","active":true,"createdAt":"2026-05-08T15:06:58.821Z","updatedAt":"2026-05-08T15:06:58.821Z","observedAt":"2026-05-08T15:06:58.821Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d5b0aa5a-7119-4def-ac9d-607ebf9bc058","type":"procedural","key":"fh-project-domain-convention","value":"Freelancehunt public project pages should use `https://<slug>.fh.designcorp.eu`, with workspace at `/home/admin/workspace/FH/projects/<slug>` and static runtime at `/opt/designcorp/fh/<slug>/prod/current`. DNS wildcard for `*.fh.designcorp.eu` resolves to the server; create a dedicated nginx vhost and issue SSL via `sudo -n certbot --nginx -d <slug>.fh.designcorp.eu --redirect --non-interactive`. First deployed example: `https://oh-my-grant.fh.designcorp.eu`.","confidence":0.95,"sourceRefs":["/home/admin/workspace/FH/README.md","/home/admin/workspace/FH/docs/workflow.md","/home/admin/workspace/FH/docs/domain-runbook.md","/home/admin/workspace/FH/projects/oh-my-grant/README.md"],"owner":"system","active":true,"createdAt":"2026-05-08T15:22:54.314Z","updatedAt":"2026-05-08T15:22:54.314Z","observedAt":"2026-05-08T15:22:54.314Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"16aa819f-a8ed-448f-9296-d9c85318f10f","type":"profile","key":"design.preference.no-visible-grid-backgrounds","value":"Owner preference confirmed on 2026-05-08: do not use visible grid wallpaper or technical grid backgrounds in website/landing visuals unless explicitly requested for a specific art direction. Clean backgrounds and brand-derived visual systems are preferred.","confidence":0.94,"sourceRefs":["user_directive_2026-05-08_chat","/home/admin/workspace/FH/projects/oh-my-grant/DESIGN.md","/home/admin/workspace/FH/projects/oh-my-grant/REFERENCES.md"],"owner":"codex","active":true,"createdAt":"2026-05-08T20:45:48.792Z","updatedAt":"2026-05-08T20:45:48.792Z","observedAt":"2026-05-08T20:45:48.792Z","expiresAt":"2027-05-08T20:45:48.792Z","supersedes":null,"supersededBy":null,"metadata":{}},{"id":"13c34ba7-7e63-4923-87d2-a4fa676b7927","type":"procedural","key":"agent-chat.telegram-mvp.2026-05-10","value":"Agent Chat now has a safe Telegram setup bridge in /home/admin/workspace/agent-chat/telegram-bot.mjs. It loads .env itself, requires TELEGRAM_BOT_TOKEN, uses Telegram long polling, answers /whoami, /chatid, /status, /ping, stores polling offset in data/telegram-offset.json, and intentionally does not start agents, run shell, write git history, push, deploy, or use sudo. Config keys: TELEGRAM_BOT_TOKEN, TELEGRAM_ALLOWED_USER_IDS, TELEGRAM_AGENT_GROUP_ID, TELEGRAM_ALLOWED_CHAT_IDS, TELEGRAM_POLL_TIMEOUT_SECONDS, TELEGRAM_LOG_UPDATES. Start with `corepack pnpm run telegram:dev`; after /whoami and /chatid fill allowed user/group IDs and restart. Systemd template: deploy/agent-chat-telegram.service.","confidence":0.94,"sourceRefs":["/home/admin/workspace/agent-chat/telegram-bot.mjs","/home/admin/workspace/agent-chat/README.md","/home/admin/workspace/agent-chat/.env.example","/home/admin/workspace/agent-chat/deploy/agent-chat-telegram.service","/home/admin/workspace/docs-designcorp/docs/projects/agent-chat.md"],"owner":"codex","active":true,"createdAt":"2026-05-10T12:18:46.443Z","updatedAt":"2026-05-10T12:18:46.443Z","observedAt":"2026-05-10T12:18:46.443Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"5e2300f5-cb1e-48da-ade7-0003080f402e","type":"procedural","key":"agent-chat.telegram-service.active.2026-05-10","value":"agent-chat Telegram MVP service is installed and active as agent-chat-telegram.service. Unit path: /etc/systemd/system/agent-chat-telegram.service; template: /home/admin/workspace/agent-chat/deploy/agent-chat-telegram.service; working directory /home/admin/workspace/agent-chat; env file /home/admin/workspace/agent-chat/.env. The BotFather token was moved out of tracked .env.example into local .env, .env permissions set to 600, and .env.example restored to TELEGRAM_BOT_TOKEN=copy-from-botfather. Current setup still needs TELEGRAM_ALLOWED_USER_IDS and TELEGRAM_AGENT_GROUP_ID filled after running /whoami and /chatid in Telegram, then service restart.","confidence":0.95,"sourceRefs":["/home/admin/workspace/agent-chat/.env.example","/home/admin/workspace/agent-chat/deploy/agent-chat-telegram.service","/home/admin/workspace/agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/agent-chat.md","systemctl:agent-chat-telegram.service"],"owner":"codex","active":true,"createdAt":"2026-05-10T12:24:12.927Z","updatedAt":"2026-05-10T12:24:12.927Z","observedAt":"2026-05-10T12:24:12.927Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"8f4f14ba-cdb4-440e-bfd9-8ca459e91f4d","type":"procedural","key":"agent-chat.telegram-agent-group-protocol.2026-05-10","value":"Agent Chat Telegram bot now has a safe role/job coordination layer without agent execution. Commands: /agents lists orchestrator/designer/frontend/qa/security/deploy/docs roles; /brief shows current shared context; /brief <text> updates the shared context; /assign <role> <task> creates an open job; /jobs and /jobs all list jobs; /job <id> shows details/events; /stop <id> <reason> marks a job stopped. Runtime state file is /home/admin/workspace/agent-chat/data/telegram-agent-state.json and is gitignored. Once TELEGRAM_ALLOWED_USER_IDS and TELEGRAM_AGENT_GROUP_ID are configured, all commands, including setup commands, require allowlist access. Agent execution/shell/git/deploy remain disabled in this layer.","confidence":0.94,"sourceRefs":["/home/admin/workspace/agent-chat/telegram-bot.mjs","/home/admin/workspace/agent-chat/.gitignore","/home/admin/workspace/agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/agent-chat.md"],"owner":"codex","active":true,"createdAt":"2026-05-10T12:39:41.968Z","updatedAt":"2026-05-10T12:39:41.968Z","observedAt":"2026-05-10T12:39:41.968Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"3b85844d-54ec-44ff-8a2b-a7fba03925e6","type":"procedural","key":"agent-chat.session-registry-dry-run.2026-05-10","value":"Agent Chat Telegram bot now includes a tracked session registry in /home/admin/workspace/agent-chat/agent-registry.json and dry-run session commands. Commands: /sessions lists session status, /session <role> shows tmux target/workdir/skills/hard rules, /run <job-id> generates and stores a dry-run prompt for that job without starting tmux/Codex or executing shell/git/deploy, /result <job-id> <text> records a result and marks the job reported, /stop session <role> <reason> resets a dry-run session to idle. Runtime session/job state remains in gitignored /home/admin/workspace/agent-chat/data/telegram-agent-state.json. Service restarted successfully as agent-chat-telegram.service with allowed users=1 and allowed chats=1. Validation passed: node --check telegram-bot.mjs, agent-registry JSON parse, git diff --check, token-pattern git grep, pnpm docs:build, pnpm km:index, MCP rebuild_index.","confidence":0.95,"sourceRefs":["/home/admin/workspace/agent-chat/telegram-bot.mjs","/home/admin/workspace/agent-chat/agent-registry.json","/home/admin/workspace/agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/agent-chat.md","systemctl:agent-chat-telegram.service"],"owner":"codex","active":true,"createdAt":"2026-05-10T12:50:43.388Z","updatedAt":"2026-05-10T12:50:43.388Z","observedAt":"2026-05-10T12:50:43.388Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"be430db1-dc15-4ab9-b7dd-f74b90795413","type":"episodic","key":"AmazonCookBook.ocean-animals-kdp-ads-relaunch-2026-05-10","value":"On 2026-05-10 Ocean Animals paperback ASIN B0CVNCV2VP was relaunched. KDP paperback details were updated and submitted to review: new HTML description plus 7 backend keywords (relaxing coloring book; ocean animals coloring book; sea creatures coloring book; adult coloring book animals; animal coloring books for adults; adult coloring book sea life; ocean coloring book for adults). Existing Amazon Ads Auto campaign BC Ocean Auto A0925192LHR59QKD1HU8 / ad group A08550031DUSC9U3CVIAF was reduced to $3/day, dynamic bids down only confirmed, off-Amazon set to limit spend, auto bids set to close $0.26 and complements/loose/substitutes $0.18. New Sponsored Products manual Exact campaign BC Ocean Exact Winners - 2026-05-10 launched as A093285516VW4CFLQFGFJ / ad group A058714034KXAFB6KJHLZ with $5/day, 10 exact targets, bids $0.20-$0.30, 11 negative phrase keywords. New Phrase campaign BC Ocean Phrase Expansion - 2026-05-10 launched as A0844392281TB8WNU9XIW / ad group A01498123NQNU7ALKSGNF with $2/day, 6 phrase targets, bids $0.18-$0.22, 11 negative phrase keywords. Product targeting was intentionally not launched until exact competitor ASINs are collected. Working doc: docs/ocean-animals-amazon-launch-2026-05-10.md.","confidence":0.96,"sourceRefs":["/home/admin/workspace/AmazonCookBook/docs/ocean-animals-amazon-launch-2026-05-10.md","Amazon Ads live console 2026-05-10","KDP Bookshelf live console 2026-05-10"],"owner":"codex","active":true,"createdAt":"2026-05-10T13:42:00.684Z","updatedAt":"2026-05-10T13:42:00.684Z","observedAt":"2026-05-10T13:42:00.684Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"bad62c62-ce82-4917-8d93-c2c756894702","type":"procedural","key":"agent-chat.full-tmux-codex-execution.2026-05-10","value":"Agent Chat Telegram bot full execution layer is enabled. Local .env has AGENT_EXECUTION_ENABLED=1 and AGENT_CAPTURE_LINES=100. The bot manages real tmux/Codex sessions through /start <role>|all, /run <job-id>, /send <role> <text>, /tail <role>, /stop session <role>. Codex sessions are launched from agent-registry.json using `codex --no-alt-screen --sandbox danger-full-access --ask-for-approval never --search` and run as user admin, not root. Seven tmux sessions are live: dc-agent-orchestrator, dc-agent-designer, dc-agent-frontend, dc-agent-qa, dc-agent-security, dc-agent-deploy, dc-agent-docs. Codex trust prompt for /home/admin/workspace was accepted in those sessions. Policy boundary remains: no sudo, git push/merge/rebase/tag, deploy, or prod/systemd/nginx changes without explicit owner approval; do not print secrets/tokens. Validation passed: node --check telegram-bot.mjs, agent-registry JSON parse, git diff --check, token-pattern git grep, pnpm docs:build, pnpm km:index, MCP rebuild_index, service active, tmux sessions live.","confidence":0.96,"sourceRefs":["/home/admin/workspace/agent-chat/telegram-bot.mjs","/home/admin/workspace/agent-chat/agent-registry.json","/home/admin/workspace/agent-chat/.env.example","/home/admin/workspace/agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/agent-chat.md","systemctl:agent-chat-telegram.service","tmux:dc-agent-*"],"owner":"codex","active":true,"createdAt":"2026-05-10T13:49:38.334Z","updatedAt":"2026-05-10T13:49:38.334Z","observedAt":"2026-05-10T13:49:38.334Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0b1b1239-6975-4cf5-97db-b1e6f4628fe7","type":"procedural","key":"fh-monitor-systemd-and-alerts","value":"Freelancehunt monitor lives in /home/admin/workspace/FH/monitor. On 2026-05-10 it was installed as systemd timer fh-monitor.timer using /etc/systemd/system/fh-monitor.service and .timer from /home/admin/workspace/FH/deploy/systemd; runs /usr/bin/node /home/admin/workspace/FH/monitor/scripts/fh-monitor.mjs every 10 minutes as admin. Script loads monitor/.env, uses CDP browser at http://127.0.0.1:9222, waits/retries short Cloudflare transitions, sends rate-limited Telegram alerts for manual verification, and logs scans to monitor/logs/monitor.ndjson. Status commands: systemctl list-timers --all fh-monitor.timer --no-pager; systemctl status fh-monitor.service --no-pager; tail -40 /home/admin/workspace/FH/monitor/logs/monitor.ndjson.","confidence":0.92,"sourceRefs":["/home/admin/workspace/FH/monitor/scripts/fh-monitor.mjs","/home/admin/workspace/FH/deploy/systemd/fh-monitor.service","/home/admin/workspace/FH/deploy/systemd/fh-monitor.timer","/home/admin/workspace/FH/monitor/README.md"],"owner":"designcorp","active":true,"createdAt":"2026-05-10T14:00:06.669Z","updatedAt":"2026-05-10T14:00:06.669Z","observedAt":"2026-05-10T14:00:06.669Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"fb9c7e7b-43cd-4c8c-b299-633ad5b36852","type":"episodic","key":"AmazonCookBook.amazon-ads-api-connector-baseline-2026-05-10","value":"On 2026-05-10 AmazonCookBook gained the first Amazon Ads API connector baseline: lib/amazon-ads-api.ts handles LWA refresh-token auth and Sponsored Products campaign listing, lib/amazon-ads-view-model.ts feeds the Ads page with connection/campaign state, VariantAdsWorkspace shows an Amazon Ads API status panel, scripts/check-amazon-ads-api.ts probes env/profile/campaign access, and docs/amazon-ads-api-integration.md documents env and mapping. Current server env does not include AMAZON_ADS_CLIENT_ID, AMAZON_ADS_CLIENT_SECRET, or AMAZON_ADS_REFRESH_TOKEN, so live API access is not configured yet; UI falls back to saved Ads plan until credentials/profile id are added.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/lib/amazon-ads-api.ts","/home/admin/workspace/AmazonCookBook/lib/amazon-ads-view-model.ts","/home/admin/workspace/AmazonCookBook/components/workspace/VariantAdsWorkspaceClient.tsx","/home/admin/workspace/AmazonCookBook/scripts/check-amazon-ads-api.ts","/home/admin/workspace/AmazonCookBook/docs/amazon-ads-api-integration.md"],"owner":"codex","active":true,"createdAt":"2026-05-10T14:01:01.042Z","updatedAt":"2026-05-10T14:01:01.042Z","observedAt":"2026-05-10T14:01:01.042Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ab98126b-ebfc-4383-a9a9-f59f4fde95ca","type":"procedural","key":"agent-chat.chat-mode-ask.2026-05-10","value":"Agent Chat Telegram bot now supports chat-mode replies from tmux/Codex sessions. Commands: /ask <role> <text> sends text to the role session, waits for the tmux pane to stabilize, and returns captured output to Telegram. Short syntax also works for allowed users/chats: @orchestrator <text> or designer: <text>. /send remains low-level and only sends text without waiting for a reply. New env keys: AGENT_REPLY_TIMEOUT_MS=90000 and AGENT_REPLY_STABLE_POLLS=2. The bot splits long Telegram replies into chunks and has best-effort sendChatAction typing. Service restarted and active. Validation passed: node --check telegram-bot.mjs, agent-registry JSON parse, git diff --check, token-pattern git grep, pnpm docs:build, pnpm km:index, MCP rebuild_index.","confidence":0.94,"sourceRefs":["/home/admin/workspace/agent-chat/telegram-bot.mjs","/home/admin/workspace/agent-chat/.env.example","/home/admin/workspace/agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/agent-chat.md","systemctl:agent-chat-telegram.service"],"owner":"codex","active":true,"createdAt":"2026-05-10T14:04:34.156Z","updatedAt":"2026-05-10T14:04:34.156Z","observedAt":"2026-05-10T14:04:34.156Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"bacbcb8b-fb3b-41cf-b940-4131927df51f","type":"procedural","key":"agent-chat.clean-chat-mode-codex-exec.2026-05-10","value":"Agent Chat Telegram chat-mode was changed after owner feedback that tmux capture looked like terminal garbage. /ask <role> <text>, @orchestrator <text>, and role: <text> now use a clean `codex exec` turn with role context, shared brief, active jobs, hard rules, and recent per-role chat history from data/telegram-agent-state.json. The bot returns only the final answer to Telegram, not tmux/Codex TUI capture. Live tmux sessions remain available for /run, /send, /tail and long-running interactive work. Temporary output files use data/codex-ask-*.txt and are gitignored/cleaned up. Service restarted and active. Validation passed: node --check telegram-bot.mjs, agent-registry JSON parse, git diff --check, token-pattern git grep, pnpm docs:build, pnpm km:index, MCP rebuild_index.","confidence":0.95,"sourceRefs":["/home/admin/workspace/agent-chat/telegram-bot.mjs","/home/admin/workspace/agent-chat/.gitignore","/home/admin/workspace/agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/agent-chat.md","systemctl:agent-chat-telegram.service"],"owner":"codex","active":true,"createdAt":"2026-05-10T14:56:34.918Z","updatedAt":"2026-05-10T14:56:34.918Z","observedAt":"2026-05-10T14:56:34.918Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"dc837512-cbdb-4730-9c89-73fa367af1f6","type":"procedural","key":"agent-chat.codex-bin-systemd-fix.2026-05-10","value":"Fixed Agent Chat Telegram /ask failure `spawnSync codex ENOENT` under systemd. Cause: codex is installed at /home/admin/.npm-global/bin/codex and systemd PATH did not include it. Added CODEX_BIN env support with default /home/admin/.npm-global/bin/codex; runCodexExecAsk and startTmuxSession now resolve codex to CODEX_BIN and pass an agentProcessEnv with HOME=/home/admin and PATH including /home/admin/.npm-global/bin. Updated .env.example, README, and docs project page. Local .env now has CODEX_BIN=/home/admin/.npm-global/bin/codex. Service restarted and active. Validation passed: node --check telegram-bot.mjs, agent-registry JSON parse, git diff --check, token-pattern git grep, pnpm docs:build, pnpm km:index, MCP rebuild_index.","confidence":0.95,"sourceRefs":["/home/admin/workspace/agent-chat/telegram-bot.mjs","/home/admin/workspace/agent-chat/.env.example","/home/admin/workspace/agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/agent-chat.md","systemctl:agent-chat-telegram.service"],"owner":"codex","active":true,"createdAt":"2026-05-10T15:27:32.446Z","updatedAt":"2026-05-10T15:27:32.446Z","observedAt":"2026-05-10T15:27:32.446Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ca09d441-866a-452a-938e-637a979a1fc3","type":"procedural","key":"gmg.active-work-root.2026-05-10","value":"Owner directive on 2026-05-10: all further GMG static-site work should be done in `/home/admin/workspace/gmg/public/gmg-preview`. `public/gmg2-preview` is the approved Phase 1 archive and must not be changed. The static live host `https://gmg.landing.designcorp.eu/` serves directly from `public/gmg-preview`, so edits there are live immediately.","confidence":0.96,"sourceRefs":["user_directive_2026-05-10_chat","/home/admin/workspace/gmg/PRODUCT.md","/home/admin/workspace/docs-designcorp/docs/projects/gmg.md"],"owner":"codex","active":true,"createdAt":"2026-05-10T15:52:30.576Z","updatedAt":"2026-05-10T15:52:30.576Z","observedAt":"2026-05-10T15:52:30.576Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"afbbfd30-da2f-43e7-a198-3cc97e2cdcd5","type":"procedural","key":"agent-chat.codex-exec-approval-flag-fix.2026-05-10","value":"Fixed Agent Chat Telegram chat-mode /ask failure `unexpected argument --ask-for-approval` under codex exec. Cause: interactive Codex flags differ from non-interactive `codex exec`; `--ask-for-approval` and `--search` are invalid for exec. runCodexExecAsk now invokes `/home/admin/.npm-global/bin/codex exec --cd <workdir> --sandbox danger-full-access -c 'approval_policy=\"never\"' --skip-git-repo-check --output-last-message <file> -`. Minimal live CLI smoke returned status 0 and OK; agent-chat-telegram.service restarted active.","confidence":0.95,"sourceRefs":["/home/admin/workspace/agent-chat/telegram-bot.mjs","/home/admin/workspace/agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/agent-chat.md","systemctl:agent-chat-telegram.service"],"owner":"codex","active":true,"createdAt":"2026-05-10T17:44:02.818Z","updatedAt":"2026-05-10T17:44:02.818Z","observedAt":"2026-05-10T17:44:02.818Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d6e2a23a-7aea-4ee3-ba5b-57281dadb27b","type":"episodic","key":"AmazonCookBook.amazon-ads-oauth-helper-2026-05-10","value":"On 2026-05-10 AmazonCookBook gained a safe local Amazon Ads OAuth setup helper. `pnpm amazon-ads:oauth` runs scripts/amazon-ads-oauth.ts, reads Amazon Ads LWA client credentials from env/local files, prints a Login with Amazon authorization URL, handles a localhost callback at http://127.0.0.1:3214/amazon-ads/oauth/callback, exchanges the authorization code for a refresh token, writes credentials to gitignored .env.amazon-ads.local with chmod 600, probes advertising profiles, and auto-selects a single US profile when possible. It avoids adding a public production callback endpoint. Docs and .env.amazon-ads.example were updated. Current server still lacks real AMAZON_ADS_CLIENT_ID/CLIENT_SECRET/REFRESH_TOKEN, so live API access remains unavailable until owner completes Amazon app approval/login.","confidence":0.95,"sourceRefs":["/home/admin/workspace/AmazonCookBook/scripts/amazon-ads-oauth.ts","/home/admin/workspace/AmazonCookBook/docs/amazon-ads-api-integration.md","/home/admin/workspace/AmazonCookBook/.env.amazon-ads.example","/home/admin/workspace/AmazonCookBook/package.json"],"owner":"codex","active":true,"createdAt":"2026-05-10T17:53:35.415Z","updatedAt":"2026-05-10T17:53:35.415Z","observedAt":"2026-05-10T17:53:35.415Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1682a9dd-76c4-448b-a07b-71c7844532a4","type":"episodic","key":"AmazonCookBook.hphf-kindle-ads-delivery-correction-2026-05-10","value":"On 2026-05-10 at 20:45 UTC, HPHF Kindle manual keyword campaign was corrected after paperback ads had recovered but Kindle remained empty. In Amazon Ads, campaign HPHF-Kindle-FreePromo-SP-Keywords-US-Apr29 / ad group Core Exact was at about 25 impressions, 0 clicks, 0 purchases for May 10. Core Exact bid changes: high protein high fiber cookbook 0.20->0.35, high protein meal prep cookbook 0.20->0.32, protein and fiber recipes 0.20->0.25. Added six Exact Kindle-intent keywords: healthy cookbook kindle 0.25, high fiber cookbook kindle 0.25, high protein cookbook kindle 0.35 (overrode suggested 1.39), high protein kindle cookbook 0.25, high protein meal prep kindle 0.30 (overrode suggested 0.46), high protein recipes kindle 0.25. Meal Intent Phrase bid changes: easy healthy dinners cookbook 0.20->0.23, easy high protein meals 0.20->0.32, healthy cookbook for beginners 0.20->0.35, healthy meal prep cookbook 0.20->0.23, high protein dinners cookbook 0.20->0.32, high protein recipes cookbook 0.20->0.33. Kindle budget stayed 4/day; Kindle Auto/Product stayed paused. Watch after 24-48h before scaling budget.","confidence":0.96,"sourceRefs":["/home/admin/workspace/AmazonCookBook/docs/high-protein-high-fiber-amazon-ads-optimization-2026-05-09.md","Amazon Ads live console 2026-05-10 20:45 UTC"],"owner":"codex","active":true,"createdAt":"2026-05-10T20:46:22.739Z","updatedAt":"2026-05-10T20:46:22.739Z","observedAt":"2026-05-10T20:46:22.739Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"acf58bd8-2c39-43c1-8e47-b91e001bc1a6","type":"episodic","key":"serveradmin-euro5-monitoring-disabled-2026-05-10","value":"On 2026-05-10 owner confirmed euro5.designcorp.eu is intentionally disabled but serveradmin-agent was still sending P0 site-down Telegram reminders with curl exit 35. Action taken: archived site euro5.designcorp.eu through serveradmin API DELETE /api/sites/euro5.designcorp.eu, leaving nginx/domain untouched; cleared /home/admin/logs/serveradmin/state.json site_alerts[euro5.designcorp.eu] to fails=0/down=false/alert_skipped=true. Verification after one agent cycle: site remains archived=true, euro5 is absent from active /api/sites and /api/health, and recent euro5 events count is 0.","confidence":0.95,"sourceRefs":["/home/admin/logs/serveradmin/sites.json","/home/admin/logs/serveradmin/state.json","/home/admin/logs/serveradmin/operator_audit.jsonl"],"owner":"serveradmin","active":true,"createdAt":"2026-05-10T22:34:53.904Z","updatedAt":"2026-05-10T22:34:53.904Z","observedAt":"2026-05-10T22:34:53.904Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f7f50523-3104-49cc-b367-ea0346547743","type":"procedural","key":"telegram-agent-chat.no-tmux-mvp.2026-05-11","value":"Created new DesignCorp Telegram Agent Chat project at /home/admin/workspace/telegram-agent-chat as a clean no-tmux control plane. It uses Telegram long polling, allowlisted users/chats, roles from agents.json, shared event history in data/state.json, per-role persistent Codex thread ids, and Codex runtime via `codex exec --json` / `codex exec resume --json`. Commands include /ask, @role, role:, /panel, /brief, /assign, /jobs, /job, /run, /threads, /reset. Old agent-chat-telegram.service was intentionally not stopped or replaced because one Telegram bot token cannot be polled by two services at once. Runtime smoke passed with `corepack pnpm run smoke:runtime`; docs page added at docs-designcorp/docs/projects/telegram-agent-chat.md.","confidence":0.95,"sourceRefs":["/home/admin/workspace/telegram-agent-chat/src/bot.mjs","/home/admin/workspace/telegram-agent-chat/src/codex-runtime.mjs","/home/admin/workspace/telegram-agent-chat/agents.json","/home/admin/workspace/telegram-agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/telegram-agent-chat.md"],"owner":"codex","active":true,"createdAt":"2026-05-11T15:10:22.064Z","updatedAt":"2026-05-11T15:10:22.064Z","observedAt":"2026-05-11T15:10:22.064Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"65acf795-e6e9-4a0e-983f-5d7d9d8db317","type":"procedural","key":"gmg-icon-system","value":"GMG authored UI icons in /home/admin/workspace/gmg/public/gmg-preview must use the local Lucide sprite directly: <svg viewBox=\"0 0 24 24\"><use href=\"/assets/icons/lucide-sprite.svg#icon-name\"></use></svg>. Do not hand-draw inline SVG path icons for UI iconography, and do not rely on header-stick.js icon replacement for final authored content. Add data-lock-icon to authored icon wrappers when JS should not mutate them.","confidence":0.98,"sourceRefs":["user directive on 2026-05-11: use /assets/icons/lucide-sprite.svg#chart-column style icons and make it a rule","/home/admin/workspace/gmg/public/gmg-preview/assets/icons/lucide-sprite.svg","/home/admin/workspace/gmg/public/gmg-preview/header-stick.js"],"owner":"codex","active":true,"createdAt":"2026-05-11T15:13:29.408Z","updatedAt":"2026-05-11T15:13:29.408Z","observedAt":"2026-05-11T15:13:29.408Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"49bd0252-fffd-460d-adc5-d6056a8dc94e","type":"procedural","key":"telegram-agent-chat.cutover-active.2026-05-11","value":"Cutover completed on 2026-05-11: /home/admin/workspace/telegram-agent-chat is now the active Telegram agent bot service. Installed /etc/systemd/system/telegram-agent-chat.service from deploy/telegram-agent-chat.service, created local .env from the previous agent-chat Telegram token and allowlists without printing secrets, stopped and disabled agent-chat-telegram.service, enabled and started telegram-agent-chat.service. New service is active/enabled and logs `tmux: disabled/not used`; old service is inactive/disabled. Rollback: `sudo -n systemctl stop telegram-agent-chat.service` then `sudo -n systemctl start agent-chat-telegram.service`.","confidence":0.97,"sourceRefs":["/home/admin/workspace/telegram-agent-chat/.env","/home/admin/workspace/telegram-agent-chat/deploy/telegram-agent-chat.service","/etc/systemd/system/telegram-agent-chat.service","systemctl:telegram-agent-chat.service","systemctl:agent-chat-telegram.service","/home/admin/workspace/docs-designcorp/docs/projects/telegram-agent-chat.md"],"owner":"codex","active":true,"createdAt":"2026-05-11T15:32:39.757Z","updatedAt":"2026-05-11T15:32:39.757Z","observedAt":"2026-05-11T15:32:39.757Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"108a5502-87e7-44d9-b1c2-cb41a45ae591","type":"procedural","key":"telegram-agent-chat.observability.2026-05-11","value":"Telegram Agent Chat now has run observability for no-tmux agent execution. Each /ask, @role, role:, /panel role turn, or /run job immediately creates state.activeRuns[runId], marks the job running when applicable, replies in Telegram with run id and status running, sends periodic progress messages controlled by TELEGRAM_PROGRESS_INTERVAL_SECONDS (default 60), and on completion records runs as completed/failed/interrupted. Commands: /active shows active runs, /runs [count] shows recent run history, /events [count] or /trace [count] shows shared event trace, /state combines status, active runs, and open/running jobs. On service startup, leftover activeRuns are recovered as interrupted before polling resumes. Active local runtime is CODEX_SANDBOX=danger-full-access with CODEX_APPROVAL_POLICY=never; hard rules still require explicit owner approval in Telegram before sudo, deploy, nginx/systemd, or git push/merge/rebase/tag.","confidence":0.96,"sourceRefs":["/home/admin/workspace/telegram-agent-chat/src/bot.mjs","/home/admin/workspace/telegram-agent-chat/src/state-store.mjs","/home/admin/workspace/telegram-agent-chat/.env","/home/admin/workspace/telegram-agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/telegram-agent-chat.md","systemctl:telegram-agent-chat.service"],"owner":"codex","active":true,"createdAt":"2026-05-11T21:24:27.839Z","updatedAt":"2026-05-11T21:24:27.839Z","observedAt":"2026-05-11T21:24:27.839Z","expiresAt":null,"supersedes":"932a3b79-77db-4566-b2a4-2375919870ea","supersededBy":null,"metadata":{}},{"id":"5003be66-5d78-45c3-8d66-f6a058d619e6","type":"procedural","key":"telegram-agent-chat.topic-scope.2026-05-11","value":"Telegram Agent Chat now supports Telegram forum topics as project scopes. Scope key is `chat_id:message_thread_id`; the main chat uses `chat_id:main`. Commands /brief, /assign, /jobs, /job, /run, /threads, /reset, /runs, and /events operate in the current topic scope. /active shows current-topic runs by default and /active all shows every active run. /topic create <name> creates a Telegram forum topic through createForumTopic and stores it in state.topics plus state.scopes. Bot execution is now backgrounded so long Codex runs do not block polling; /active and /state can be used while agents are working. First topic created: `Telegram Agents`, message_thread_id `63`, scope `-1003831813458:63`. Legacy global runs/events were migrated into main scope `-1003831813458:main` so old history remains visible in the general chat.","confidence":0.97,"sourceRefs":["/home/admin/workspace/telegram-agent-chat/src/bot.mjs","/home/admin/workspace/telegram-agent-chat/src/state-store.mjs","/home/admin/workspace/telegram-agent-chat/data/state.json","/home/admin/workspace/telegram-agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/telegram-agent-chat.md","telegram:createForumTopic:Telegram Agents"],"owner":"codex","active":true,"createdAt":"2026-05-11T22:25:18.221Z","updatedAt":"2026-05-11T22:25:18.221Z","observedAt":"2026-05-11T22:25:18.221Z","expiresAt":null,"supersedes":"a41156b5-680d-41e2-a76f-ff3fbe37b05a","supersededBy":null,"metadata":{}},{"id":"2abb08ed-6bc1-44e0-b07f-970af30e78f7","type":"procedural","key":"telegram-agent-chat.uploads.2026-05-11","value":"Telegram Agent Chat now handles Telegram photo/image uploads. Previously handleUpdate returned early for messages without message.text, so photo-only messages were consumed by long polling but not stored. The bot now accepts message.text or message.caption, extracts photo/document attachments, downloads files through getFile into /home/admin/workspace/telegram-agent-chat/data/uploads/<scope>/, stores per-topic metadata in scope.files, records an owner event with local paths, exposes /files [count], and appends local file paths to agent prompts when an image has a caption/direct command. If an image is sent without text, the bot saves it and replies with the local path; then the owner can ask an agent to evaluate the image in the same topic.","confidence":0.96,"sourceRefs":["/home/admin/workspace/telegram-agent-chat/src/bot.mjs","/home/admin/workspace/telegram-agent-chat/src/state-store.mjs","/home/admin/workspace/telegram-agent-chat/README.md","/home/admin/workspace/docs-designcorp/docs/projects/telegram-agent-chat.md","systemctl:telegram-agent-chat.service"],"owner":"codex","active":true,"createdAt":"2026-05-11T22:45:30.340Z","updatedAt":"2026-05-11T22:45:30.340Z","observedAt":"2026-05-11T22:45:30.340Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"8303fe9f-1e66-4a80-84e3-779ab2d87438","type":"episodic","key":"fh.dawnerz-bridge.initial-domain-deploy.2026-05-15","value":"On 2026-05-15 created and deployed Dawnerz Bridge Freelancehunt contest landing from /home/admin/workspace/FH/projects/dawnerz-bridge to public URL https://dawnerz-bridge.fh.designcorp.eu/. Static runtime path is /opt/designcorp/fh/dawnerz-bridge/prod/current -> releases/20260515T074425Z. Nginx source config is /home/admin/workspace/FH/deploy/nginx/dawnerz-bridge.fh.designcorp.eu and installed as /etc/nginx/sites-available/dawnerz-bridge.fh.designcorp.eu with enabled symlink. Certbot issued HTTPS certificate expiring 2026-08-13 and configured HTTP->HTTPS redirect. Smoke passed: nginx -t, HTTP 301, HTTPS 200 for page, hero image 200, live Playwright desktop/mobile no horizontal overflow and CTA visible.","confidence":0.95,"sourceRefs":["/home/admin/workspace/FH/projects/dawnerz-bridge","/home/admin/workspace/FH/deploy/nginx/dawnerz-bridge.fh.designcorp.eu","https://dawnerz-bridge.fh.designcorp.eu/","/home/admin/workspace/FH/projects/dawnerz-bridge/UI_QA.md"],"owner":"designcorp","active":true,"createdAt":"2026-05-15T07:49:31.858Z","updatedAt":"2026-05-15T07:49:31.858Z","observedAt":"2026-05-15T07:49:31.858Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"eb82f48b-a453-4296-95b2-ac671f97769f","type":"procedural","key":"AmazonCookBook.amazon-ads-operating-standard-2026-05-15","value":"AmazonCookBook Amazon Ads operating standard: keep site/backend integration as normal Amazon Ads API -> server -> snapshots/UI, not MCP-first. MCP may be added later as read-only/approved-write agent layer. For KDP ads, evaluate Ads API together with KDP Reports, BSR and organic movement; do not judge by Ads attributed sales alone. Preserve controlled baseline campaigns for books that depend on ad-driven ranking, but cap budgets and pause/reduce targets with no purchases or KDP lift. Canonical docs: docs/amazon-ads-playbook.md, docs/amazon-ads-metrics.md, docs/amazon-ads-api-runbook.md, docs/high-protein-high-fiber-ads-log.md.","confidence":0.96,"sourceRefs":["/home/admin/workspace/AmazonCookBook/docs/amazon-ads-playbook.md","/home/admin/workspace/AmazonCookBook/docs/amazon-ads-metrics.md","/home/admin/workspace/AmazonCookBook/docs/amazon-ads-api-runbook.md","/home/admin/workspace/AmazonCookBook/docs/high-protein-high-fiber-ads-log.md"],"owner":"codex","active":true,"createdAt":"2026-05-15T18:15:34.297Z","updatedAt":"2026-05-15T18:15:34.297Z","observedAt":"2026-05-15T18:15:34.297Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"285c1a96-6ff4-4353-85f1-902d12b3e553","type":"episodic","key":"AmazonCookBook.amazon-ads-api-live-and-playbook-docs-2026-05-15","value":"On 2026-05-15 AmazonCookBook Amazon Ads API became live and was used for HPHF optimization. Campaign/search-term/targeting reports were reviewed for 2026-04-14..2026-05-14; HPHF active budget was set to about 27 USD/day across Paperback Auto 18, Products 4, Exact 3, Kindle Keywords 2; broad/weak Kindle campaigns were paused; exact harvested keywords and a negative were added. Documentation added: general Ads playbook, metrics/formulas, API runbook, and short HPHF ads log. Important API pitfall recorded: update Sponsored Products campaign budgets with budget:{budgetType:'DAILY',budget:n}, not dailyBudget.","confidence":0.96,"sourceRefs":["/home/admin/workspace/AmazonCookBook/docs/high-protein-high-fiber-ads-log.md","/home/admin/workspace/AmazonCookBook/docs/amazon-ads-api-runbook.md","/home/admin/workspace/AmazonCookBook/docs/high-protein-high-fiber-amazon-ads-optimization-2026-05-09.md","/home/admin/workspace/AmazonCookBook/content/amazon-ads-snapshots.json"],"owner":"codex","active":true,"createdAt":"2026-05-15T18:15:34.344Z","updatedAt":"2026-05-15T18:15:34.344Z","observedAt":"2026-05-15T18:15:34.344Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"90bab871-1ebb-46a7-bb25-f3d378478130","type":"procedural","key":"AmazonCookBook.amazon-ads-daily-sync-and-kdp-snapshot-layer-2026-05-15","value":"AmazonCookBook now has a rolling Amazon Ads API reports sync and a manual KDP Reports snapshot layer. Use `pnpm sync:amazon-ads-daily` for a default rolling 30-day Amazon Ads report window ending yesterday UTC; use `--project`, `--variant`, `--window-days`, `--end-date`, `--dry-run`, `--timeout-ms=600000`, `--poll-interval-ms=5000` as needed. Use `pnpm kdp-reports:upsert -- --project=<slug> --date-range-label=... --estimated-royalties=... --processed-orders=... --kenp-read=... --source=...` for manual KDP Reports baselines. KDP snapshots are stored in `content/kdp-reports-snapshots.json`. The Ads performance UI shows KDP context but calculates Spend / royalties only when the KDP and Ads date ranges match exactly; otherwise it shows `—` to avoid false TACOS/profit claims.","confidence":0.92,"sourceRefs":["/home/admin/workspace/AmazonCookBook/scripts/sync-amazon-ads-daily.ts","/home/admin/workspace/AmazonCookBook/scripts/sync-amazon-ads-reports.ts","/home/admin/workspace/AmazonCookBook/scripts/upsert-kdp-reports-snapshot.ts","/home/admin/workspace/AmazonCookBook/lib/kdp-reports-snapshots.ts","/home/admin/workspace/AmazonCookBook/lib/amazon-ads-view-model.ts","/home/admin/workspace/AmazonCookBook/docs/kdp-reports-integration.md","/home/admin/workspace/AmazonCookBook/docs/amazon-ads-api-runbook.md"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-05-15T19:03:43.068Z","updatedAt":"2026-05-15T19:03:43.068Z","observedAt":"2026-05-15T19:03:43.068Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"6dd937d3-7619-40df-a79e-316bd729c6c2","type":"procedural","key":"AmazonCookBook.amazon-ads-operating-flow-2026-05-15","value":"AmazonCookBook Amazon Ads/KDP operating flow: production uses `AMAZONCOOKBOOK_REPORTS_ROOT=/opt/designcorp/amazoncookbook/prod/shared/reports` so Ads/KDP snapshots and the ads change log survive deploys. The daily timer `amazoncookbook-amazon-ads-daily-sync.timer` runs around 05:30 UTC with randomized delay and triggers `pnpm sync:amazon-ads-daily -- --window-days=30 --timeout-ms=600000 --poll-interval-ms=5000`. Amazon Ads secrets are in `/opt/designcorp/amazoncookbook/prod/shared/amazon-ads.env`, separate from `ui.env`. The Ads performance page reads `amazon-ads-snapshots.json`, `kdp-reports-snapshots.json`, and `amazon-ads-change-log.json` from the reports root. KDP data can be entered from the Ads performance page via the KDP Reports snapshot form, which POSTs to `/api/books/[slug]/variants/[variantSlug]/amazon-ads/kdp-snapshot/` and immediately refreshes the view model. Ads write operations are still disabled in the website; this flow is read/reporting plus manual KDP snapshot write only.","confidence":0.93,"sourceRefs":["/home/admin/workspace/AmazonCookBook/ops/systemd/amazoncookbook-amazon-ads-daily-sync.timer","/home/admin/workspace/AmazonCookBook/ops/systemd/amazoncookbook-amazon-ads-daily-sync.service","/home/admin/workspace/AmazonCookBook/lib/report-snapshot-storage.ts","/home/admin/workspace/AmazonCookBook/lib/amazon-ads-change-log.ts","/home/admin/workspace/AmazonCookBook/app/api/books/[slug]/variants/[variantSlug]/amazon-ads/kdp-snapshot/route.ts","/home/admin/workspace/AmazonCookBook/docs/amazon-ads-api-runbook.md","/home/admin/workspace/AmazonCookBook/docs/kdp-reports-integration.md"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-05-15T19:43:50.595Z","updatedAt":"2026-05-15T19:43:50.595Z","observedAt":"2026-05-15T19:43:50.595Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"473d125b-1bce-4ce5-a36f-e9e577cf6ca0","type":"procedural","key":"AmazonCookBook.amazon-ads-analytics-v1-complete-2026-05-15","value":"AmazonCookBook Amazon Ads analytics v1 is complete. V1 sync now reads Sponsored Products campaign (`spCampaigns`), search terms (`spSearchTerm`), and targeting (`spTargeting`) reports through Amazon Ads Reporting v3 and stores campaign metrics plus top search terms/targets in `amazon-ads-snapshots.json`. The Ads performance page is tabbed into Overview, Diagnostics, History, and Data to prevent information overload. Diagnostics shows top search terms and targets, with campaign table kept in the Diagnostics tab. V2 is intentionally deferred and documented in `docs/amazon-ads-v2-roadmap.md`: 24/48/72 reviews, decision layer, KDP file import, Ads write-mode with approvals/audit, and MCP operator tools. Production deploy for commit `84b57c3` succeeded and production daily sync was manually run afterward; HPHF paperback view model showed 18 search terms and 18 targets from shared reports.","confidence":0.94,"sourceRefs":["/home/admin/workspace/AmazonCookBook/lib/amazon-ads-api.ts","/home/admin/workspace/AmazonCookBook/scripts/sync-amazon-ads-reports.ts","/home/admin/workspace/AmazonCookBook/lib/amazon-ads-snapshots.ts","/home/admin/workspace/AmazonCookBook/lib/amazon-ads-view-model.ts","/home/admin/workspace/AmazonCookBook/components/workspace/VariantAdsPerformanceWorkspaceClient.tsx","/home/admin/workspace/AmazonCookBook/docs/amazon-ads-api-runbook.md","/home/admin/workspace/AmazonCookBook/docs/amazon-ads-v2-roadmap.md"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-05-15T20:33:14.140Z","updatedAt":"2026-05-15T20:33:14.140Z","observedAt":"2026-05-15T20:33:14.140Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"1831d31b-9086-42b2-aa4b-af9392a93de2","type":"procedural","key":"AmazonCookBook.amazon-ads-sales-engine-v1-2026-05-17","value":"AmazonCookBook Amazon Ads Sales Engine V1: use a role-based campaign system for KDP books instead of one broad campaign. Keep Auto as discovery/ranking fuel, raise only close-match/substitutes enough to maintain delivery, move winning search terms into Exact, keep Product Targeting as a small controlled ASIN test with non-winners at low bids, and keep Kindle as a tiny baseline until KDP royalty/KENP proves economics. Delivery floor rule: if a selling book has too few impressions/clicks after 24-48h, fix bids/delivery on proven layers before judging sales; if spend rises without orders after fresh 12-15 clicks, inspect listing/price/cover before raising bids again. On 2026-05-17 HPHF was corrected from under-delivery: Auto $22/day, Exact $6/day, Products $3/day, Kindle $2/day; auto close $0.62, substitutes $0.38, loose $0.14, complements $0.10; 10 paperback exact bids raised to $0.45-$0.60; Products cleaned from 190 enabled targets to two higher-bid keepers and all others $0.15.","confidence":0.94,"sourceRefs":["/home/admin/workspace/AmazonCookBook/docs/amazon-ads-playbook.md","/home/admin/workspace/AmazonCookBook/docs/high-protein-high-fiber-ads-log.md","/home/admin/workspace/AmazonCookBook/docs/high-protein-high-fiber-amazon-ads-optimization-2026-05-09.md","/home/admin/workspace/AmazonCookBook/content/amazon-ads-change-log.json"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-05-17T12:20:01.949Z","updatedAt":"2026-05-17T12:20:01.949Z","observedAt":"2026-05-17T12:20:01.949Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"573e3e95-1635-4aed-84cf-285e17e7ee68","type":"procedural","key":"AmazonCookBook.amazon-ads-intelligence-report-v1-2026-05-17","value":"AmazonCookBook Ads Intelligence Report V1 is live in main commit 483b6f1. The /ads/performance page now opens on a new report tab backed by lib/amazon-ads-report-view-model.ts, with Executive Summary, Campaign Health, Winners, Wasted Spend, Negative Candidates, KDP context, and Action Plan. JSX renders model.report and does not calculate advertising economics directly. V1 formulas and thresholds are documented in docs/amazon-ads-intelligence-report.md. Remaining roadmap: PDF/export (#86) and organic rank/Cerebro import (#87).","confidence":0.95,"sourceRefs":["git:483b6f1","/home/admin/workspace/AmazonCookBook/lib/amazon-ads-report-view-model.ts","/home/admin/workspace/AmazonCookBook/components/workspace/VariantAdsPerformanceWorkspaceClient.tsx","/home/admin/workspace/AmazonCookBook/docs/amazon-ads-intelligence-report.md","https://github.com/DesignCorporation/AmazonCookBook/issues/80"],"owner":"AmazonCookBook","active":true,"createdAt":"2026-05-17T13:09:13.229Z","updatedAt":"2026-05-17T13:09:13.229Z","observedAt":"2026-05-17T13:09:13.229Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"681f8d1b-fdbf-4b38-9aa7-630af2091831","type":"procedural","key":"telegram-agent-chat.image-runtime-fix.2026-05-17","value":"Fixed Telegram Agent Chat image handoff to Codex on 2026-05-17. Root cause: uploads were saved correctly in data/uploads and scope.files, but Codex turns only received image paths as text; codex exec supports `--image <FILE>`. First patch added imagePaths but failed because `--image <FILE>...` is variadic and consumed the prompt. Final fix inserts `--` before positional prompt/session args in src/codex-runtime.mjs and passes selected current/recent topic image paths from src/bot.mjs. `selectPromptImagePaths()` attaches current upload images, or latest topic images when prompt mentions image/review words such as оцени/посмотри/скрин/изображение/выше. Verified with `corepack pnpm run check`, normal runtime smoke, image runtime smoke using saved Telegram JPG, docs build, km:index, rebuild_index, and restarted telegram-agent-chat.service.","confidence":0.97,"sourceRefs":["/home/admin/workspace/telegram-agent-chat/src/codex-runtime.mjs","/home/admin/workspace/telegram-agent-chat/src/bot.mjs","/home/admin/workspace/telegram-agent-chat/data/uploads/-1003831813458_68/89-file-mp1sri9h-1ctkgb.jpg","/home/admin/workspace/docs-designcorp/docs/projects/telegram-agent-chat.md","systemctl:telegram-agent-chat.service"],"owner":"codex","active":true,"createdAt":"2026-05-17T18:51:27.597Z","updatedAt":"2026-05-17T18:51:27.597Z","observedAt":"2026-05-17T18:51:27.597Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"97e7829e-d779-4a9a-a9da-68894e92b3a3","type":"episodic","key":"dawnerz-bridge-wix-deploy-2026-05-18","value":"Deployed alternate Dawnerz Bridge Wix/static version from /home/admin/workspace/FH/projects/dawnerz-bridge/tmp/Dawnerz-Bridge-Wix-Design.zip. Workspace extract: /home/admin/workspace/FH/projects/dawnerz-bridge-wix. Runtime root: /opt/designcorp/fh/dawnerz-bridge-wix/prod/current -> releases/20260518-wix. Public URL: https://dawnerz-bridge-wix.fh.designcorp.eu/. Nginx site: /etc/nginx/sites-available/dawnerz-bridge-wix.fh.designcorp.eu. Certbot issued HTTPS cert expiring 2026-08-16; renewal scheduled by certbot.","confidence":0.94,"sourceRefs":["/home/admin/workspace/FH/projects/dawnerz-bridge-wix/infra-nginx.conf","/etc/nginx/sites-available/dawnerz-bridge-wix.fh.designcorp.eu","/opt/designcorp/fh/dawnerz-bridge-wix/prod/current","https://dawnerz-bridge-wix.fh.designcorp.eu/"],"owner":"codex","active":true,"createdAt":"2026-05-18T10:04:52.768Z","updatedAt":"2026-05-18T10:04:52.768Z","observedAt":"2026-05-18T10:04:52.768Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"8fc8d71d-2d7f-40ff-8280-3733128b3f8d","type":"episodic","key":"serveradmin-archived-moved-site-monitors-2026-05-22","value":"On 2026-05-22 the owner confirmed that the current serveradmin site-down alerts were expected because several monitored sites had been moved or disabled. Archived the five affected active site monitors, cleared their site_alerts counters to fails=0/down=false/alert_skipped=true, and restarted serveradmin-agent.service. Verification after one agent cycle: active site problem_rows=0 and /api/sites showed 36 active sites with none of the archived monitors still active.","confidence":0.95,"sourceRefs":["/home/admin/logs/serveradmin/sites.json","/home/admin/logs/serveradmin/state.json","/home/admin/logs/serveradmin/operator_audit.jsonl","/home/admin/logs/serveradmin/events.jsonl"],"owner":"system","active":true,"createdAt":"2026-05-22T13:21:04.118Z","updatedAt":"2026-05-22T13:21:04.118Z","observedAt":"2026-05-22T13:21:04.118Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d978d884-97da-4be5-894c-84c875960893","type":"procedural","key":"movie-production-runtime-and-sb01-pass","value":"Movie OS production runtime is DB-first: use MOVIE_DATA_SOURCE=db and MOVIE_RUNTIME_REQUIRE_DB=true for dev/prod, verify with pnpm runtime:check and /api/health/runtime. SB-01 is prepared for production: seed creates 8 PROMPTED shots with durationSec, active PromptVersion v1, keyframe brief, motion brief, acceptance criteria, and /docs/sb-01-production-pack as the operator doc. Paid Runway/Fal/API generations are not launched without explicit credit approval.","confidence":0.9,"sourceRefs":["/home/admin/workspace/movie/docs/sb-01-production-pack.md","/home/admin/workspace/movie/scripts/check-movie-runtime-env.mjs","https://github.com/DesignCorporation/movie/issues/46#issuecomment-4537537242"],"owner":"codex","active":true,"createdAt":"2026-05-25T22:01:47.908Z","updatedAt":"2026-05-25T22:01:47.908Z","observedAt":"2026-05-25T22:01:47.908Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"146c93c7-f450-473a-abbe-2c7d5db93c1d","type":"procedural","key":"dc-swarm.critic-contract.v1","value":"dc-swarm structured review now supports a Critic Contract. Review outputs may include exact headers BLOCKERS, REQUIRED FIXES, ACCEPTANCE CHECKS, EVIDENCE in addition to VERDICT/SUMMARY/FINDINGS. Gateway parses these into reviewContract, stores it in review artifact metadata, review task metadata, source reviewState metadata, and revision task metadata/goal/acceptanceCriteria. Owner console renders the contract in Russian labels. Gateway emits owner-visible trace event review.contract.recorded with counts. Old VERDICT/SUMMARY/FINDINGS outputs remain compatible through an empty contract.","confidence":0.92,"sourceRefs":["/home/admin/workspace/dc-swarm/apps/gateway/src/server.ts","/home/admin/workspace/dc-swarm/apps/web/src/server.ts","/home/admin/workspace/dc-swarm/packages/shared/src/review.ts","/home/admin/workspace/dc-swarm/tasks/TASK-050-council-trace-and-critic-contract.md","git:DesignCorporation/dc-swarm@1ac0148"],"owner":"dc-swarm","active":true,"createdAt":"2026-05-29T11:25:46.449Z","updatedAt":"2026-05-29T11:25:46.449Z","observedAt":"2026-05-29T11:25:46.449Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"9a78d816-a7d2-4ecd-b451-36d49b5ed47b","type":"procedural","key":"dc-swarm.council-verdict-gate.v1","value":"dc-swarm Council Verdict Gate: structured review now stores reviewState.metadata.councilVerdictGate. Non-pass structured review verdict opens the gate with critic/verifier contract and evidence artifact ids. A later pass verdict closes the previous open gate, preserves the original reviewContract, and merges closure evidence artifact ids. Gateway POST /tasks/:id blocks status=completed with BROKER_POLICY_ERROR when the task itself has an open/non-pass review gate or when its dependency graph is blocked by a review verdict; explicit overrideDependencies still records a bypass reason. Owner console renders Council gate state near the Critic Contract and owner focus prioritizes open gates. Verified in commit 083f16e with shared/task-graph/web/gateway tests, pnpm build, stack smoke, template smoke, and a live API check returning 409 for both source and downstream tasks while the gate is open.","confidence":0.96,"sourceRefs":["dc-swarm@083f16e","packages/shared/src/review.ts","apps/gateway/src/server.ts","apps/web/src/server.ts","tasks/TASK-051-council-verdict-gate.md"],"owner":"codex","active":true,"createdAt":"2026-05-29T11:44:04.164Z","updatedAt":"2026-05-29T11:44:04.164Z","observedAt":"2026-05-29T11:44:04.164Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"d1aa724e-01b6-494a-84c5-797f5ab7f3e2","type":"procedural","key":"dc-swarm.agent-council-lab.v1","value":"dc-swarm now has a default built-in launch recipe `agent-council-lab` for Agent Council Lab. It is Codex-only, scheduler-enabled, review-gated, and seeds council phases for understanding, architecture options, adversarial critique, controlled build, verifier verdict, and meta-retrospective. Validator now requires council phases to map to seeded tasks via metadata.councilPhaseId and requires at least one phase to emit the final verdict artifact kind. Smoke support verifies expected starter artifacts per template, including the Lab. Verification before push: shared tests 16 pass, gateway tests 57 pass, web tests 42 pass, task-graph tests 9 pass, pnpm build pass, git diff --check pass, stack smoke pass, default template smoke pass, Agent Council Lab template smoke pass on preview ports 3065/3066.","confidence":0.92,"sourceRefs":["dc-swarm commit 73e2947","/home/admin/workspace/dc-swarm/packages/shared/src/templates.ts","/home/admin/workspace/dc-swarm/docs/launch-templates.md","/home/admin/workspace/dc-swarm/tasks/TASK-052-agent-council-lab.md"],"owner":"dc-swarm","active":true,"createdAt":"2026-05-29T12:21:52.937Z","updatedAt":"2026-05-29T12:21:52.937Z","observedAt":"2026-05-29T12:21:52.937Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"c7fe9edf-6dfd-485a-a5ea-ebcb43bb5990","type":"episodic","key":"dc-swarm.agent-council-lab-live-test.2026-05-29","value":"Agent Council Lab was tested against a dc-swarm self-improvement task. The council did not simply rubber-stamp outputs: architect was first marked needs_changes by critic for declarative evidence loop; builder was marked needs_changes and later blocked because claims were overstated and nested Codex sandbox could not run socket/IPC-dependent checks. Parent agent verified the sandbox patch externally: shared tests 16 pass, gateway tests 57 pass, git diff --check pass, pnpm build pass, live Agent Council Lab template smoke pass with 4 starter artifacts. Implemented and pushed commit 03b22c4 adding `council-disagreement-ledger-contract`, requiring builder/verifier artifacts to preserve `disagreementLedger`, evidence refs, materially changed decisions, and `no_real_dispute` handling. Remaining next slice: runtime enforcement in Council Verdict Gate so verifier pass cannot rely only on prompt/template contract.","confidence":0.93,"sourceRefs":["dc-swarm commit 03b22c4","/home/admin/workspace/dc-swarm/tasks/TASK-053-agent-council-disagreement-ledger.md","/home/admin/workspace/dc-swarm/packages/shared/src/templates.ts","live test session 46818839-3baf-48ee-a1a6-15f2cabad8bd on local preview 3075/3076"],"owner":"dc-swarm","active":true,"createdAt":"2026-05-29T13:08:37.938Z","updatedAt":"2026-05-29T13:08:37.938Z","observedAt":"2026-05-29T13:08:37.938Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"b3ba0bfb-bbf4-463f-b41d-4801052828dc","type":"procedural","key":"uidesigncorp_localization_policy","value":{"policy":"UIDesignCorp operator-facing docs app UI and CLI messages are Russian-first. Keep package names, CLI commands, import paths, component ids, prop names, theme keys, and other developer API identifiers in English for compatibility.","status":"active","date":"2026-06-22"},"confidence":0.95,"sourceRefs":["/home/admin/workspace/UIDesignCorp/PRODUCT.md","/home/admin/workspace/UIDesignCorp/README.md","/home/admin/workspace/UIDesignCorp/DESIGN.md"],"owner":"UIDesignCorp","active":true,"createdAt":"2026-06-22T15:33:10.103Z","updatedAt":"2026-06-22T15:33:10.103Z","observedAt":"2026-06-22T15:33:10.103Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"f27af5fa-adde-4710-9fa7-e1e818f92fa2","type":"procedural","key":"gmg-wordpress-elementor-parity-workflow","value":{"summary":"For GMG WordPress migration, use https://gmg.landing.designcorp.eu/ as approved 1:1 static reference. Edit theme source in /home/admin/workspace/gmg/deploy/wordpress/themes/gmg-starter and deploy with deploy/wordpress/apply-theme.sh to /opt/designcorp/gmg/wp2/themes/gmg-starter. Elementor pages must be editable sections/widgets, not pasted static HTML. Put repeat parity fixes in assets/css/wp-parity-overrides.css first. Hex icons use a green hex background, so the glyph color must remain light via --hex-icon-color; do not set .hex-icon.elementor-widget color to GMG green or icons disappear. Elementor text-editor often has no .elementor-widget-container, so spacing rules must also target .elementor-widget-text-editor and neighboring widget wrappers. Verify desktop 1440 and mobile 390 for compact badges, badge-to-heading spacing, heading-to-copy spacing, icon-left layout, and card button spacing."},"confidence":0.94,"sourceRefs":["docs/runbooks/gmg-site-operations.md","/home/admin/workspace/gmg/deploy/wordpress/themes/gmg-starter/assets/css/wp-parity-overrides.css","/home/admin/workspace/gmg/deploy/wordpress/themes/gmg-starter/assets/css/pages/about-gmg.css"],"owner":"designcorp","active":true,"createdAt":"2026-06-22T20:39:24.487Z","updatedAt":"2026-06-22T20:39:24.487Z","observedAt":"2026-06-22T20:39:24.487Z","expiresAt":null,"supersedes":"3478fab7-f4e5-4bea-bdf6-5a4416a7ac08","supersededBy":null,"metadata":{}},{"id":"36a48b7c-e712-4394-ad57-e1c505626d40","type":"procedural","key":"gmg","value":"GMG current working layout: approved static reference site is /home/admin/gmg2/www and is served through /var/www/gmg symlink. Clean WordPress/Elementor runtime is /home/admin/gmg2/wp, with compose/env in /home/admin/gmg2/wp, WordPress files in /home/admin/gmg2/wp/html, DB files in /home/admin/gmg2/wp/db, active theme hello-elementor, active plugin elementor, local bind 127.0.0.1:3222 behind https://wp.gmg.landing.designcorp.eu/. The old /opt/designcorp/gmg/wp2 runtime and gmg-wp2 Docker volumes were removed; do not use /opt for GMG WordPress. Admin credentials are in /home/admin/gmg2/wp/.env and must not be printed in chat.","confidence":0.98,"sourceRefs":["/home/admin/gmg/docs/runbook.md","/home/admin/gmg/README.md","/home/admin/gmg2/wp/docker-compose.yml"],"owner":"codex","active":true,"createdAt":"2026-06-23T12:38:04.584Z","updatedAt":"2026-06-23T12:38:04.584Z","observedAt":"2026-06-23T12:38:04.584Z","expiresAt":null,"supersedes":"7980358e-c893-4c97-8aba-8a9ead05f543","supersededBy":null,"metadata":{}},{"id":"5929d9b0-bda9-4bfd-a708-e02c4b0fde61","type":"procedural","key":"gmg.wp2.monitoring-disabled.2026-06-26","value":"GMG wp2 is no longer used. On 2026-06-26 serveradmin archived site monitor wp2.gmg.landing.designcorp.eu and cleared its site_alerts counter; keep the current GMG WordPress runtime on wp.gmg.landing.designcorp.eu (/home/admin/gmg2/wp, 127.0.0.1:3222) and do not treat wp2.gmg.landing.designcorp.eu site-down alerts as a production outage unless the owner explicitly reactivates wp2.","confidence":0.96,"sourceRefs":["/home/admin/logs/serveradmin/sites.json","/home/admin/logs/serveradmin/state.json","/home/admin/logs/serveradmin/operator_audit.jsonl","/home/admin/gmg/docs/runbook.md","/home/admin/gmg2/wp/docker-compose.yml"],"owner":"serveradmin","active":true,"createdAt":"2026-06-26T09:17:07.091Z","updatedAt":"2026-06-26T09:17:07.091Z","observedAt":"2026-06-26T09:17:07.091Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"cfed1fbf-f8cf-4867-b88d-feefa1b955f2","type":"episodic","key":"serveradmin.low-memory-hub-dev-restart.2026-06-26","value":"On 2026-06-26 serveradmin emitted P0 low memory alerts when MemAvailable fell to ~1.5-2.1 GiB. Top RSS was hub-dev next-server (~5.5 GiB), code-server (~4.5 GiB), LibraryBookDesignCorp dev (~3.0 GiB), BookDesignCorp dev (~2.8 GiB), and movie-dev (~1.9 GiB). Minimal remediation restarted hub-dev.service only; dev.hub.designcorp.eu returned 307 via local nginx and MemAvailable rose to ~7.0 GiB. Remaining follow-up: dc-swarm preview has an orphan/manual node scripts/start-preview.mjs consuming ~107% CPU while dc-swarm-preview.service is inactive; move it back under systemd control before treating the incident fully clean.","confidence":0.93,"sourceRefs":["/home/admin/logs/serveradmin/events.jsonl","systemctl:hub-dev.service","systemctl:dc-swarm-preview.service","/home/admin/logs/serveradmin/audit.jsonl"],"owner":"serveradmin","active":true,"createdAt":"2026-06-26T09:18:18.654Z","updatedAt":"2026-06-26T09:18:18.654Z","observedAt":"2026-06-26T09:18:18.654Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"ca855dc4-fbe2-4bf0-ba33-7720235ce7d1","type":"episodic","key":"serveradmin.low-memory-bookdesigncorp-dev-limit.2026-06-27","value":"On 2026-06-27 serveradmin emitted P0 low memory alerts when MemAvailable fell to ~1.9-2.1 GiB. Top RSS was LibraryBookDesignCorp dev next-server pid 3965495 at ~8.0 GiB under bookdesigncorp-dev.service. Remediation: restarted bookdesigncorp-dev.service, verified dev.library.book.designcorp.eu and library.book.designcorp.eu return 307 to login via local nginx, MemAvailable rose to ~9.9 GiB, and applied systemd cgroup guard with MemoryHigh=3584M and MemoryMax=4096M via systemctl set-property. book-designcorp-dev.service already had MemoryMax=4096M; the problematic LibraryBookDesignCorp dev unit previously had no memory limit.","confidence":0.95,"sourceRefs":["/home/admin/logs/serveradmin/events.jsonl","/home/admin/logs/serveradmin/operator_audit.jsonl","systemctl:bookdesigncorp-dev.service","/etc/systemd/system/bookdesigncorp-dev.service","systemctl:book-designcorp-dev.service"],"owner":"serveradmin","active":true,"createdAt":"2026-06-27T11:18:36.398Z","updatedAt":"2026-06-27T11:18:36.398Z","observedAt":"2026-06-27T11:18:36.398Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"8070f9aa-f366-4ced-b0a9-cab7e9806258","type":"procedural","key":"librarybookdesigncorp.template-style-skill.v1","value":{"repo":"/home/admin/workspace/LibraryBookDesignCorp","skill":"skill-librarybookdesigncorp-templates","skill_path":"/home/admin/workspace/skills/skill-librarybookdesigncorp-templates","symlink":"/home/admin/.codex/skills/skill-librarybookdesigncorp-templates","style_contract":"Shared template slot CSS variables live in lib/template-layout-css.ts and should be reused by TemplateLayoutEditor, TemplateDetail, TemplatePagePreview, and InteriorTemplateLibrary so editor/catalog/detail/interior render the same slot settings.","checks":["corepack pnpm typecheck","git diff --check","corepack pnpm check:interior-assembler","corepack pnpm check:interior-preflight -- --project=high-protein-high-fiber --variant=paperback-en-us-8-5x11-second-edition"],"scope_defaults":"For active books default edits to this book; master template edits are explicit and admin-only."},"confidence":0.92,"sourceRefs":["/home/admin/workspace/skills/skill-librarybookdesigncorp-templates/SKILL.md","/home/admin/workspace/skills/skill-librarybookdesigncorp-templates/references/template-style-map.md","/home/admin/workspace/LibraryBookDesignCorp/lib/template-layout-css.ts"],"owner":"LibraryBookDesignCorp","active":true,"createdAt":"2026-07-05T09:25:15.505Z","updatedAt":"2026-07-05T09:25:15.505Z","observedAt":"2026-07-05T09:25:15.505Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"966bfaeb-609a-4063-a379-b38e391762d6","type":"episodic","key":"serveradmin.retired-gmg2-gmg3-monitors.2026-07-05","value":"On 2026-07-05, owner confirmed gmg2.landing.designcorp.eu and gmg3.landing.designcorp.eu are no longer needed and were intentionally disabled. Archived both monitors through local serveradmin DELETE /api/sites/:id and cleared state.json site_alerts for both domains with alert_skipped=true. Verification: absent from active /api/sites, present as archived in /api/sites?include_archived=true, absent from /api/health, and no new events after archive time. Do not treat future 403/404 from these retired preview domains as live outages unless owner reactivates them.","confidence":0.95,"sourceRefs":["/home/admin/logs/serveradmin/sites.json","/home/admin/logs/serveradmin/state.json","/home/admin/logs/serveradmin/operator_audit.jsonl","/home/admin/logs/serveradmin/events.jsonl"],"owner":"codex","active":true,"createdAt":"2026-07-05T11:28:10.537Z","updatedAt":"2026-07-05T11:28:10.537Z","observedAt":"2026-07-05T11:28:10.537Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7bd12dff-dc53-4963-9749-864defc50b84","type":"procedural","key":"AccountantDesignCorp.data-scope-vnc-auth","value":{"scope":"AccountantDesignCorp accounting data collection and connector setup","dataCoverage":"Collect prior years, 2025 and current-year data so the app has complete historical and current accounting context from the start.","vncAuthWorkflow":"When an external service requires login, Codex may open a new browser tab in VNC and ask the owner to authenticate. After owner login, Codex may use the authenticated browser/API/session to extract needed accounting data or configure safe API access.","boundaries":"This does not authorize filing returns, paying taxes, changing banking/tax/Fakturownia/KSeF settings, submitting to KSeF, deleting/correcting/sending invoices, or other regulated/destructive actions.","secretsPolicy":"Credentials, tokens, raw accounting files and private exports must stay outside git and public docs."},"confidence":0.95,"sourceRefs":["user_directive_2026-07-05_chat","/home/admin/.codex/memories/extensions/ad_hoc/notes/20260705T115914Z-accountant-data-vnc-auth-workflow.md"],"owner":"Agent Accounting","active":true,"createdAt":"2026-07-05T11:59:39.361Z","updatedAt":"2026-07-05T11:59:39.361Z","observedAt":"2026-07-05T11:59:39.361Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"dff64ae5-b02a-448e-a18b-460a5e383e9e","type":"procedural","key":"librarybookdesigncorp.index-template-split.v1","value":{"summary":"Cookbook indexes now use explicit templates instead of one generic index_page: index_meal_type for grouped one-column meal/section indexes and index_ingredient for dense two-column ingredient lookup indexes.","legacy":"index_page remains a fallback only.","active_second_edition":"high-protein-high-fiber second edition manifest maps index-by-meal-type to index_meal_type and index-by-ingredient to index_ingredient.","validation":["corepack pnpm typecheck","corepack pnpm check:interior-assembler","corepack pnpm check:interior-preflight -- --project=high-protein-high-fiber --variant=paperback-en-us-8-5x11-second-edition","Playwright DOM metrics: physical 74/display 65 slotOverflow 0; physical 76/display 67 slotOverflow 0"]},"confidence":0.94,"sourceRefs":["/home/admin/workspace/LibraryBookDesignCorp/lib/interior-template-contract.ts","/home/admin/workspace/LibraryBookDesignCorp/lib/template-layout-defaults.ts","/home/admin/workspace/LibraryBookDesignCorp/content/books/high-protein-high-fiber-second-edition/interior/manifest.json","/home/admin/workspace/skills/skill-librarybookdesigncorp-templates/references/template-style-map.md"],"owner":"LibraryBookDesignCorp","active":true,"createdAt":"2026-07-05T12:24:28.352Z","updatedAt":"2026-07-05T12:24:28.352Z","observedAt":"2026-07-05T12:24:28.352Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"5a227eb8-27a3-4251-8492-1fae852b75bc","type":"procedural","key":"AccountantDesignCorp.fakturownia-importer","value":{"scope":"AccountantDesignCorp Fakturownia GET-only import, historical/current data coverage and VAT reconciliation source-side refresh","priority":"Prepare 2025 annual reporting package by 2026-07-15 while building SaaS-first Polish accounting workspace foundations.","commands":{"singleYear":"corepack pnpm fakturownia:import -- --year 2025","range":"corepack pnpm fakturownia:import -- --from-year 2016 --to-year 2026","allYears":"corepack pnpm fakturownia:import -- --all-years"},"credentialHandling":"Reads credential from private local file outside git; never store credential value in docs, git, DB metadata, logs or chat.","privateCredentialPath":"/home/admin/private/accountant-designcorp/secrets/fakturownia-api-token.txt","writes":"RawObject private JSON snapshot metadata, SourceDocumentRef, Invoice, ImportBatch, VatReturn, AccountingPeriod, AuditEvent and VatReconciliationPeriod.","vatReconciliationModel":"VatReconciliationPeriod stores tenant+period sourceOutputVat/sourceInputVat/sourceNetVat from Fakturownia plus nullable official VAT/JPK, payment, refund and carry-forward fields for later controlled imports. Current-year VAT rows are created only through the current month.","coverageRoute":"https://dev.accountant.designcorp.eu/coverage","policy":"GET-only Fakturownia API usage. Do not call create/update/delete/send/KSeF submission endpoints without explicit owner approval. No filing, tax payment, refund request, KSeF submission or invoice issuing is allowed without separate explicit owner/accountant decision."},"confidence":0.95,"sourceRefs":["/home/admin/workspace/AccountantDesignCorp/scripts/import-fakturownia.mjs","/home/admin/workspace/AccountantDesignCorp/src/app/coverage/page.tsx","/home/admin/workspace/AccountantDesignCorp/docs/app-runbook.md","/home/admin/workspace/AccountantDesignCorp/docs/2025-rescue.md"],"owner":"Agent Accounting","active":true,"createdAt":"2026-07-05T12:33:19.861Z","updatedAt":"2026-07-05T12:33:19.861Z","observedAt":"2026-07-05T12:33:19.861Z","expiresAt":null,"supersedes":"b96adfbb-5844-43d4-ae73-ba68caae0ec3","supersededBy":null,"metadata":{}},{"id":"4e3e6b1b-1898-4f3a-bbc4-c5d83ab949c0","type":"procedural","key":"BookDesignCorp.ready-cookbook-offer.v1","value":{"summary":"BookDesignCorp public /books page sells productized Ready Cookbook packages in USD, separate from custom EUR KDP Launch Pack work. Public page must not reveal concrete cookbook niches, sample titles, or demo books.","routes":["https://book.designcorp.eu/books","https://book.designcorp.eu/ru/books","https://book.designcorp.eu/pl/books","https://book.designcorp.eu/ua/books"],"pricing":{"standard":"from $590; 100-120 recipes; up to 100 pages; standard template","premium":"from $990; stronger positioning/design; Kindle included","series":"from $1,590; three connected cookbooks in one niche","addons":["Kindle add-on from $190 for Standard","Hardcover-ready files from $250","Custom niche research from $350","Upload support from $450"]},"publicPageRules":["Use generic cookbook cover / package framing only","Do not list concrete cookbook niches, sample titles, or demo book names publicly","Move niche directions, demo covers, sample pages, and title directions into private Telegram/email funnel after first brief and fit check"],"leadRouting":{"contactQueue":"ready-cookbook","contactFirstAction":"catalog-fit-check","telegramQueue":"ready-cookbook","telegramFirstAction":"private-demo-fit-check"},"telegramFunnel":{"webhookRoute":"/api/telegram/webhook","env":["TELEGRAM_BOT_TOKEN","TELEGRAM_WEBHOOK_SECRET","TELEGRAM_WEBHOOK_URL","TELEGRAM_LEAD_DIR"],"security":"Webhook requires x-telegram-bot-api-secret-token; tokens are env-only and never committed","storage":"Telegram JSONL goes to TELEGRAM_LEAD_DIR, falling back to CONTACT_LEAD_DIR","setup":"BotFather/token setup uses VNC owner login/approval flow"},"boundaries":["No guaranteed Amazon sales, ranks, reviews, or bestseller status","Client keeps KDP/publisher account unless a separate publishing agreement is approved","AI-generated text/images/translations require KDP disclosure workflow","Health, nutrition, medical, legal, or financial claims require additional review before production"]},"confidence":0.96,"sourceRefs":["/home/admin/workspace/BookDesignCorp/src/lib/content.ts","/home/admin/workspace/BookDesignCorp/src/lib/telegram-funnel.ts","/home/admin/workspace/BookDesignCorp/src/app/api/telegram/webhook/route.ts","/home/admin/workspace/docs-designcorp/docs/projects/book.md","/home/admin/workspace/docs-designcorp/docs/projects/book-client-services-launch-pack.md"],"owner":"Agent Book","active":true,"createdAt":"2026-07-05T15:26:05.590Z","updatedAt":"2026-07-05T15:26:05.590Z","observedAt":"2026-07-05T15:26:05.590Z","expiresAt":null,"supersedes":"79ae2b9b-120e-4ca1-9c69-2ebe5469ee66","supersededBy":null,"metadata":{}},{"id":"431944a1-ff06-4876-a027-fa6f7eaf18c8","type":"episodic","key":"serveradmin.p0-memory-followup-swap-blocked-book-dev-on-demand.2026-07-05","value":"On 2026-07-05 after host low-memory/high-load cleanup, owner approved creating 16GiB swap and disabling Book dev services. Swap apply was blocked because `sudo -n fallocate -l 16G /swapfile` required a password; no /swapfile was created, swap stayed disabled, and no /etc/fstab /swapfile line was added. `bookdesigncorp-dev.service` and `book-designcorp-dev.service` were successfully `sudo -n systemctl disable --now` and are now inactive/disabled. Prod `book.designcorp.eu` returned 200, prod `library.book.designcorp.eu` redirected to login then returned 200, and dev `dev.book.designcorp.eu` plus `dev.library.book.designcorp.eu` returned expected 502 while ports 3221/3213 were closed. AmazonCookBook DB bind remediation was not applied; read-only inspect shows `amazoncookbook-postgres-dev` still exposes 5434 on 0.0.0.0/[::], image postgres:16-alpine, restart unless-stopped, network amazoncookbook_default, volume amazoncookbook_amazoncookbook_postgres_data, and compose labels point to missing `/home/admin/workspace/AmazonCookBook/docker-compose.db.yml`.","confidence":0.96,"sourceRefs":["/etc/systemd/system/bookdesigncorp-dev.service","/etc/systemd/system/book-designcorp-dev.service","/etc/fstab","/proc/swaps","docker inspect amazoncookbook-postgres-dev","curl https://book.designcorp.eu/","curl https://library.book.designcorp.eu/login/"],"owner":"codex","active":true,"createdAt":"2026-07-05T23:50:27.413Z","updatedAt":"2026-07-05T23:50:27.413Z","observedAt":"2026-07-05T23:50:27.413Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"7bdb26b6-ef06-47d8-8e97-2db4a7a2c652","type":"procedural","key":"librarybookdesigncorp.template-instance-resolution.v1","value":{"summary":"Cookbook templates use master-as-source and book/workspace instance copies. Master templates live in content/templates/template-layouts.json and are admin-edited. Book/template instances live in content/templates/workspaces/<slug>/template-layouts.json and override master as a whole template: pageStyle, slot geometry, slot styles, hidden/locked state. Existing book instances must not be partially live-linked to master; master changes affect books with no instance and future explicitly copied/synced instances only. Interior/draft/proof rendering resolves master + book.slug instance only, without active UI workspace overlay.","checks":["corepack pnpm check:template-layouts","corepack pnpm typecheck","corepack pnpm check:interior-assembler","corepack pnpm check:interior-preflight -- --project=high-protein-high-fiber --variant=paperback-en-us-8-5x11-second-edition","corepack pnpm build"],"prodVerification":"After deploy e5d4156, current second-edition book resolved section_opener pageStyle #fffdf8 and titleX 13 from its book instance; a synthetic new book without template copy resolved master pageStyle #546355 and titleX 7."},"confidence":0.96,"sourceRefs":["/home/admin/workspace/LibraryBookDesignCorp/lib/template-layouts.ts","/home/admin/workspace/LibraryBookDesignCorp/components/workspace/interior/VariantInteriorStudio.tsx","/home/admin/workspace/LibraryBookDesignCorp/scripts/check-template-layout-resolution.ts","git:e5d4156"],"owner":"LibraryBookDesignCorp","active":true,"createdAt":"2026-07-06T10:39:29.325Z","updatedAt":"2026-07-06T10:39:29.325Z","observedAt":"2026-07-06T10:39:29.325Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"0704d773-6e55-4835-9f55-cb735ee4e17f","type":"procedural","key":"BookDesignCorp.telegram-funnel-bot.v1","value":{"bot":"@BookDesignCorpBot","default_language":"en","supported_languages":["en","ru","uk","it"],"public_site_locales":["en","ru","ua","it"],"removed_public_locales":["pl"],"site_deep_link_contract":"BookDesignCorp site CTAs must prefix Telegram start payloads by page language: en_ for English/default, ru_ for Russian, uk_ for Ukrainian (/ua pages), it_ for Italian (/it pages). Do not add a public /pl route tree unless explicitly reversed by the owner.","menu_contract":"Reply keyboard and Telegram command menu must expose language selection plus Brief/Pricing/Demo/Manager; commands include /language, /brief, /pricing, /demo, /manager, /en, /ru, /uk, /it.","copy_contract":"Use Manager/Менеджер/Менеджер/Manager in user-facing bot UI instead of Human/Человек; keep internal human intent only for backward-compatible routing.","intake_contract":"Public intake language/marketplace options use Italian and Amazon.it, not Polish or Amazon.pl.","runtime_contract":"Run corepack pnpm telegram:commands:set with TELEGRAM_BOT_TOKEN from production env/private env to publish command menu; do not commit token or webhook secret.","lead_storage":"Chat language state is runtime-only in telegram-language-state.json under TELEGRAM_LEAD_DIR or CONTACT_LEAD_DIR."},"confidence":0.95,"sourceRefs":["docs/projects/book.md","docs/projects/book-client-services-launch-pack.md","docs/agents/skills/skill-book-services-sales.md"],"owner":"Architect","active":true,"createdAt":"2026-07-06T10:54:08.136Z","updatedAt":"2026-07-06T10:54:08.136Z","observedAt":"2026-07-06T10:54:08.136Z","expiresAt":null,"supersedes":"3550a4ca-22fe-453f-9788-b866e54ca0eb","supersededBy":null,"metadata":{}},{"id":"8df4742e-81d3-4810-915b-2c5cc00dd704","type":"procedural","key":"AccountantDesignCorp.pko-bank-2025-import","value":{"scope":"PKO bank source intake for AccountantDesignCorp","route":"/annual-2025","command":"corepack pnpm bank:register-statements","behavior":"Registers PKO monthly PDF statements as private RawObject metadata and imports yearly pko-operations-YYYY.csv files into BankTransaction. For the 2025 CSV, 150 transactions cover 2025-01..2025-12.","boundaries":"Raw bank files stay outside git and public docs. The import proves cash movement but does not replace bank fee invoices/accounting evidence and does not reconcile payments to invoices yet. Do not request paid bank statements automatically."},"confidence":0.95,"sourceRefs":["/home/admin/workspace/AccountantDesignCorp/scripts/register-bank-statements.mjs","/home/admin/workspace/AccountantDesignCorp/src/app/annual-2025/page.tsx","/home/admin/workspace/AccountantDesignCorp/docs/app-runbook.md","/home/admin/workspace/AccountantDesignCorp/docs/2025-rescue.md"],"owner":"Agent Accounting","active":true,"createdAt":"2026-07-06T18:32:28.564Z","updatedAt":"2026-07-06T18:32:28.564Z","observedAt":"2026-07-06T18:32:28.564Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"e980578a-b81c-4fec-a95d-440dd2707a69","type":"procedural","key":"AccountantDesignCorp.production-runtime","value":{"domain":"https://accountant.designcorp.eu","service":"accountant-designcorp-prod.service","port":"127.0.0.1:3037","releaseRoot":"/opt/designcorp/accountant-designcorp/prod/current","sharedEnv":"/opt/designcorp/accountant-designcorp/prod/shared/.env.local","nginx":"/etc/nginx/sites-available/accountant.designcorp.eu","tls":"/etc/letsencrypt/live/accountant.designcorp.eu","deployedAt":"2026-07-06T18:45:00Z","checks":["curl https://accountant.designcorp.eu/api/health ok","root redirects to /login","/login 200","/annual-2025 redirects to /login without session","nginx -t ok","systemd active memory about 185M"],"boundaries":"This is an internal production runtime using the current local PostgreSQL and private local storage baseline. Managed PostgreSQL, private object storage, secret manager, backups and full SaaS hardening remain required before external customer/company use."},"confidence":0.96,"sourceRefs":["/home/admin/workspace/AccountantDesignCorp/ops/systemd/accountant-designcorp-prod.service","/home/admin/workspace/AccountantDesignCorp/ops/nginx/accountant.designcorp.eu","/home/admin/workspace/AccountantDesignCorp/docs/app-runbook.md","/home/admin/workspace/docs-designcorp/docs/control-plane/topology.md","/home/admin/workspace/docs-designcorp/docs/projects/accountant-designcorp.md"],"owner":"Agent Accounting / Agent Platform","active":true,"createdAt":"2026-07-06T18:46:30.733Z","updatedAt":"2026-07-06T18:46:30.733Z","observedAt":"2026-07-06T18:46:30.733Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}},{"id":"eebba003-a810-47e0-9de2-34af78958614","type":"procedural","key":"LibraryBookDesignCorp.staging_pr_review_flow","value":{"summary":"LibraryBookDesignCorp P1+ work is reviewed through staging before main. Feature branches and PR SHAs are deployed to https://staging.library.book.designcorp.eu/ from the clean bare source repo at /opt/designcorp/bookdesigncorp/staging/source.git. Main is treated as production-ready, not as a preview branch.","deploy_command":"/opt/designcorp/bookdesigncorp/staging/deploy-staging-release.sh <origin/branch-or-sha-or-origin/pr/NNN>","current_example":"PR #179 / issue #156 deployed from origin/feat/156-book-type-registry at 62e6a23c204b2811e5cfbdb00a5680955f74c43d.","acceptance_flow":["implement feature in separate branch and PR","run required local checks and GitHub CI","deploy branch/SHA to staging","owner reviews staging URL","only after approval merge PR to main","production remains untouched until main release/deploy policy runs"],"safety_notes":["Do not use dev.library.book.designcorp.eu for long-running Next dev preview; staging is standalone production build on bookdesigncorp-staging.service port 3217.","Staging has separate shared content/assets/reports roots under /opt/designcorp/bookdesigncorp/staging/shared.","The staging deploy script fetches heads and PR refs, writes last-release.txt, retries smoke checks, and restores previous release on failed post-switch smoke."]},"confidence":0.92,"sourceRefs":["/opt/designcorp/bookdesigncorp/staging/deploy-staging-release.sh","https://github.com/DesignCorporation/AmazonCookBook/issues/156#issuecomment-4951269414"],"owner":"DesignCorp","active":true,"createdAt":"2026-07-12T13:01:13.069Z","updatedAt":"2026-07-12T13:01:13.069Z","observedAt":"2026-07-12T13:01:13.069Z","expiresAt":null,"supersedes":null,"supersededBy":null,"metadata":{}}]}
