@runfusion/fusion 0.73.0-beta.2 → 0.73.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-browser.mjs +8 -0
- package/dist/bin.js +7664 -11386
- package/dist/child-process-worker.js +4292 -8374
- package/dist/client/.vite/manifest.json +266 -256
- package/dist/client/assets/{AgentDetailView-CUoHZPZr.js → AgentDetailView-BBOL6AgZ.js} +3 -3
- package/dist/client/assets/{AgentPermissionPolicyEditor-DKoHJIlF.js → AgentPermissionPolicyEditor-DV7OPUhR.js} +1 -1
- package/dist/client/assets/{AgentsView-CaBo-FHV.js → AgentsView-B6xoAHyV.js} +4 -4
- package/dist/client/assets/ChatView-DwVjnxM8.js +8 -0
- package/dist/client/assets/{CommandCenter-wgiEIVuC.js → CommandCenter-DYWaoYFD.js} +9 -9
- package/dist/client/assets/DevServerView-BY5up-NA.js +1 -0
- package/dist/client/assets/{DirectoryPicker-B7YwgF53.js → DirectoryPicker-fM8MJa2r.js} +1 -1
- package/dist/client/assets/DocumentsView-D2KxsPG_.js +1 -0
- package/dist/client/assets/{EvalsView-BjyqxMS_.js → EvalsView-U8dOvTRM.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-_PMSa_gN.js → ExperimentalAgentOnboardingModal-C27y8Y-1.js} +1 -1
- package/dist/client/assets/{GoalsView-BzLA8GX9.js → GoalsView-D-2wmy-O.js} +1 -1
- package/dist/client/assets/{InsightsView-Cb_tUr1V.js → InsightsView-zLyuQL_l.js} +2 -2
- package/dist/client/assets/{MemoryView-CRxOPCQq.js → MemoryView-D-tSn48u.js} +2 -2
- package/dist/client/assets/{PiExtensionsManager-XQ5rWJT3.js → PiExtensionsManager-DvwmvGEY.js} +2 -2
- package/dist/client/assets/PluginManager-BACOwQAN.js +1 -0
- package/dist/client/assets/{PullRequestView-CX6fScVe.js → PullRequestView-DULyv21u.js} +2 -2
- package/dist/client/assets/{ReportModal-BSCk5ER1.css → ReportModal-BuhhqtXJ.css} +1 -1
- package/dist/client/assets/ReportModal-CUlKMFWa.js +21 -0
- package/dist/client/assets/{ResearchView-DgKzxRUL.js → ResearchView-DM_O3IFc.js} +2 -2
- package/dist/client/assets/{SecretsView-C83SIrjR.js → SecretsView-Bq3u_nAf.js} +1 -1
- package/dist/client/assets/SessionTerminal-D00ByR6U.js +2 -0
- package/dist/client/assets/SettingsModal-Bb3pIxiX.js +21 -0
- package/dist/client/assets/SettingsModal-CMLHZBhX.css +1 -0
- package/dist/client/assets/SettingsModal-QRaBE1ds.js +1 -0
- package/dist/client/assets/{SettingsTextareaRow-BKGsmZ7C.js → SettingsTextareaRow-CHOJ-qHz.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-DIb4q-VT.js → SetupWizardModal-DriQyd81.js} +2 -2
- package/dist/client/assets/{SkillsView-D1Zxh1iX.js → SkillsView-BtDyujiZ.js} +1 -1
- package/dist/client/assets/{TodoView-CGIcE6Yr.js → TodoView-BNHUnz50.js} +2 -2
- package/dist/client/assets/{WorkflowNodeEditor-BtWrziOX.css → WorkflowNodeEditor-BNgkFJ_P.css} +1 -1
- package/dist/client/assets/WorkflowNodeEditor-BXikFpra.js +8 -0
- package/dist/client/assets/agent-import-generation-B2kYEm1O.js +1 -0
- package/dist/client/assets/app-B_HrdDXZ.js +13 -0
- package/dist/client/assets/{app-BsIXfnu-.js → app-C6yo-M_n.js} +1 -1
- package/dist/client/assets/{app-B-IdUeIu.js → app-CH8ZgPm4.js} +1 -1
- package/dist/client/assets/{app-D9ktpVhR.js → app-D4DpgDss.js} +1 -1
- package/dist/client/assets/{app-nBTNvNKK.js → app-Qv0blCyY.js} +1 -1
- package/dist/client/assets/{app-C8muVNUU.js → app-kFdtajPy.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-Dv83GkUE.js → architectureDiagram-3BPJPVTR-B-Efjj4Z.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-B_j-RJOz.js → blockDiagram-GPEHLZMM-CaOVxrlM.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-Cy3f-SD1.js → c4Diagram-AAUBKEIU-D8aYt5F1.js} +1 -1
- package/dist/client/assets/channel-5bPK6pTS.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-CPolddUJ.js → chunk-2J33WTMH-VSDT0J0r.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-BAGPgwkc.js → chunk-4BX2VUAB-Chx1wQgD.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-dzYFOH0q.js → chunk-55IACEB6-MlqjhIJg.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-ul9hGhiR.js → chunk-727SXJPM-BheQNUi8.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-C75yqe4-.js → chunk-AQP2D5EJ-C5EoJhfJ.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-BwiLAyup.js → chunk-FMBD7UC4-B8_8qP3j.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-CVv1sLhy.js → chunk-ND2GUHAM-BuglCGRx.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-D1c-k3xL.js → chunk-QZHKN3VN-B7_06dxp.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-Dv9RQDqG.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Dv9RQDqG.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-DosMsFd6.js → cose-bilkent-S5V4N54A-Cm-ZOycx.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-9os-QBXe.js → dagre-BM42HDAG-Dj_Gwjpv.js} +1 -1
- package/dist/client/assets/{dashboard-view-CNVTxyWE.js → dashboard-view-B4CRL5Fy.js} +1 -1
- package/dist/client/assets/{dashboard-view-Bn7iL770.js → dashboard-view-noD9p0Zs.js} +1 -1
- package/dist/client/assets/{dashboard-view-iwAS1HTp.js → dashboard-view-pXXSUxG9.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-ChjuJgA6.js → diagram-2AECGRRQ-C_9BfShy.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-Cq10aB4z.js → diagram-5GNKFQAL-Cmg2qpCj.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-CKjyrzjg.js → diagram-KO2AKTUF-2FNo2HXb.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-DxCc1BsH.js → diagram-LMA3HP47-DgnVeCp-.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-DJWEkDsR.js → diagram-OG6HWLK6-iAIR50HH.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-gVkDYC92.js → erDiagram-TEJ5UH35-Da4I04eN.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-1lw1mQRQ.js → flowDiagram-I6XJVG4X-Bv9r2T0m.js} +1 -1
- package/dist/client/assets/{folder-open-Nmr7nRmN.js → folder-open-CwWtrDh6.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-Yzq4WZRo.js → ganttDiagram-6RSMTGT7-BMeO84U_.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-cFR9Gv8n.js → gitGraphDiagram-PVQCEYII-CWDh_RIb.js} +1 -1
- package/dist/client/assets/index-CB3mYxAB.css +1 -0
- package/dist/client/assets/index-CE7C_XsS.js +2661 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-BbRiTnD3.js → infoDiagram-5YYISTIA-BAE4KtCL.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DD4i2Znk.js → ishikawaDiagram-YF4QCWOH-C_iXAuOy.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-qHPO2M-C.js → journeyDiagram-JHISSGLW-BnxSHwDo.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-EuFfgxUv.js → kanban-definition-UN3LZRKU-DYNRm3Nu.js} +1 -1
- package/dist/client/assets/{mermaid.core-Cru9Vzsy.js → mermaid.core-B3hvDDep.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-mCvtfapj.js → mindmap-definition-RKZ34NQL-s7KBEuPD.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-BSc_a5Dz.js → pieDiagram-4H26LBE5-Cy1_IPUD.js} +1 -1
- package/dist/client/assets/{puzzle-Cz66CEWW.js → puzzle-DWc6gFQ7.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Um2SLb_d.js → quadrantDiagram-W4KKPZXB-DqgVGp41.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-B94evN7g.js → requirementDiagram-4Y6WPE33-CA5-TDeF.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BH7NLX-K.js → sankeyDiagram-5OEKKPKP-Cuvi3RgE.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DusrBGQp.js → sequenceDiagram-3UESZ5HK-Da3GfmGP.js} +1 -1
- package/dist/client/assets/{shield-alert-CcQuaRHN.js → shield-alert-_iY63ED4.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-CVnY93Xy.js → standing-instructions-template-CCd2YY9c.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-GRjL9YlX.js → stateDiagram-AJRCARHV-CZ_I9ENR.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BBsv6ppQ.js → stateDiagram-v2-BHNVJYJU-BomoRVhY.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-DC6UeqjY.js → timeline-definition-PNZ67QCA-C3CYvIuR.js} +1 -1
- package/dist/client/assets/{upload-CjJp7lEX.js → upload-D0RrO65v.js} +1 -1
- package/dist/client/assets/{users-DgimRYHz.js → users-CGszBY2v.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-C272zK9h.js → vennDiagram-CIIHVFJN-By9fi8NW.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-KkRF-2j9.js → wardley-L42UT6IY-DErnXPkI.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-B4brtKRt.js → wardleyDiagram-YWT4CUSO-DFfXZVPk.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6--PFSKt1s.js → xychartDiagram-2RQKCTM6-9Y5oZ5mi.js} +1 -1
- package/dist/client/index.html +4 -2
- package/dist/client/version.json +1 -1
- package/dist/extension.js +4516 -8539
- package/dist/migrations/0000_initial.sql +2 -0
- package/dist/migrations/0026_bigint_counters.sql +85 -14
- package/dist/migrations/0033_fn-8505_wedge_notification.sql +5 -0
- package/dist/plugin-sdk/index.js +1 -0
- package/dist/plugins/.fusion-ce-agents/.fusion-ce-upstream-provenance.json +7 -0
- package/dist/plugins/.fusion-ce-agents/ce-adversarial-document-reviewer.md +115 -0
- package/dist/plugins/.fusion-ce-agents/ce-adversarial-reviewer.md +111 -0
- package/dist/plugins/.fusion-ce-agents/ce-agent-native-planning-strategist.md +71 -0
- package/dist/plugins/.fusion-ce-agents/ce-agent-native-reviewer.md +181 -0
- package/dist/plugins/.fusion-ce-agents/ce-ankane-readme-writer.md +50 -0
- package/dist/plugins/.fusion-ce-agents/ce-api-contract-reviewer.md +52 -0
- package/dist/plugins/.fusion-ce-agents/ce-architecture-strategist.md +53 -0
- package/dist/plugins/.fusion-ce-agents/ce-best-practices-researcher.md +122 -0
- package/dist/plugins/.fusion-ce-agents/ce-code-simplicity-reviewer.md +87 -0
- package/dist/plugins/.fusion-ce-agents/ce-coherence-reviewer.md +73 -0
- package/dist/plugins/.fusion-ce-agents/ce-correctness-reviewer.md +52 -0
- package/dist/plugins/.fusion-ce-agents/ce-data-integrity-guardian.md +75 -0
- package/dist/plugins/.fusion-ce-agents/ce-data-migration-reviewer.md +119 -0
- package/dist/plugins/.fusion-ce-agents/ce-deployment-verification-agent.md +164 -0
- package/dist/plugins/.fusion-ce-agents/ce-design-implementation-reviewer.md +94 -0
- package/dist/plugins/.fusion-ce-agents/ce-design-iterator.md +197 -0
- package/dist/plugins/.fusion-ce-agents/ce-design-lens-reviewer.md +56 -0
- package/dist/plugins/.fusion-ce-agents/ce-feasibility-reviewer.md +65 -0
- package/dist/plugins/.fusion-ce-agents/ce-figma-design-sync.md +172 -0
- package/dist/plugins/.fusion-ce-agents/ce-framework-docs-researcher.md +100 -0
- package/dist/plugins/.fusion-ce-agents/ce-git-history-analyzer.md +47 -0
- package/dist/plugins/.fusion-ce-agents/ce-issue-intelligence-analyst.md +207 -0
- package/dist/plugins/.fusion-ce-agents/ce-julik-frontend-races-reviewer.md +52 -0
- package/dist/plugins/.fusion-ce-agents/ce-learnings-researcher.md +254 -0
- package/dist/plugins/.fusion-ce-agents/ce-maintainability-reviewer.md +77 -0
- package/dist/plugins/.fusion-ce-agents/ce-pattern-recognition-specialist.md +62 -0
- package/dist/plugins/.fusion-ce-agents/ce-performance-oracle.md +115 -0
- package/dist/plugins/.fusion-ce-agents/ce-performance-reviewer.md +54 -0
- package/dist/plugins/.fusion-ce-agents/ce-pr-comment-resolver.md +63 -0
- package/dist/plugins/.fusion-ce-agents/ce-previous-comments-reviewer.md +68 -0
- package/dist/plugins/.fusion-ce-agents/ce-product-lens-reviewer.md +92 -0
- package/dist/plugins/.fusion-ce-agents/ce-project-standards-reviewer.md +84 -0
- package/dist/plugins/.fusion-ce-agents/ce-reliability-reviewer.md +52 -0
- package/dist/plugins/.fusion-ce-agents/ce-repo-research-analyst.md +263 -0
- package/dist/plugins/.fusion-ce-agents/ce-scope-guardian-reviewer.md +79 -0
- package/dist/plugins/.fusion-ce-agents/ce-security-lens-reviewer.md +48 -0
- package/dist/plugins/.fusion-ce-agents/ce-security-reviewer.md +54 -0
- package/dist/plugins/.fusion-ce-agents/ce-security-sentinel.md +98 -0
- package/dist/plugins/.fusion-ce-agents/ce-session-historian.md +89 -0
- package/dist/plugins/.fusion-ce-agents/ce-slack-researcher.md +133 -0
- package/dist/plugins/.fusion-ce-agents/ce-spec-flow-analyzer.md +87 -0
- package/dist/plugins/.fusion-ce-agents/ce-swift-ios-reviewer.md +107 -0
- package/dist/plugins/.fusion-ce-agents/ce-testing-reviewer.md +52 -0
- package/dist/plugins/.fusion-ce-agents/ce-web-researcher.md +127 -0
- package/dist/plugins/.fusion-ce-skills/.fusion-ce-upstream-provenance.json +7 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/SKILL.md +318 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/agents/slack-researcher.md +127 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/brainstorm-sections.md +354 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/handoff.md +172 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/html-rendering.md +662 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/markdown-rendering.md +236 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/synthesis-summary.md +271 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/universal-brainstorming.md +71 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/visual-probes.md +128 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/scripts/visual-probe-server.js +419 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/SKILL.md +821 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/action-class-rubric.md +26 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/bulk-preview.md +112 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/cross-model-review.md +63 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/diff-scope.md +41 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/findings-schema.json +137 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/persona-catalog.md +63 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/adversarial-reviewer.md +102 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/agent-native-reviewer.md +173 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/api-contract-reviewer.md +43 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/correctness-reviewer.md +43 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/data-migration-reviewer.md +111 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/deployment-verification-agent.md +157 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/julik-frontend-races-reviewer.md +44 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/learnings-researcher.md +247 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/maintainability-reviewer.md +68 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/performance-reviewer.md +45 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/previous-comments-reviewer.md +59 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/project-standards-reviewer.md +75 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/reliability-reviewer.md +43 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/security-reviewer.md +45 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/swift-ios-reviewer.md +99 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/testing-reviewer.md +43 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/review-output-template.md +170 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/subagent-template.md +199 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/tracker-defer.md +149 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/validator-template.md +89 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/walkthrough.md +249 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/scripts/cross-model-adversarial-review.sh +218 -0
- package/dist/plugins/.fusion-ce-skills/ce-commit/SKILL.md +105 -0
- package/dist/plugins/.fusion-ce-skills/ce-commit-push-pr/SKILL.md +134 -0
- package/dist/plugins/.fusion-ce-skills/ce-commit-push-pr/references/branch-creation.md +55 -0
- package/dist/plugins/.fusion-ce-skills/ce-commit-push-pr/references/pr-description-writing.md +115 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/SKILL.md +712 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/assets/resolution-template.md +94 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/best-practices-researcher.md +115 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/data-integrity-guardian.md +68 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/framework-docs-researcher.md +93 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/pattern-recognition-specialist.md +55 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/performance-oracle.md +108 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/security-sentinel.md +91 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/session-historian.md +83 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/concepts-vocabulary.md +78 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/schema.yaml +231 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/yaml-schema.md +118 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/discover-sessions.sh +130 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/extract-errors.py +254 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/extract-metadata.py +456 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/extract-skeleton.py +570 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/validate-frontmatter.py +137 -0
- package/dist/plugins/.fusion-ce-skills/ce-debug/SKILL.md +257 -0
- package/dist/plugins/.fusion-ce-skills/ce-debug/references/anti-patterns.md +91 -0
- package/dist/plugins/.fusion-ce-skills/ce-debug/references/defense-in-depth.md +35 -0
- package/dist/plugins/.fusion-ce-skills/ce-debug/references/investigation-techniques.md +374 -0
- package/dist/plugins/.fusion-ce-skills/ce-doc-review/SKILL.md +70 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/SKILL.md +401 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/issue-intelligence-analyst.md +200 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/learnings-researcher.md +247 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/slack-researcher.md +127 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/web-researcher.md +121 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/divergent-ideation.md +89 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/html-rendering.md +662 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/ideation-sections.md +191 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/markdown-rendering.md +236 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/post-ideation-workflow.md +166 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/universal-ideation.md +107 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/web-research-cache.md +55 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/SKILL.md +858 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/agent-native-planning-strategist.md +62 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/architecture-strategist.md +46 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/best-practices-researcher.md +114 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/data-integrity-guardian.md +68 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/data-migration-reviewer.md +103 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/deployment-verification-agent.md +157 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/framework-docs-researcher.md +93 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/git-history-analyzer.md +40 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/learnings-researcher.md +247 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/pattern-recognition-specialist.md +55 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/performance-oracle.md +108 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/repo-research-analyst.md +256 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/security-sentinel.md +91 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/slack-researcher.md +127 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/spec-flow-analyzer.md +80 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/web-researcher.md +121 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/approach-altitude.md +55 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/deepening-workflow.md +259 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/html-rendering.md +668 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/markdown-rendering.md +236 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/plan-handoff.md +126 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/plan-sections.md +405 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/synthesis-summary.md +396 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/universal-planning.md +168 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/SKILL.md +53 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/agents/pr-comment-resolver.md +56 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/evaluation-rubric.md +106 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/full-mode.md +283 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/targeted-mode.md +45 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/get-pr-comments +159 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/get-thread-for-comment +76 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/reply-to-pr-thread +33 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/resolve-pr-thread +23 -0
- package/dist/plugins/.fusion-ce-skills/ce-strategy/SKILL.md +97 -0
- package/dist/plugins/.fusion-ce-skills/ce-strategy/references/interview.md +143 -0
- package/dist/plugins/.fusion-ce-skills/ce-strategy/references/strategy-template.md +89 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/SKILL.md +429 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/agents/figma-design-sync.md +165 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/execution-engines.md +85 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/non-code-execution.md +23 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/review-findings-followup.md +104 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/shipping-workflow.md +133 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/tracker-defer.md +149 -0
- package/dist/plugins/fusion-plugin-compound-engineering/.bundled.reload-3.js +11266 -0
- package/dist/plugins/fusion-plugin-compound-engineering/.bundled.reload-4.js +11266 -0
- package/dist/plugins/fusion-plugin-dependency-graph/.bundled.reload-1.js +8206 -0
- package/dist/plugins/fusion-plugin-grok-runtime/.bundled.reload-2.js +26623 -0
- package/package.json +6 -3
- package/skill/fusion/references/engine-tools.md +6 -2
- package/dist/client/assets/ChatView-Bv0J5p5U.js +0 -8
- package/dist/client/assets/DevServerView-Ue9XG_4H.js +0 -1
- package/dist/client/assets/DocumentsView-C1Ptwcv5.js +0 -1
- package/dist/client/assets/PluginManager-CXPSlWxs.js +0 -1
- package/dist/client/assets/ReportModal-JhZZXZlj.js +0 -21
- package/dist/client/assets/SessionTerminal-BrK3psiC.js +0 -2
- package/dist/client/assets/SettingsModal-Bby9vLGx.js +0 -21
- package/dist/client/assets/SettingsModal-DVLqY1-7.js +0 -1
- package/dist/client/assets/SettingsModal-DXArgTTx.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-BXUC0lim.js +0 -8
- package/dist/client/assets/app-DUszvars.js +0 -13
- package/dist/client/assets/channel-BuhC8kaT.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-vpRR5WOg.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-vpRR5WOg.js +0 -1
- package/dist/client/assets/index-Cg9ahVtV.js +0 -2661
- package/dist/client/assets/index-uhXHk1ek.css +0 -1
|
@@ -0,0 +1,668 @@
|
|
|
1
|
+
# HTML Rendering
|
|
2
|
+
|
|
3
|
+
This is a format-rendering reference — it describes how to render any
|
|
4
|
+
artifact in HTML, independent of which skill is producing it.
|
|
5
|
+
|
|
6
|
+
It is paired with a section contract (`plan-sections.md`,
|
|
7
|
+
`brainstorm-sections.md`, etc.) that describes *what* the artifact contains.
|
|
8
|
+
This reference describes *how* HTML specifically presents it. The same
|
|
9
|
+
content rendered by different skills shares the same HTML principles.
|
|
10
|
+
|
|
11
|
+
The HTML artifact is the *only* artifact the skill produces for that run —
|
|
12
|
+
output mode is exclusive (markdown OR HTML, never both). Downstream
|
|
13
|
+
consumers that read HTML today (`ce-work`, `ce-doc-review` DOM-safe-or-report-only mode,
|
|
14
|
+
human readers) do so directly; the agent-consumability rules below make that
|
|
15
|
+
work. `ce-doc-review` may apply only parse5-backed DOM-safe helper mutations; markdown autofix and
|
|
16
|
+
markdown Append-to-Open-Questions write-back remain disabled for `.html` artifacts, and any helper refusal falls back to report-only.
|
|
17
|
+
|
|
18
|
+
## Hard invariants
|
|
19
|
+
|
|
20
|
+
These hold regardless of which skill produced the artifact.
|
|
21
|
+
|
|
22
|
+
- **Single self-contained HTML5 file.** No companion `.css`, `.js`, or
|
|
23
|
+
`.svg` files. CSS lives in `<style>`. SVG lives inline. Images are
|
|
24
|
+
base64 data URIs or inline SVG. The one permitted exception is a
|
|
25
|
+
`<link rel="stylesheet">` to a CDN webfont CSS endpoint (Google Fonts,
|
|
26
|
+
Bunny Fonts, etc.), paired with an offline-readable fallback font stack
|
|
27
|
+
so the doc remains readable if the CDN is unreachable.
|
|
28
|
+
- **All metadata appears as visible text — single source of truth.**
|
|
29
|
+
The artifact's metadata (title, type, date, etc. — exact
|
|
30
|
+
fields per-skill, defined in the section contract) renders as visible
|
|
31
|
+
HTML elements that downstream agents and humans read. No hidden
|
|
32
|
+
machine-readable copy in any form: no `<script type="application/json">`
|
|
33
|
+
frontmatter block, no `data-*` attribute mirror, and no
|
|
34
|
+
`<meta name="created">` / `<meta name="origin">`
|
|
35
|
+
in `<head>` duplicating the same values that appear in the visible
|
|
36
|
+
header. One representation for each value — drift across two copies is
|
|
37
|
+
the failure this rule prevents.
|
|
38
|
+
|
|
39
|
+
The text-and-attribute redundancy in `<time datetime="2026-05-12">2026-05-12</time>`
|
|
40
|
+
is acceptable because the attribute is a parser hint, not a hidden copy.
|
|
41
|
+
- **Stable IDs as anchor IDs AND visible text.** Every ID-bearing item
|
|
42
|
+
(R-IDs, U-IDs, A-IDs, F-IDs, AE-IDs, KTDs) gets `id="r1"` on its
|
|
43
|
+
element AND appears as visible text inside the element (e.g., the
|
|
44
|
+
text "R1." inside the table cell or heading). Downstream agents find
|
|
45
|
+
the ID in source the same way they find it in markdown.
|
|
46
|
+
- **Source / composition signal.** A visible footer at the bottom of
|
|
47
|
+
the doc names the composition timestamp and the source identifier
|
|
48
|
+
(the user prompt context, the upstream brainstorm doc when one
|
|
49
|
+
exists, or just the composing skill name when there's no external
|
|
50
|
+
source). Example shape:
|
|
51
|
+
`<footer class="composition-signal">Composed 2026-05-17T14:23Z by ce-plan from <code>docs/brainstorms/...-requirements.md</code></footer>`.
|
|
52
|
+
Under exclusive output mode this signal is the artifact's own
|
|
53
|
+
provenance — there's no markdown sibling to reference. Omitting it
|
|
54
|
+
leaves readers unable to tell how stale the rendering is.
|
|
55
|
+
- **ASCII identifiers.** Class names, element IDs, data attribute names
|
|
56
|
+
are ASCII-only.
|
|
57
|
+
- **Unified plan navigation.** Unified plan artifacts include a visible
|
|
58
|
+
navigation region near the top of the document. It links to stable section
|
|
59
|
+
anchors for `goal-capsule`,
|
|
60
|
+
`product-contract`, `planning-contract`, `implementation-units`,
|
|
61
|
+
`verification-contract`, `definition-of-done`, and `appendix` when those
|
|
62
|
+
sections exist. Requirements-only artifacts omit links to absent
|
|
63
|
+
implementation sections.
|
|
64
|
+
- **Visible readiness metadata.** If the artifact has `artifact_contract`,
|
|
65
|
+
`artifact_readiness`, `product_contract_source`, or `execution`, render
|
|
66
|
+
those values in the visible header metadata. Do not hide a duplicate copy in
|
|
67
|
+
JSON, `data-*`, or `<meta>` tags.
|
|
68
|
+
|
|
69
|
+
## Precedence stack for style preferences
|
|
70
|
+
|
|
71
|
+
Honor user style preferences in this order (highest to lowest):
|
|
72
|
+
|
|
73
|
+
1. **In-session conversation** — explicit direction the user gave this run.
|
|
74
|
+
2. **Preferred stylesheet reference** named in loaded agent-instruction
|
|
75
|
+
context (typically `AGENTS.md` / `CLAUDE.md`, but scan loaded context;
|
|
76
|
+
don't enumerate locations). The reference may be a file path
|
|
77
|
+
(`docs/style.css`), a URL, a named library ("Tailwind"), or a style
|
|
78
|
+
brand ("Stripe docs"). Agent-instruction files carry deliberate
|
|
79
|
+
agent-aware preferences, so this tier sits above DESIGN.md.
|
|
80
|
+
3. **DESIGN.md** discovered on the filesystem (see "DESIGN.md discovery"
|
|
81
|
+
below).
|
|
82
|
+
4. **Fallback default** — the opinionated palette / typography choices the
|
|
83
|
+
agent makes when no preference exists.
|
|
84
|
+
|
|
85
|
+
### Active-recall at compose time
|
|
86
|
+
|
|
87
|
+
Before writing the CSS, scan loaded context for any stylesheet reference
|
|
88
|
+
the user has indicated for documents like this. If found and inlinable
|
|
89
|
+
(short local file, fetchable URL within budget), inline it into `<style>`.
|
|
90
|
+
If found but not inlinable (large framework, paywalled stylesheet, named
|
|
91
|
+
system without a fetchable source), compose CSS in its spirit — typography,
|
|
92
|
+
color, density cues drawn from the named system. Only fall back to the
|
|
93
|
+
default style when no preference signal exists.
|
|
94
|
+
|
|
95
|
+
The single-file invariant is preserved either way. External
|
|
96
|
+
`<link rel="stylesheet">` is permitted only for CDN webfont CSS (with the
|
|
97
|
+
offline fallback font stack); never link to an external stylesheet
|
|
98
|
+
carrying layout, color, or typography rules the doc cannot read offline.
|
|
99
|
+
|
|
100
|
+
### DESIGN.md discovery
|
|
101
|
+
|
|
102
|
+
When tier 3 of the precedence stack applies, look for a DESIGN.md file in
|
|
103
|
+
these locations, first match wins:
|
|
104
|
+
|
|
105
|
+
1. Worktree root (resolve via `git rev-parse --show-toplevel`).
|
|
106
|
+
2. `docs/DESIGN.md`.
|
|
107
|
+
3. `.compound-engineering/DESIGN.md`.
|
|
108
|
+
|
|
109
|
+
Read once at compose time. Absent → fall through to the fallback default.
|
|
110
|
+
|
|
111
|
+
Worktree-root only — do not fall through to a main checkout. Users
|
|
112
|
+
working from a worktree who want HTML defaults can add DESIGN.md to the
|
|
113
|
+
worktree.
|
|
114
|
+
|
|
115
|
+
**DESIGN.md is a partial override, not all-or-nothing.** Real DESIGN.md
|
|
116
|
+
files vary widely: some are token tables, some are CSS variables, some are
|
|
117
|
+
prose; most are authored for a *product or marketing surface*, not a
|
|
118
|
+
long-form doc. The governing split: **take the brand's scale-independent
|
|
119
|
+
identity literally, own the scale-dependent layout values yourself, and
|
|
120
|
+
skip decoration.**
|
|
121
|
+
|
|
122
|
+
- **Take literally (scale-independent identity):** the color palette
|
|
123
|
+
(under the contrast rule), font *weight* and *style*, OpenType features,
|
|
124
|
+
and radius *character* (sharp vs rounded). These carry the brand and are
|
|
125
|
+
safe at any size.
|
|
126
|
+
- **Own it yourself (scale-dependent layout):** the **type size scale**
|
|
127
|
+
and **spacing magnitudes**. DESIGN.md values are almost always
|
|
128
|
+
product/marketing-scaled (display headings at 48-80px, airy ~96px
|
|
129
|
+
section gaps); read them only as *hierarchy*, then set doc-appropriate
|
|
130
|
+
values (body ~14-16px, headings ~1.2-1.6× body, comfortable paragraph
|
|
131
|
+
spacing).
|
|
132
|
+
- **Skip decoration:** decorative or atmospheric brand voltage with no
|
|
133
|
+
content to attach to in a doc — gradient orbs, full-bleed hero
|
|
134
|
+
photography, motion. Take the palette and feel; do not reproduce the
|
|
135
|
+
decoration.
|
|
136
|
+
|
|
137
|
+
Specific cases:
|
|
138
|
+
|
|
139
|
+
- **Fonts: load only open webfonts; never attempt a proprietary brand
|
|
140
|
+
face.** A self-contained doc can only load an open webfont (Google Fonts
|
|
141
|
+
or an open CDN) via the permitted webfont `<link>` plus an offline
|
|
142
|
+
fallback stack. **Assume a bespoke brand face is proprietary and do not
|
|
143
|
+
attempt to load it** — Airbnb Cereal, Coinbase Display/Sans, BMW Type,
|
|
144
|
+
Waldenburg, Circular and the like will not render in a single file;
|
|
145
|
+
trying just produces a broken fallback. Use the DESIGN.md's own fallback
|
|
146
|
+
chain, or a family-matched system stack (serif↔serif, sans↔sans,
|
|
147
|
+
mono↔mono). Load a named face *only* when it is a known open webfont
|
|
148
|
+
(Inter, Geist, Cal Sans, Roboto…); when unsure whether a face is open,
|
|
149
|
+
do not try. Honor the DESIGN.md's declared roles (`body` / `display` /
|
|
150
|
+
`mono`) and never promote a display/decorative face into a body or
|
|
151
|
+
small-text role. Net: reproduce the brand's serif-vs-sans structure and
|
|
152
|
+
weight voice, not necessarily its exact faces.
|
|
153
|
+
- **Typography-scale mismatch.** DESIGN.md typography tokens are usually
|
|
154
|
+
sized for product UI — marketing pages, app screens, hero sections —
|
|
155
|
+
with display headings at 48-80px. A long-form doc needs body at ~14-16px
|
|
156
|
+
and headings at ~1.2-1.6× body. When the size scale looks
|
|
157
|
+
product-scaled (the common case), use the **family**, **weight**, and
|
|
158
|
+
**OpenType feature** assignments (these carry the design language) and
|
|
159
|
+
pick the agent's own size scale for the doc surface. Apply DESIGN.md
|
|
160
|
+
sizes literally only when they are clearly doc-scaled — body 14-16px,
|
|
161
|
+
headings under ~32px.
|
|
162
|
+
- **Scope mismatch (product UI vs doc surface).** A DESIGN.md aimed at
|
|
163
|
+
product marketing or app UI may name button states, input borders, or
|
|
164
|
+
hero backgrounds tied to *that* surface, not a generic doc. The page
|
|
165
|
+
surface is the case to judge: a **reading canvas** — white, off-white,
|
|
166
|
+
or a legible dark — transfers **literally** and should be the doc
|
|
167
|
+
background; a bright product/marketing-hero surface
|
|
168
|
+
(`--surface: #c0f0fb`) does not — extract the principle (the design
|
|
169
|
+
language uses a tinted surface) rather than the literal value when the
|
|
170
|
+
token is product-UI-scoped.
|
|
171
|
+
- **Partial coverage.** When DESIGN.md defines some categories but not
|
|
172
|
+
others (colors but no spacing scale, typography but no elevation), use
|
|
173
|
+
it for what it covers and the fallback default for the rest. Do not
|
|
174
|
+
require DESIGN.md to be complete before honoring it.
|
|
175
|
+
|
|
176
|
+
## Format principles
|
|
177
|
+
|
|
178
|
+
These shape what "good" HTML looks like; the agent applies them per
|
|
179
|
+
artifact based on content.
|
|
180
|
+
|
|
181
|
+
### Readable measure, not full bleed
|
|
182
|
+
|
|
183
|
+
Long-form text is unreadable at full viewport width — past ~80 characters
|
|
184
|
+
per line the eye loses the return sweep and scanning slows. As a
|
|
185
|
+
fallback-default (precedence tier 4, overridden by in-session direction or
|
|
186
|
+
DESIGN.md), center the document in a content container and hold prose to a
|
|
187
|
+
comfortable measure.
|
|
188
|
+
|
|
189
|
+
- **Page container.** A centered column with a max-width in the ~820-960px
|
|
190
|
+
band (`margin-inline: auto`) keeps the doc off the far edges of wide
|
|
191
|
+
monitors while leaving room for the format's richer shapes.
|
|
192
|
+
- **Prose measure.** Hold running paragraphs to roughly 65-80 characters
|
|
193
|
+
(`max-width: ~70ch` on text blocks). The named test: read a paragraph at
|
|
194
|
+
full window width on a wide display — if the return sweep to the next
|
|
195
|
+
line is effortful, the measure is too wide.
|
|
196
|
+
- **Let wide content break out.** Tables, diagrams, and side-by-side
|
|
197
|
+
columns may use the full container width (or wider) when the content
|
|
198
|
+
needs it — the measure constraint is for prose, not for everything.
|
|
199
|
+
|
|
200
|
+
Express the constraint in `ch`/`rem` rather than a single hardcoded pixel
|
|
201
|
+
value so it survives font-size and DESIGN.md overrides. DESIGN.md or an
|
|
202
|
+
in-session instruction overrides these values; this is the fallback when no
|
|
203
|
+
layout preference exists.
|
|
204
|
+
|
|
205
|
+
### Markdown source is content, not design
|
|
206
|
+
|
|
207
|
+
When markdown (or markdown-shaped chat context) is part of the input, use
|
|
208
|
+
it for semantic content — what the doc is about, what sections exist,
|
|
209
|
+
what facts each section establishes. Do NOT treat its bullet-vs-table
|
|
210
|
+
presentation choices as authoritative; re-choose the rendering per
|
|
211
|
+
content shape in HTML's richer affordance space. If the markdown rendered
|
|
212
|
+
13 requirements as a bulleted list, that does NOT mean HTML must render
|
|
213
|
+
them as a list — ask whether 13 items sharing `ID + body` shape deserve
|
|
214
|
+
a table.
|
|
215
|
+
|
|
216
|
+
### Prose is authoritative
|
|
217
|
+
|
|
218
|
+
When a visualization disagrees with the surrounding prose, the prose
|
|
219
|
+
governs. If they diverge, the visualization is wrong.
|
|
220
|
+
|
|
221
|
+
### Hyperlink the reference index
|
|
222
|
+
|
|
223
|
+
When the doc has a Sources & References (or equivalent reference-index)
|
|
224
|
+
section, hyperlink each entry to its canonical destination so readers
|
|
225
|
+
can open it directly. A long bare-text list of paths and ticket IDs is
|
|
226
|
+
the format's biggest unforced UX miss — the reader has to copy-paste
|
|
227
|
+
every entry into a browser or IDE.
|
|
228
|
+
|
|
229
|
+
Resolve the repo's GitHub URL once at compose time:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
git remote get-url origin
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Apply linking to three reference shapes:
|
|
236
|
+
|
|
237
|
+
- **Repo-relative code/doc paths** (`services/foo.ts`,
|
|
238
|
+
`docs/solutions/bar.md`) → `<repo-url>/blob/main/<path>`.
|
|
239
|
+
- **Named GitHub PRs/issues** (`PR #636`, `issue #1048`) →
|
|
240
|
+
`<repo-url>/pull/636` or `<repo-url>/issues/1048`.
|
|
241
|
+
- **Named external trackers** (Linear `ESP-1705`, Jira `PROJ-123`) →
|
|
242
|
+
link only when the workspace URL is established in loaded context
|
|
243
|
+
(e.g., a `linear.app/<workspace>/...` URL appeared earlier in the
|
|
244
|
+
session or in `AGENTS.md`); otherwise leave as text.
|
|
245
|
+
|
|
246
|
+
**Do not invent URLs.** If `origin` isn't a GitHub URL (GitLab,
|
|
247
|
+
Bitbucket, internal host) and the equivalent main-tree URL pattern
|
|
248
|
+
isn't obvious, leave entries as `<code>` text. If the external
|
|
249
|
+
tracker workspace isn't established, leave as text. A broken or
|
|
250
|
+
guessed link is worse than no link.
|
|
251
|
+
|
|
252
|
+
**Scope: reference index only, not inline prose.** Inline `<code>`
|
|
253
|
+
mentions of paths or PRs inside paragraph prose stay as code or text.
|
|
254
|
+
Linking every mention would clutter; readers expect clickable jumps
|
|
255
|
+
where the doc presents itself as a reference index.
|
|
256
|
+
|
|
257
|
+
### Stable section anchors for unified plans
|
|
258
|
+
|
|
259
|
+
<!--
|
|
260
|
+
FNXC:CompoundEngineering 2026-06-27-22:35:
|
|
261
|
+
FN-7149 keeps HTML plans as pinned single-file snapshots while allowing only parse5-backed DOM-safe ce-doc-review mutations. Stable section IDs remain the only anchors for in-place fixes; any ambiguity or parser instability must fall back to report-only instead of fabricating sections.
|
|
262
|
+
-->
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
When rendering a unified plan, every major logical section gets a stable
|
|
266
|
+
anchor ID and visible heading text:
|
|
267
|
+
|
|
268
|
+
| Logical section | Required id |
|
|
269
|
+
|---|---|
|
|
270
|
+
| Goal Capsule | `goal-capsule` |
|
|
271
|
+
| Product Contract | `product-contract` |
|
|
272
|
+
| Product Requirements | `product-requirements` |
|
|
273
|
+
| Planning Contract | `planning-contract` |
|
|
274
|
+
| Implementation Units | `implementation-units` |
|
|
275
|
+
| Verification Contract | `verification-contract` |
|
|
276
|
+
| Definition of Done | `definition-of-done` |
|
|
277
|
+
| Appendix | `appendix` |
|
|
278
|
+
|
|
279
|
+
Long HTML plans are agent-consumed as source text as often as they are read in
|
|
280
|
+
a browser. Keep the heading text visible and adjacent to the `id`; do not rely
|
|
281
|
+
on a nav link alone to carry the section name.
|
|
282
|
+
|
|
283
|
+
### Text contrast is local
|
|
284
|
+
|
|
285
|
+
Every text-on-background pairing must hold up on its own. A color that
|
|
286
|
+
works for prose on the page background does not automatically work for
|
|
287
|
+
a small label inside a tinted container. The most common violation:
|
|
288
|
+
applying a generic "muted" text variable (calibrated for prose-on-bg) to
|
|
289
|
+
secondary text inside an accent-soft / warn-soft / info-soft container.
|
|
290
|
+
|
|
291
|
+
Test by reading each filled shape's labels at the rendered scale. If the
|
|
292
|
+
subtitle or secondary text feels washed-out against the fill, the choice
|
|
293
|
+
is wrong for that local context — pick a color from the same family as
|
|
294
|
+
the fill (accent-text for accent-soft, etc.) or drop the muting entirely
|
|
295
|
+
and rely on font-size and weight for hierarchy.
|
|
296
|
+
|
|
297
|
+
### Body bold not colored by default
|
|
298
|
+
|
|
299
|
+
Reserve accent text color for status chips, ID chips, links, and section
|
|
300
|
+
borders. Do NOT color `<strong>` in body content by default. Bold weight
|
|
301
|
+
already carries emphasis; applying accent color to every `<strong>` in a
|
|
302
|
+
long list overwhelms the eye, especially in dark mode. CSS should leave
|
|
303
|
+
`strong` at `color: inherit` unless a specific surface (status pill, ID
|
|
304
|
+
chip) is being styled.
|
|
305
|
+
|
|
306
|
+
### Chips and pills: uniform shape, no one-sided accent
|
|
307
|
+
|
|
308
|
+
Status chips, ID chips, and metric pills in the same row share one shape
|
|
309
|
+
— same border-radius, border weight, and fill treatment. Differentiate
|
|
310
|
+
categories only by the chip's overall fill/text color (applied to the
|
|
311
|
+
whole pill, like a soft-tint badge), never by an accent on one edge. A
|
|
312
|
+
colored stripe or arc on a single side of a pill reads as broken and
|
|
313
|
+
asymmetric — as if a border half-failed to render — so avoid it. The same
|
|
314
|
+
holds for any element, not just chips: differentiate by a full tint, not
|
|
315
|
+
a colored stripe on one edge. If an ID chip should stand out from metric
|
|
316
|
+
chips, vary its fill/text color uniformly, not its edge treatment, and
|
|
317
|
+
keep every chip in the row a visual set.
|
|
318
|
+
|
|
319
|
+
### No JS framework runtimes
|
|
320
|
+
|
|
321
|
+
A small inline `<script>` for active-section TOC tracking or anchor-
|
|
322
|
+
permalink behavior is acceptable. React, Vue, Svelte, or any framework
|
|
323
|
+
runtime is not. The single-file invariant doesn't permit framework
|
|
324
|
+
bundles, and the artifact's longevity doesn't warrant a build dependency.
|
|
325
|
+
|
|
326
|
+
## Section anatomy
|
|
327
|
+
|
|
328
|
+
How section types commonly render in HTML. These are patterns, not
|
|
329
|
+
contracts — the agent picks shapes that fit the content.
|
|
330
|
+
|
|
331
|
+
- **Summary / Problem Frame** — semantic `<section>` with prose
|
|
332
|
+
paragraphs. Optionally precede with an eyebrow label (small-caps tag
|
|
333
|
+
above the title) for editorial polish.
|
|
334
|
+
- **Requirements** — `<table>` is the default at 5+ uniform items;
|
|
335
|
+
bullets at smaller counts. Concern-grouping takes precedence over the
|
|
336
|
+
flat-table default: when requirements span distinct concerns, group them
|
|
337
|
+
under bold inline headers (or per-group sections) first, then apply the
|
|
338
|
+
5+ table default *within* each group rather than flattening the whole
|
|
339
|
+
section into one table. Each row has the R-ID as visible text in
|
|
340
|
+
its own column. Consider adding a "covered by" column for reverse
|
|
341
|
+
traceability when ID-anchored items have downstream references in
|
|
342
|
+
the same doc.
|
|
343
|
+
- **Implementation Units** — repeating `<article>` cards with a stable
|
|
344
|
+
ID chip (visible "U1" text), a metadata strip (`<dl>` with field
|
|
345
|
+
labels and values for Goal, Files, Dependencies), and secondary
|
|
346
|
+
content (Approach, Test Scenarios, Verification, Patterns to Follow)
|
|
347
|
+
inside `<details>` collapsibles, **default-closed**. At 3+ units the
|
|
348
|
+
default-closed rule is load-bearing — rendering all units fully
|
|
349
|
+
expanded turns the doc into one continuous scroll where the reader
|
|
350
|
+
can't see the unit list at a glance. The metadata strip is the
|
|
351
|
+
primary always-visible surface; subsection labels (`<summary>`) are
|
|
352
|
+
clickable affordances for readers to expand on demand. A single unit
|
|
353
|
+
with no secondary content can skip `<details>` entirely; the rule
|
|
354
|
+
fires when content exists to hide. The `<dl>` strip is for *descriptive*
|
|
355
|
+
fields (Goal, Files, Dependencies). A *directive* field — `Execution
|
|
356
|
+
note` is the canonical case, carrying a procedural instruction the
|
|
357
|
+
implementer must act on (e.g. "start with a failing integration test") —
|
|
358
|
+
does not belong in the strip, where it renders as a passive pair styled
|
|
359
|
+
like a date and gets skimmed past. Render it as an advisory callout (see
|
|
360
|
+
Tinted callout cards) so its visual weight matches its actionability. The
|
|
361
|
+
test: descriptive value -> metadata pair; something the reader must act
|
|
362
|
+
on -> callout.
|
|
363
|
+
- **Key Technical Decisions** — repeating cards with the decision ID,
|
|
364
|
+
bold decision title (often with inline code for technical
|
|
365
|
+
identifiers), and prose rationale. Flat cards (not collapsibles) —
|
|
366
|
+
these are reference material readers scan, not drill into.
|
|
367
|
+
- **Risks** — cards with a color-coded status eyebrow (e.g., "RISK ·
|
|
368
|
+
MITIGATED" / "OPEN · DEFERRED FOLLOW-UP") and prose body. Communicate
|
|
369
|
+
status through the eyebrow's color plus an optional subtle full-card
|
|
370
|
+
tint — not a colored stripe on one edge (see "Chips and pills").
|
|
371
|
+
- **Scope Boundaries** — callout cards distinguished (in-scope vs deferred
|
|
372
|
+
vs outside) by a colored eyebrow/label plus a subtle full-card tint when
|
|
373
|
+
the distinction is meaningful — not a one-edge colored stripe.
|
|
374
|
+
|
|
375
|
+
The agent picks more elaborate or simpler shapes based on what each
|
|
376
|
+
specific artifact's content needs.
|
|
377
|
+
|
|
378
|
+
## Diagrams
|
|
379
|
+
|
|
380
|
+
When the section contract calls for a diagram (architecture, sequence,
|
|
381
|
+
flowchart, state machine, swim lane, data-flow, quantitative
|
|
382
|
+
comparison), HTML renders it as **inline SVG**. The agent picks the
|
|
383
|
+
shape that conveys the content fastest — there is no fixed catalog of
|
|
384
|
+
"approved" diagram types. If the content is quantitative comparison
|
|
385
|
+
across categories, a bar chart is the right shape; if it's component
|
|
386
|
+
relationships, a topology diagram; if it's process flow across
|
|
387
|
+
participants, a swim lane; etc.
|
|
388
|
+
|
|
389
|
+
**Conceptual diagrams are not wireframes.** The wireframe affordance below
|
|
390
|
+
is scoped to *UI-shaped requirements* and is excluded for non-visual
|
|
391
|
+
systems. That exclusion is about wireframes only —
|
|
392
|
+
a brainstorm about a data model, schema, agent workflow, or migration is
|
|
393
|
+
still free to use a conceptual diagram (a before/after field map, a
|
|
394
|
+
source-of-truth fan-out, a state diagram). Don't let the wireframe
|
|
395
|
+
exclusion suppress a conceptual diagram the content warrants.
|
|
396
|
+
|
|
397
|
+
**Diagrams complement prose; they never replace it.** A diagram is an
|
|
398
|
+
accelerant placed next to the prose it illustrates, not a substitute. The
|
|
399
|
+
IDed prose stays complete and standalone — a reader who ignores every
|
|
400
|
+
diagram still gets the full content in text, and a text-reading downstream
|
|
401
|
+
agent (which does not parse SVG geometry) is never left with a relationship
|
|
402
|
+
that exists only in the picture. This extends the prose-is-authoritative
|
|
403
|
+
rule above: prose governs not only on disagreement but on completeness, so
|
|
404
|
+
adding a diagram is not license to thin the prose it depicts.
|
|
405
|
+
|
|
406
|
+
### Layout legibility for hand-authored SVG
|
|
407
|
+
|
|
408
|
+
The agent designs SVG coordinates without rendering — layouts that look
|
|
409
|
+
fine in source can collide in practice. Before emitting, trace each
|
|
410
|
+
labeled arrow, each shape edge, and each text label:
|
|
411
|
+
|
|
412
|
+
- **No stroke — arrow *or* shape edge/border — passes through a text
|
|
413
|
+
label.** If an arrow line/curve, or the border of a box, parallelogram,
|
|
414
|
+
or other shape, crosses a label's bounding box, the text reads as
|
|
415
|
+
struck-through and the stroke reads as terminating at the wrong element.
|
|
416
|
+
Fix by re-routing the arrow, moving the label clear of every edge, or
|
|
417
|
+
applying `paint-order: stroke fill` with a stroke color matching the
|
|
418
|
+
diagram background to halo the label. The halo width is a judgment call:
|
|
419
|
+
narrow enough not to bleed into glyph strokes (a halo whose width
|
|
420
|
+
approaches the glyph's own stroke width muddies the text color), wide
|
|
421
|
+
enough to mask the underlying stroke (at least its stroke width
|
|
422
|
+
plus a hairline). Verify by inspecting rendered text at the target
|
|
423
|
+
font size — if glyphs look thicker or more colored-toward-halo than
|
|
424
|
+
the same text outside the diagram, the halo is too wide.
|
|
425
|
+
- **Labels inside skewed or rotated shapes sit in the shape's true
|
|
426
|
+
interior, not its bounding box.** A parallelogram, isometric face, or
|
|
427
|
+
rotated rect has an interior offset from its bounding box, so a
|
|
428
|
+
box-aligned (e.g. left-aligned) label spills past the slanted edge.
|
|
429
|
+
Inset the label to fall inside the actual shape — account for the
|
|
430
|
+
skew/rotation offset at the label's vertical position — or place it
|
|
431
|
+
outside the shape with a short leader. This is the usual failure in the
|
|
432
|
+
**stacked-layers idiom** (offset parallelograms implying z-order), where
|
|
433
|
+
per-layer labels left-aligned to the container both overflow the lower
|
|
434
|
+
layers and get crossed by the neighbouring layer's edge. Prefer
|
|
435
|
+
labelling each layer in its own un-overlapped region, or to the side of
|
|
436
|
+
the stack.
|
|
437
|
+
- **Arrow labels sit adjacent to the arrow's midpoint** (typically
|
|
438
|
+
within ~10-15px above or beside the line they describe). A label
|
|
439
|
+
floating at the diagram's edge that readers have to trace back to an
|
|
440
|
+
arrow is broken — readers will misread.
|
|
441
|
+
- **Avoid long curves that traverse the diagram** to connect a
|
|
442
|
+
component on one side to one on the other. If A and D need a labeled
|
|
443
|
+
connection across a multi-component layout, prefer reordering boxes
|
|
444
|
+
so A and D are adjacent, numbered step badges next to each
|
|
445
|
+
participant that the caption ties together, or a short
|
|
446
|
+
labeled-channel notation — rather than one curve crossing multiple
|
|
447
|
+
unrelated elements.
|
|
448
|
+
- **Differentiate diagram shapes by geometry first, by fill semantics
|
|
449
|
+
second.** Geometry (diamond = decision, rect = step, oval =
|
|
450
|
+
start/end, parallelogram = data) carries the role unambiguously.
|
|
451
|
+
Fill semantics (accent-soft for highlighted path, warn-soft for
|
|
452
|
+
fallthrough) carry meaning. Resist introducing additional neutral-tint
|
|
453
|
+
tiers (a slightly-lighter grey to mark "decision shapes are different
|
|
454
|
+
from boxes") — when geometry already differentiates, an additional
|
|
455
|
+
luminance tier adds no information and creates fragility: small RGB
|
|
456
|
+
deltas survive native browser rendering but can be flattened or
|
|
457
|
+
inverted inconsistently by dark-mode extensions, accessibility
|
|
458
|
+
plugins, or printing.
|
|
459
|
+
|
|
460
|
+
### Plan architecture diagrams are not directional sketches
|
|
461
|
+
|
|
462
|
+
Do not add hedging captions or section preambles to plan SVG diagrams —
|
|
463
|
+
phrases like "directional guidance for review, not implementation
|
|
464
|
+
specification" do not belong on plan diagrams or on unit-card
|
|
465
|
+
technical-design subsections. Plan diagrams render the same authoritative
|
|
466
|
+
content as the surrounding prose; the prose-is-authoritative rule
|
|
467
|
+
already governs disagreement. Hedging language is reserved for the
|
|
468
|
+
wireframe affordance below, which carries a *required* directional
|
|
469
|
+
caption because the wireframe is explicitly NOT a spec.
|
|
470
|
+
|
|
471
|
+
## Wireframe mockups (requirements docs only)
|
|
472
|
+
|
|
473
|
+
When a brainstorm requirement describes a user-facing visual surface (UI
|
|
474
|
+
feature, screen layout, screen flow, component placement), the HTML
|
|
475
|
+
rendering may include a wireframe mockup. The trigger is the
|
|
476
|
+
**requirement**, not the document: any requirement (or requirements group)
|
|
477
|
+
with a UI/layout shape can carry a wireframe, whether or not the brainstorm
|
|
478
|
+
as a whole is "a visual product" — a backend-heavy brainstorm with one
|
|
479
|
+
screen change still earns a wireframe for that requirement. It still applies
|
|
480
|
+
to brainstorm **requirements** output — the requirements-only unified plan
|
|
481
|
+
`ce-brainstorm` writes (now under `docs/plans/`), not an implementation-ready
|
|
482
|
+
plan (`ce-plan`'s enriched output) — and only to UI-shaped requirements — a
|
|
483
|
+
non-visual requirement (API design, data model, agent workflow,
|
|
484
|
+
infrastructure) takes a conceptual diagram instead, not a
|
|
485
|
+
wireframe.
|
|
486
|
+
|
|
487
|
+
When a wireframe is included:
|
|
488
|
+
|
|
489
|
+
- **Fidelity ceiling: wireframe, not mockup.** Gray boxes for layout
|
|
490
|
+
regions, text labels for content placeholders, intentional placeholder
|
|
491
|
+
copy (`[Product name]`, `[CTA label]`, `[user avatar]`). No
|
|
492
|
+
pixel-perfect colors, no exact typography choices, no specific
|
|
493
|
+
component-library references. The wireframe communicates spatial
|
|
494
|
+
arrangement and structure, not visual style.
|
|
495
|
+
- **Static only.** Inline SVG or simple HTML/CSS for layout. No JS
|
|
496
|
+
interaction, no working form fields, no state changes, no live data.
|
|
497
|
+
- **Anti-padding.** One wireframe per distinct visual concept.
|
|
498
|
+
- **Mandatory directional caption.** Every wireframe carries an explicit
|
|
499
|
+
"directional, not the spec" note adjacent to it. Required wording (or
|
|
500
|
+
close paraphrase): *"Directional only — illustrates the intended
|
|
501
|
+
user-facing shape. Exact colors, spacing, copy, and component choices
|
|
502
|
+
are placeholders for review, not requirements."*
|
|
503
|
+
|
|
504
|
+
Without this caption the wireframe risks being read as a binding visual
|
|
505
|
+
spec, which the affordance is explicitly designed to avoid.
|
|
506
|
+
|
|
507
|
+
## Affordance idioms
|
|
508
|
+
|
|
509
|
+
Common HTML affordances the agent can reach for when content benefits.
|
|
510
|
+
These are examples, not requirements — the agent picks what each
|
|
511
|
+
artifact's content warrants. Other affordances not listed here are
|
|
512
|
+
fine when the content suggests them.
|
|
513
|
+
|
|
514
|
+
- **Sticky TOC sidebar with active-section indicator** — available when
|
|
515
|
+
the agent judges navigation will materially help and the
|
|
516
|
+
implementation is reliable: two-column layout on desktop, collapsed
|
|
517
|
+
to top-of-page on mobile, paired with a small inline
|
|
518
|
+
`IntersectionObserver` script that toggles `.active` on the matching
|
|
519
|
+
nav anchor. Trade-off: a broken sticky TOC (layout collisions,
|
|
520
|
+
active-section state drift, dark-mode CSS issues) is worse than a
|
|
521
|
+
static top-of-doc TOC. For most long docs, default-closed `<details>`
|
|
522
|
+
on repeating cards (see Implementation Units anatomy) already cuts
|
|
523
|
+
the visible scroll length enough that a static TOC works — reach for
|
|
524
|
+
sticky only when collapsibles alone don't solve the navigation
|
|
525
|
+
problem.
|
|
526
|
+
- **Within-section sub-nav** for sections containing 6+ repeating cards
|
|
527
|
+
(Implementation Units, KTDs, Risks at large counts). A short list of
|
|
528
|
+
card-anchor links (`<ul>` of `<a href="#u1">U1. ...</a>`) rendered at
|
|
529
|
+
the top of the section gives readers a jump table — no JS needed.
|
|
530
|
+
Lower-complexity alternative to the sticky TOC for the specific case
|
|
531
|
+
of long card sections.
|
|
532
|
+
- **Eyebrow labels** (small-caps tag above section titles) for
|
|
533
|
+
editorial polish, especially when section titles are narrative
|
|
534
|
+
rather than literal.
|
|
535
|
+
- **Stats strip** at the top of the doc when the artifact has 3+
|
|
536
|
+
quantifiable signals worth surfacing at a glance.
|
|
537
|
+
- **`<details>` + `<summary>`** for collapsible secondary content
|
|
538
|
+
inside repeating cards. All collapsibles start closed — `open`
|
|
539
|
+
attribute should not appear on any `<details>` inside repeating
|
|
540
|
+
cards by default.
|
|
541
|
+
- **Side-by-side columns** for parallel content (Request / Response,
|
|
542
|
+
Before / After, Two alternatives).
|
|
543
|
+
- **Tinted callout cards** for content that is "different in kind"
|
|
544
|
+
(Deferred, Open Questions, advisory notes, unit-level execution notes)
|
|
545
|
+
— a subtle full-card background tint plus a colored eyebrow/label
|
|
546
|
+
communicates kind at a glance. Avoid a colored stripe on one edge; tint
|
|
547
|
+
the whole card instead.
|
|
548
|
+
|
|
549
|
+
## Agent-consumability rules
|
|
550
|
+
|
|
551
|
+
Downstream agents that read HTML today (`ce-work`, `ce-doc-review` in
|
|
552
|
+
DOM-safe-or-report-only mode, a skill re-reading its own prior artifact on a resume run,
|
|
553
|
+
future consumers) reason over the HTML as text — the way they reason over
|
|
554
|
+
markdown, not via DOM extraction or a script-style parse. `ce-doc-review`
|
|
555
|
+
uses this consumable structure to produce findings and may mutate only through the FN-7149 DOM-safe helper (see
|
|
556
|
+
opening note).
|
|
557
|
+
|
|
558
|
+
These rules are why such a consumer can locate one item (a single
|
|
559
|
+
requirement, unit, idea, or other ID-bearing entry) and reason over it from
|
|
560
|
+
source alone — its title, every labeled field, and any diagram's meaning —
|
|
561
|
+
with no hidden machine-readable copy to fall back on. The semantic structure
|
|
562
|
+
*is* the extraction contract: it is what makes the single-source-of-truth
|
|
563
|
+
invariant (no `data-*` or JSON metadata mirror) safe rather than lossy.
|
|
564
|
+
Weakening it — `<article>` item boundaries collapsed into `<div>` soup, a
|
|
565
|
+
field label demoted to an attribute, one item's content scattered across
|
|
566
|
+
distant parts of the doc — breaks that reasoning even when the rendered page
|
|
567
|
+
looks identical. Compose so semantic understanding is reachable in source:
|
|
568
|
+
|
|
569
|
+
- **Use semantic HTML over `<div>` soup.** `<article>` per unit card,
|
|
570
|
+
`<dl>` for metadata pairs, `<table>` for tabular content, `<details>`
|
|
571
|
+
/ `<summary>` for collapsibles, `<section>` for top-level doc
|
|
572
|
+
sections. Structure markers carry meaning to a text-reading agent.
|
|
573
|
+
- **Render field labels as visible text, not as attributes.** Emit
|
|
574
|
+
`<dt>GOAL</dt><dd>...</dd>`, not `<dd data-field="goal">...</dd>`.
|
|
575
|
+
The label is the semantic anchor.
|
|
576
|
+
- **Keep U-IDs, R-IDs, and similar as visible text** in headings and
|
|
577
|
+
table cells, not only as `id=""` attributes. The agent finds "U1." in
|
|
578
|
+
source the same way it finds "U1." in markdown.
|
|
579
|
+
- **Match section heading vocabulary to what the section contract
|
|
580
|
+
defines.** When the section contract says "Implementation Units," the
|
|
581
|
+
HTML heading is "Implementation Units" — not "How we'll build it,"
|
|
582
|
+
even if the narrative version reads better. Section heading
|
|
583
|
+
vocabulary is the contract downstream consumers grep for. (Editorial
|
|
584
|
+
re-titles can appear as eyebrow labels, sub-headings, or visual
|
|
585
|
+
framing — but the load-bearing section heading matches the contract
|
|
586
|
+
name.)
|
|
587
|
+
- **All semantic content lives in actual HTML text.** No CSS `::before
|
|
588
|
+
{ content: "..." }` carrying meaning, no background images as
|
|
589
|
+
content, no semantic info that only renders. Whatever the agent sees
|
|
590
|
+
in source is what it knows.
|
|
591
|
+
- **Stable structure is the public API.** Element types, the ID and
|
|
592
|
+
label scheme, and the field-label vocabulary do not break across
|
|
593
|
+
versions. Visual styling can change freely.
|
|
594
|
+
|
|
595
|
+
### Canonical checklist representation
|
|
596
|
+
|
|
597
|
+
<!--
|
|
598
|
+
FNXC:CompoundEngineering 2026-06-28-08:30:
|
|
599
|
+
FN-7159 defines one stable HTML checklist shape so ce-doc-review can DOM-safely repair malformed checklist markup instead of leaving all HTML checklist hygiene report-only. The checked state must be visible text, not an attribute-only fact, because downstream CE consumers read source text as the public API.
|
|
600
|
+
-->
|
|
601
|
+
|
|
602
|
+
Use exactly this shape for checklist content in CE HTML artifacts:
|
|
603
|
+
|
|
604
|
+
```html
|
|
605
|
+
<ul class="ce-checklist" aria-label="Checklist">
|
|
606
|
+
<li class="ce-checklist-item"><span class="ce-checklist-state">[ ]</span> <span class="ce-checklist-label">Unchecked item label</span></li>
|
|
607
|
+
<li class="ce-checklist-item"><span class="ce-checklist-state">[x]</span> <span class="ce-checklist-label">Checked item label</span></li>
|
|
608
|
+
</ul>
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
- The container is a `<ul class="ce-checklist" aria-label="Checklist">`. An empty checklist is this same container with zero `<li>` children; do not invent an alternate empty-state wrapper.
|
|
612
|
+
- Each item is exactly one direct `<li class="ce-checklist-item">` child containing exactly two visible spans in order: `<span class="ce-checklist-state">[ ]</span>` or `<span class="ce-checklist-state">[x]</span>`, then one ASCII space text node, then `<span class="ce-checklist-label">…</span>`.
|
|
613
|
+
- The checked state is the visible text `[ ]` for unchecked or `[x]` for checked. Attribute-only state (`checked`, `aria-checked`, `data-checked`, CSS-generated checkmarks, icon-only checkmarks) is not canonical because semantic state must be readable in source text.
|
|
614
|
+
- The label span contains the item label as visible text. Do not move label meaning into `title`, `aria-label`, `data-*`, SVG, or CSS. Inline semantic text markup inside the label is allowed only when it preserves the same visible words and does not carry checklist state.
|
|
615
|
+
- Mixed-state checklists are represented by mixing `[ ]` and `[x]` item state spans. The item order is document order and is stable.
|
|
616
|
+
- Already-canonical checklists are not rewritten. This exact element/class/state vocabulary is the public API for downstream consumers and DOM-safe repair; visual CSS may style it, but structure and visible state markers must remain stable across versions.
|
|
617
|
+
|
|
618
|
+
For `ce-doc-review` DOM-safe repair, a checklist is **provable** only when the existing HTML is already this canonical shape or one of these unambiguous malformed variants whose canonical form can be derived without judgment:
|
|
619
|
+
|
|
620
|
+
- Raw markdown checklist lines left as visible HTML body text, using `- [ ] label`, `- [x] label`, or `- [X] label` on one or more consecutive lines.
|
|
621
|
+
- A `<ul>` or `<ol>` whose every direct `<li>` begins with visible `[ ]`, `[x]`, or `[X]` text followed by the item label.
|
|
622
|
+
- A `<ul>` or `<ol>` whose every direct `<li>` has an `<input type="checkbox">` as its first non-whitespace child, with `checked` preserving checked state and the remaining visible text preserving the label.
|
|
623
|
+
|
|
624
|
+
Anything else is malformed-or-ambiguous and stays report-only: ordinary lists, partial checklist lists, icon-only state, labels split across unrelated DOM regions, mixed checklist/non-checklist children, missing labels, duplicate hidden state copies that disagree with visible state, or content whose parse/serialize round trip is unstable. Repair may normalize only structure and visible state markers; it must not add, drop, reorder, or reword items.
|
|
625
|
+
|
|
626
|
+
## Post-compose audit
|
|
627
|
+
|
|
628
|
+
Before returning the artifact, scan it for common slips:
|
|
629
|
+
|
|
630
|
+
- **Single self-contained file.** No companion `.css` / `.js` / `.svg`.
|
|
631
|
+
- **No hidden machine-readable metadata copy.** No
|
|
632
|
+
`<script type="application/json">` frontmatter block, no `data-*`
|
|
633
|
+
attributes mirroring visible values, **no `<meta name="created">` /
|
|
634
|
+
`<meta name="origin">` etc. in `<head>`
|
|
635
|
+
duplicating the visible header**. Metadata lives in visible text;
|
|
636
|
+
one source of truth per value.
|
|
637
|
+
- **All stable IDs** appear as both `id=""` and visible text.
|
|
638
|
+
- **Section heading vocabulary** matches the section contract names
|
|
639
|
+
(downstream agents grep these).
|
|
640
|
+
- **Source / composition signal** is present as a visible footer at
|
|
641
|
+
the bottom of the doc (composition timestamp + source identifier).
|
|
642
|
+
- **Repeating cards with 3+ instances put secondary content inside
|
|
643
|
+
default-closed `<details>`.** Fully-expanded unit cards in a long
|
|
644
|
+
Implementation Units section is a failure mode — the reader can't see
|
|
645
|
+
the unit list at a glance. Verify by skimming the rendered units:
|
|
646
|
+
each `<article>` should render as its ID + title + metadata strip
|
|
647
|
+
with collapsibles below, not as one long block.
|
|
648
|
+
- **Within-section sub-nav** is present for sections with 6+ repeating
|
|
649
|
+
cards.
|
|
650
|
+
- **Body `<strong>`** is not colored with accent palette.
|
|
651
|
+
- **No one-edge colored accent** (a colored stripe/arc on a single side)
|
|
652
|
+
on chips, pills, or callout cards — differentiate by uniform fill +
|
|
653
|
+
colored eyebrow/label instead. A one-sided stripe reads as
|
|
654
|
+
broken/unintentional; chips in a row must be a uniform visual set.
|
|
655
|
+
- **`<details>`** inside repeating cards have no `open` attribute.
|
|
656
|
+
- **Diagram labels** are legible — no arrow paths crossing text,
|
|
657
|
+
halo width appropriate for font size.
|
|
658
|
+
- **Diagrams complement prose, not replace it.** Every relationship a
|
|
659
|
+
diagram conveys is also present in the surrounding IDed prose; no
|
|
660
|
+
content lives only in an SVG.
|
|
661
|
+
- **No JS framework runtimes** included. Small inline `<script>` for
|
|
662
|
+
active-section TOC tracking or anchor-permalink behavior is the only
|
|
663
|
+
acceptable JS.
|
|
664
|
+
- **Each heading level** is visually distinct from others and from
|
|
665
|
+
inline bold.
|
|
666
|
+
- **No template placeholders** (`{skill}`, `<value>`, `[plan title]`)
|
|
667
|
+
leaked into output.
|
|
668
|
+
- **No process exhaust** callouts in the artifact.
|