@phuc1403/musketeer 0.9.0 → 0.11.0
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/INSTALLATION.md +53 -52
- package/README.md +1 -1
- package/bin/musketeer.js +168 -168
- package/manifest.json +19 -2
- package/package.json +48 -48
- package/src/dotnet-scaffold-copier.js +79 -79
- package/src/provisioner/detect.js +93 -93
- package/src/self-update.js +77 -77
- package/template/.claude/agents/git-manager.md +18 -18
- package/template/.claude/agents/hallmark-auditor.md +78 -78
- package/template/.claude/agents/researcher.md +33 -33
- package/template/.claude/hooks/block-unsafe-adr-title.cjs +85 -85
- package/template/.claude/hooks/init-adr-dir.cjs +173 -173
- package/template/.claude/hooks/inject-adr-flags.cjs +94 -94
- package/template/.claude/hooks/lib/adr/command-scan.cjs +115 -115
- package/template/.claude/hooks/lib/characteristics/checker.cjs +357 -357
- package/template/.claude/hooks/lib/git-info-cache.cjs +191 -191
- package/template/.claude/hooks/sync-adr-toc.cjs +146 -146
- package/template/.claude/hooks/usage-quota-cache-refresh.cjs +166 -166
- package/template/.claude/hooks/validate-characteristics-hook.cjs +66 -66
- package/template/.claude/hooks/validate-cml-hook.js +146 -145
- package/template/.claude/skills/adr-writer/SKILL.md +48 -48
- package/template/.claude/skills/adr-writer/references/adr-example.md +35 -35
- package/template/.claude/skills/architecture-characteristic-writer/SKILL.md +215 -215
- package/template/.claude/skills/architecture-characteristic-writer/assets/worksheet-template.md +29 -29
- package/template/.claude/skills/architecture-characteristic-writer/references/characteristics-catalog.md +40 -40
- package/template/.claude/skills/architecture-characteristic-writer/scripts/ranking-table.cjs +171 -171
- package/template/.claude/skills/context-map/SKILL.md +80 -80
- package/template/.claude/skills/context-map/example.cml +106 -106
- package/template/.claude/skills/context-map/reference/Bounded Context/Bounded Context.md +40 -40
- package/template/.claude/skills/context-map/reference/Bounded Context/businessModel.md +5 -5
- package/template/.claude/skills/context-map/reference/Bounded Context/domainVisionStatement.md +2 -2
- package/template/.claude/skills/context-map/reference/Bounded Context/evolution.md +5 -5
- package/template/.claude/skills/context-map/reference/Bounded Context/implementationTechnology.md +1 -1
- package/template/.claude/skills/context-map/reference/Bounded Context/implements.md +1 -1
- package/template/.claude/skills/context-map/reference/Bounded Context/knowledgeLevel.md +4 -4
- package/template/.claude/skills/context-map/reference/Bounded Context/realizes.md +9 -9
- package/template/.claude/skills/context-map/reference/Bounded Context/refines.md +10 -10
- package/template/.claude/skills/context-map/reference/Bounded Context/responsibilities.md +26 -26
- package/template/.claude/skills/context-map/reference/Bounded Context/type.md +23 -23
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Anticorruption Layer.md +5 -5
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Bounded Context Relationship.md +12 -12
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Conformist.md +5 -5
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Customer-Supplier (C-S).md +22 -22
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Open Host Service.md +4 -4
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Partnership (P).md +13 -13
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Published Language.md +4 -4
- package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Shared Kernel (SK).md +12 -12
- package/template/.claude/skills/context-map/reference/Context Map.md +62 -62
- package/template/.claude/skills/context-map/reference/Domain/Domain.md +30 -30
- package/template/.claude/skills/context-map/reference/Domain/supports.md +33 -33
- package/template/.claude/skills/context-map/reference/Domain/type.md +3 -3
- package/template/.claude/skills/context-map/reference/Semantic Rules.md +32 -32
- package/template/.claude/skills/hallmark/SKILL.md +552 -552
- package/template/.claude/skills/hallmark/references/anti-patterns.md +412 -412
- package/template/.claude/skills/hallmark/references/assets.md +406 -406
- package/template/.claude/skills/hallmark/references/color.md +95 -95
- package/template/.claude/skills/hallmark/references/component-cookbook.md +256 -256
- package/template/.claude/skills/hallmark/references/components/c1-outlined-chip.md +12 -12
- package/template/.claude/skills/hallmark/references/components/c2-inline-form-as-cta.md +16 -16
- package/template/.claude/skills/hallmark/references/components/c3-typographic-link.md +8 -8
- package/template/.claude/skills/hallmark/references/components/c4-sticky-bottom-bar.md +16 -16
- package/template/.claude/skills/hallmark/references/components/f1-bento-grid.md +20 -20
- package/template/.claude/skills/hallmark/references/components/f2-sticky-scroll-stack.md +20 -20
- package/template/.claude/skills/hallmark/references/components/f3-tabular-spec-sheet.md +11 -11
- package/template/.claude/skills/hallmark/references/components/f4-step-sequence.md +11 -11
- package/template/.claude/skills/hallmark/references/components/f5-annotated-screenshot.md +11 -11
- package/template/.claude/skills/hallmark/references/components/f6-product-card-grid.md +41 -41
- package/template/.claude/skills/hallmark/references/components/ft1-mast-headed.md +13 -13
- package/template/.claude/skills/hallmark/references/components/ft2-inline-rule-single-line.md +10 -10
- package/template/.claude/skills/hallmark/references/components/ft3-index-style-category-list.md +12 -12
- package/template/.claude/skills/hallmark/references/components/ft4-dense-typographic.md +10 -10
- package/template/.claude/skills/hallmark/references/components/ft5-statement.md +21 -21
- package/template/.claude/skills/hallmark/references/components/ft6-letter-close.md +19 -19
- package/template/.claude/skills/hallmark/references/components/ft7-newsletter-first.md +27 -27
- package/template/.claude/skills/hallmark/references/components/ft8-marquee-scroll.md +25 -25
- package/template/.claude/skills/hallmark/references/components/h1-marquee.md +15 -15
- package/template/.claude/skills/hallmark/references/components/h2-split-diptych.md +15 -15
- package/template/.claude/skills/hallmark/references/components/h3-quote-led.md +11 -11
- package/template/.claude/skills/hallmark/references/components/h4-stat-led.md +14 -14
- package/template/.claude/skills/hallmark/references/components/h5-letter-hero.md +11 -11
- package/template/.claude/skills/hallmark/references/components/h6-photographic-fold.md +16 -16
- package/template/.claude/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +27 -27
- package/template/.claude/skills/hallmark/references/components/h8-mockup-split-browser-framed.md +23 -23
- package/template/.claude/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +27 -27
- package/template/.claude/skills/hallmark/references/components/n1-wordmark-2-links.md +12 -12
- package/template/.claude/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +19 -19
- package/template/.claude/skills/hallmark/references/components/n2-floating-chip.md +14 -14
- package/template/.claude/skills/hallmark/references/components/n3-side-rail.md +14 -14
- package/template/.claude/skills/hallmark/references/components/n4-hidden-behind-k.md +9 -9
- package/template/.claude/skills/hallmark/references/components/n5-floating-pill.md +28 -28
- package/template/.claude/skills/hallmark/references/components/n6-newspaper-masthead.md +24 -24
- package/template/.claude/skills/hallmark/references/components/n7-brutal-slab.md +22 -22
- package/template/.claude/skills/hallmark/references/components/n8-terminal-command.md +21 -21
- package/template/.claude/skills/hallmark/references/components/n9-edge-aligned-minimal.md +17 -17
- package/template/.claude/skills/hallmark/references/components/s1-left-margin-numbered.md +15 -15
- package/template/.claude/skills/hallmark/references/components/s2-hanging.md +13 -13
- package/template/.claude/skills/hallmark/references/components/s3-sticky-pinned.md +19 -19
- package/template/.claude/skills/hallmark/references/components/s4-inline-no-break.md +11 -11
- package/template/.claude/skills/hallmark/references/components/s5-bottom-anchored.md +13 -13
- package/template/.claude/skills/hallmark/references/components/t1-pull-quote-with-marginalia.md +12 -12
- package/template/.claude/skills/hallmark/references/components/t2-logo-wall-hairline.md +19 -19
- package/template/.claude/skills/hallmark/references/components/t3-single-huge-quote.md +11 -11
- package/template/.claude/skills/hallmark/references/components/t4-numbered-stat-strip.md +14 -14
- package/template/.claude/skills/hallmark/references/contract.md +24 -24
- package/template/.claude/skills/hallmark/references/copy.md +182 -182
- package/template/.claude/skills/hallmark/references/custom-craft.md +626 -626
- package/template/.claude/skills/hallmark/references/custom-theme.md +329 -329
- package/template/.claude/skills/hallmark/references/design-md.md +116 -116
- package/template/.claude/skills/hallmark/references/export-formats.md +328 -328
- package/template/.claude/skills/hallmark/references/floating-nav.md +89 -89
- package/template/.claude/skills/hallmark/references/genres/atmospheric.md +65 -65
- package/template/.claude/skills/hallmark/references/genres/editorial.md +70 -70
- package/template/.claude/skills/hallmark/references/genres/modern-minimal.md +67 -67
- package/template/.claude/skills/hallmark/references/genres/playful.md +65 -65
- package/template/.claude/skills/hallmark/references/hero-enrichment.md +474 -474
- package/template/.claude/skills/hallmark/references/imagery-kit.md +170 -170
- package/template/.claude/skills/hallmark/references/interaction-and-states.md +207 -207
- package/template/.claude/skills/hallmark/references/layout-and-space.md +111 -111
- package/template/.claude/skills/hallmark/references/macrostructures/01-bento-grid.md +35 -35
- package/template/.claude/skills/hallmark/references/macrostructures/02-long-document.md +34 -34
- package/template/.claude/skills/hallmark/references/macrostructures/03-marquee-hero.md +31 -31
- package/template/.claude/skills/hallmark/references/macrostructures/04-stat-led.md +32 -32
- package/template/.claude/skills/hallmark/references/macrostructures/05-workbench.md +32 -32
- package/template/.claude/skills/hallmark/references/macrostructures/06-conversational-faq.md +33 -33
- package/template/.claude/skills/hallmark/references/macrostructures/07-manifesto.md +32 -32
- package/template/.claude/skills/hallmark/references/macrostructures/08-photographic.md +34 -34
- package/template/.claude/skills/hallmark/references/macrostructures/09-quote-led.md +32 -32
- package/template/.claude/skills/hallmark/references/macrostructures/10-specimen.md +32 -32
- package/template/.claude/skills/hallmark/references/macrostructures/11-catalogue.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/12-letter.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/13-index-first.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/14-narrative-workflow.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/15-split-studio.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/17-type-specimen.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/18-portfolio-grid.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/19-map-diagram.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/20-ecosystem-index.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures/21-component-playground.md +23 -23
- package/template/.claude/skills/hallmark/references/macrostructures.md +89 -89
- package/template/.claude/skills/hallmark/references/microinteractions.md +260 -260
- package/template/.claude/skills/hallmark/references/motion.md +109 -109
- package/template/.claude/skills/hallmark/references/preview-examples.md +49 -49
- package/template/.claude/skills/hallmark/references/responsive.md +138 -138
- package/template/.claude/skills/hallmark/references/slop-test.md +205 -205
- package/template/.claude/skills/hallmark/references/structure.md +164 -164
- package/template/.claude/skills/hallmark/references/study.md +511 -511
- package/template/.claude/skills/hallmark/references/typography.md +243 -243
- package/template/.claude/skills/hallmark/references/verbs/audit.md +25 -25
- package/template/.claude/skills/hallmark/references/verbs/redesign.md +269 -269
- package/template/.claude/skills/hallmark-loop/SKILL.md +105 -105
- package/template/.claude/skills/hallmark-loop/references/auditor-call.md +60 -60
- package/template/.claude/skills/hallmark-loop/references/capture.md +78 -78
- package/template/.claude/skills/hallmark-loop/references/loop-control.md +79 -79
- package/template/.claude/skills/handoff/SKILL.md +15 -15
- package/template/.claude/skills/knowledge-crunching/SKILL.md +94 -94
- package/template/.claude/skills/logical-components/.gitattributes +2 -0
- package/template/.claude/skills/logical-components/SKILL.md +102 -0
- package/template/.claude/skills/logical-components/references/component-classifier-prompt.md +53 -0
- package/template/.claude/skills/logical-components/references/responsibility-agent-prompt.md +67 -0
- package/template/.claude/skills/logical-components/references/responsibility-verifier-prompt.md +39 -0
- package/template/.claude/skills/logical-components/scripts/Directory.Build.props +7 -0
- package/template/.claude/skills/logical-components/scripts/Directory.Packages.props +8 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/BatchPlanning.cs +69 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/BatchesCommand.cs +39 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/CandidatesCommand.cs +70 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/CitableSource.cs +39 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/Citation.cs +37 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ClassifyBatchesCommand.cs +65 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ClassifyMergeCommand.cs +187 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ComponentDiscovery.cs +166 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ComponentRule.cs +87 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ComponentsFile.cs +83 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/CouplingResolver.cs +196 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/DisplayName.cs +14 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/EdgeExtraction.cs +111 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ExtractCommand.cs +72 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ExtractConfig.cs +79 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/LogicalComponents.csproj +15 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/MarkdownRenderer.cs +73 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/MemberUseResolution.cs +203 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/MemberUses.cs +155 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/PortResolution.cs +75 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/Program.cs +27 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ProjectFilters.cs +76 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/PruneCommand.cs +132 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/RenderCommand.cs +173 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ResponsibilityBatches.cs +84 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/ResponsibilityValidation.cs +178 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/SeamDispatch.cs +59 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/SymbolNames.cs +53 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/TypeMap.cs +75 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/WalkRoots.cs +63 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents/WorkspaceLoader.cs +227 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/AssignIdsTests.cs +41 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/BatchPlanningTests.cs +82 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/CandidatesCommandTests.cs +34 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/CitationTests.cs +42 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/ClassifyCommandsTests.cs +176 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/ComponentDiscoveryTests.cs +190 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/CouplingExtractionTests.cs +174 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/DisplayNameTests.cs +17 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/ExtractConfigTests.cs +72 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/FixturePaths.cs +32 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/LogicalComponents.Tests.csproj +23 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/MarkdownRendererTests.cs +50 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/ProjectFiltersTests.cs +65 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/PruneCommandTests.cs +119 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/RenderCommandTests.cs +162 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/RenderGoldenTests.cs +34 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/RenderTestData.cs +49 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/ResponsibilityValidationTests.cs +227 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/SampleAppWorkspace.cs +27 -0
- package/template/.claude/skills/logical-components/scripts/LogicalComponents.Tests/WorkspaceLoaderTests.cs +87 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/BrokenApp/src/Broken.Application/Broken.Application.csproj +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/BrokenApp/src/Broken.Application/Broken.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/MultiTargetApp/MultiTargetApp.slnx +6 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/MultiTargetApp/src/Legacy.FSharp/Legacy.FSharp.fsproj +8 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/MultiTargetApp/src/Legacy.FSharp/Library.fs +5 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/MultiTargetApp/src/Multi.Application/Multi.Application.csproj +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/MultiTargetApp/src/Multi.Application/Scheduling.cs +14 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/NoSolutionApp/src/Solo.Application/Solo.Application.csproj +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/NoSolutionApp/src/Solo.Application/SoloGreeting.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/NoSolutionApp/src/Solo.Application.Tests/FakeGreeting.cs +6 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/NoSolutionApp/src/Solo.Application.Tests/Solo.Application.Tests.csproj +11 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/RenderGolden/components.json +63 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/RenderGolden/expected.md +28 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/RenderGolden/repo/src/App/OrderAcceptance.cs +16 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/RenderGolden/repo/src/Infra/OrderQueue.cs +10 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/RenderGolden/resp/batch-01.json +18 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/SampleApp.slnx +10 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/logical-components.json +78 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/CandidateCases.cs +37 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/CouplingCases.cs +33 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/DependencyInjection.cs +18 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/EdgeCases.cs +63 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/LoudNotifying.Base.cs +5 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/LoudNotifying.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderAcceptance.cs +17 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderOptions.cs +9 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderRejectedException.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderRequest.cs +4 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderRunning.cs +18 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/OrderValidation.cs +6 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/Ports.cs +19 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/PriceRules.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/ReceiptPrinting.Totals.cs +6 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/ReceiptPrinting.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/ReviewCases.cs +107 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/ReviewFixCases.cs +143 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/RunClock.cs +12 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/Sample.Application.csproj +10 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Application/SeeThroughCases.cs +89 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Billing.Application/OrderRunning.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Billing.Application/Sample.Billing.Application.csproj +11 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/ForwardedNotifier.cs +8 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/InfrastructureDependencyInjection.cs +16 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/Mailer.cs +6 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/OrderQueue.cs +11 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/QueueEntry.cs +4 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/QueueStore.cs +8 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/ReviewCases.cs +35 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/ReviewFixCases.cs +13 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/Sample.Infrastructure.csproj +13 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/SeeThroughCases.cs +18 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/src/Sample.Infrastructure/UnreachedPlumbing.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/tests/Sample.Tests/FakeOrderQueue.cs +11 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SampleApp/tests/Sample.Tests/Sample.Tests.csproj +11 -0
- package/template/.claude/skills/logical-components/scripts/fixtures/SharedOutsideRepo/SharedClock.cs +7 -0
- package/template/.claude/skills/logical-components/scripts/global.json +5 -0
- package/template/.claude/skills/logical-components/scripts/smoke-sample.sh +26 -0
- package/template/.claude/skills/research/SKILL.md +69 -69
- package/template/.claude/skills/tdd/SKILL.md +142 -142
- package/template/.claude/skills/tdd/deep-modules.md +15 -15
- package/template/.claude/skills/tdd/interface-design.md +31 -31
- package/template/.claude/skills/tdd/mocking.md +59 -59
- package/template/.claude/skills/tdd/refactoring.md +10 -10
- package/template/.claude/skills/tdd/tests.md +61 -61
- package/template/.claude/statusline.cjs +100 -37
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
namespace Sample.Application;
|
|
2
|
+
|
|
3
|
+
// A method parameter of interface type is called: an edge to its implementation.
|
|
4
|
+
public interface IDrawing
|
|
5
|
+
{
|
|
6
|
+
string Title();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
public sealed class TitleReading
|
|
10
|
+
{
|
|
11
|
+
public string Read(IDrawing drawing) => drawing.Title();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// A call on a returned object: an edge to the implementations of what is returned.
|
|
15
|
+
public interface IRecovery
|
|
16
|
+
{
|
|
17
|
+
void Settle();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public sealed class RecoveryRouting(IEnumerable<IRecovery> recoveries)
|
|
21
|
+
{
|
|
22
|
+
public IRecovery Find() => recoveries.First();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public sealed class CrashSettling(RecoveryRouting routes)
|
|
26
|
+
{
|
|
27
|
+
public void Settle() => routes.Find().Settle();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// A record property that calls a component: reading that property couples the reader; reading another does not.
|
|
31
|
+
public sealed record Job(int Id, string Callback)
|
|
32
|
+
{
|
|
33
|
+
public string CallbackTarget => CallbackNormalizing.Normalize(Callback);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public static class CallbackNormalizing
|
|
37
|
+
{
|
|
38
|
+
public static string Normalize(string url) => url.Trim();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public sealed class JobReporting
|
|
42
|
+
{
|
|
43
|
+
public string Target(Job job) => job.CallbackTarget;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public sealed class JobCounting
|
|
47
|
+
{
|
|
48
|
+
public int Count(Job job) => job.Id;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// A helper that calls a component: the helper's caller depends on the component; the helper is no node.
|
|
52
|
+
public sealed class LabelFormat(RunClock clock)
|
|
53
|
+
{
|
|
54
|
+
public string Stamp(string text) => $"{text} {clock.Elapsed()}";
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public sealed class Labelling(LabelFormat format)
|
|
58
|
+
{
|
|
59
|
+
public string Label(string text) => format.Stamp(text);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Only constructing a helper runs its field initializers: they count.
|
|
63
|
+
public sealed class StampedText
|
|
64
|
+
{
|
|
65
|
+
private readonly string _stamp = PriceRules.Check(1m) ? "ok" : "no";
|
|
66
|
+
|
|
67
|
+
public string Apply(string text) => text + _stamp;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public sealed class Stamping
|
|
71
|
+
{
|
|
72
|
+
public object Make() => new StampedText();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Helpers calling each other in a cycle: the walk ends, and what they reach is reached once.
|
|
76
|
+
public static class PingText
|
|
77
|
+
{
|
|
78
|
+
public static string Ping(int n) => n > 0 ? PongText.Pong(n - 1) : 1m.AsMoney();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public static class PongText
|
|
82
|
+
{
|
|
83
|
+
public static string Pong(int n) => PingText.Ping(n);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
public sealed class Echoing
|
|
87
|
+
{
|
|
88
|
+
public string Echo() => PingText.Ping(3);
|
|
89
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
<PropertyGroup>
|
|
3
|
+
<TargetFramework>net10.0</TargetFramework>
|
|
4
|
+
<Nullable>enable</Nullable>
|
|
5
|
+
<ImplicitUsings>enable</ImplicitUsings>
|
|
6
|
+
</PropertyGroup>
|
|
7
|
+
<ItemGroup>
|
|
8
|
+
<!-- A source file outside the repo root: exercises the out-of-repo declaration rule. -->
|
|
9
|
+
<Compile Include="../../../SharedOutsideRepo/SharedClock.cs" Link="SharedClock.cs" />
|
|
10
|
+
</ItemGroup>
|
|
11
|
+
</Project>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
using Microsoft.Extensions.DependencyInjection;
|
|
2
|
+
using Sample.Application;
|
|
3
|
+
|
|
4
|
+
namespace Sample.Infrastructure;
|
|
5
|
+
|
|
6
|
+
// The three registration styles seen in real code: instance, factory, forwarding.
|
|
7
|
+
public static class InfrastructureDependencyInjection
|
|
8
|
+
{
|
|
9
|
+
public static IServiceCollection AddSampleInfrastructure(this IServiceCollection services)
|
|
10
|
+
{
|
|
11
|
+
services.AddSingleton<IOrderQueue>(new OrderQueue());
|
|
12
|
+
services.AddSingleton(sp => new ForwardedNotifier(new Mailer()));
|
|
13
|
+
services.AddSingleton<INotifier>(sp => sp.GetRequiredService<ForwardedNotifier>());
|
|
14
|
+
return services;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
using Sample.Application;
|
|
2
|
+
|
|
3
|
+
namespace Sample.Infrastructure;
|
|
4
|
+
|
|
5
|
+
// Implements a port, and reaches QueueStore only from within Infrastructure.
|
|
6
|
+
public sealed class OrderQueue : IOrderQueue
|
|
7
|
+
{
|
|
8
|
+
private readonly QueueStore _store = new QueueStore();
|
|
9
|
+
|
|
10
|
+
public void Enqueue(OrderRequest request) => _store.Add(new QueueEntry(request.Id));
|
|
11
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
using Sample.Application;
|
|
2
|
+
|
|
3
|
+
namespace Sample.Infrastructure;
|
|
4
|
+
|
|
5
|
+
public sealed class OrderRequestHandler : IHandler<OrderRequest>
|
|
6
|
+
{
|
|
7
|
+
public void Handle(OrderRequest item)
|
|
8
|
+
{
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Implements a different construction of the same generic port: never reached from IHandler<OrderRequest>.
|
|
13
|
+
public sealed class TextHandler : IHandler<string>
|
|
14
|
+
{
|
|
15
|
+
public void Handle(string item)
|
|
16
|
+
{
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Open generic: implements every construction, so it is reached from IHandler<OrderRequest>.
|
|
21
|
+
public sealed class LoggingHandler<T> : IHandler<T>
|
|
22
|
+
{
|
|
23
|
+
public void Handle(T item) => Console.WriteLine(item);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Implements the interface whose static member is called: still not reached by that call.
|
|
27
|
+
public sealed class DefaultPricing : IPricingDefaults
|
|
28
|
+
{
|
|
29
|
+
public decimal Rate() => 2m;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public sealed class DiskStorage : StorageBase
|
|
33
|
+
{
|
|
34
|
+
public override void Save(string text) => File.WriteAllText("out.txt", text);
|
|
35
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
using Sample.Application;
|
|
2
|
+
|
|
3
|
+
namespace Sample.Infrastructure;
|
|
4
|
+
|
|
5
|
+
public sealed class PingHandling : ICommandHandler<Ping>
|
|
6
|
+
{
|
|
7
|
+
public void Handle(Ping command) => Console.WriteLine(command.N);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
public sealed class PongHandling : ICommandHandler<Pong>
|
|
11
|
+
{
|
|
12
|
+
public void Handle(Pong command) => Console.WriteLine(command.N);
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
<PropertyGroup>
|
|
3
|
+
<TargetFramework>net10.0</TargetFramework>
|
|
4
|
+
<Nullable>enable</Nullable>
|
|
5
|
+
<ImplicitUsings>enable</ImplicitUsings>
|
|
6
|
+
</PropertyGroup>
|
|
7
|
+
<ItemGroup>
|
|
8
|
+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.0" />
|
|
9
|
+
</ItemGroup>
|
|
10
|
+
<ItemGroup>
|
|
11
|
+
<ProjectReference Include="../Sample.Application/Sample.Application.csproj" />
|
|
12
|
+
</ItemGroup>
|
|
13
|
+
</Project>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
using Sample.Application;
|
|
2
|
+
|
|
3
|
+
namespace Sample.Infrastructure;
|
|
4
|
+
|
|
5
|
+
public sealed class DwgDrawing : IDrawing
|
|
6
|
+
{
|
|
7
|
+
public string Title() => "drawing";
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
public sealed class ExportRecovery : IRecovery
|
|
11
|
+
{
|
|
12
|
+
public void Settle() => Console.WriteLine("export settled");
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public sealed class ImportRecovery : IRecovery
|
|
16
|
+
{
|
|
17
|
+
public void Settle() => Console.WriteLine("import settled");
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
using Sample.Application;
|
|
2
|
+
|
|
3
|
+
namespace Sample.Tests;
|
|
4
|
+
|
|
5
|
+
// Test double implementing a port. Test projects are never loaded, so it must never become an edge target.
|
|
6
|
+
public sealed class FakeOrderQueue : IOrderQueue
|
|
7
|
+
{
|
|
8
|
+
public List<OrderRequest> Queued { get; } = [];
|
|
9
|
+
|
|
10
|
+
public void Enqueue(OrderRequest request) => Queued.Add(request);
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
<PropertyGroup>
|
|
3
|
+
<TargetFramework>net10.0</TargetFramework>
|
|
4
|
+
<Nullable>enable</Nullable>
|
|
5
|
+
<ImplicitUsings>enable</ImplicitUsings>
|
|
6
|
+
<IsTestProject>true</IsTestProject>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
<ItemGroup>
|
|
9
|
+
<ProjectReference Include="../../src/Sample.Application/Sample.Application.csproj" />
|
|
10
|
+
</ItemGroup>
|
|
11
|
+
</Project>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Smoke check of the built CLI against the checked-in golden fixture (no LLM involved):
|
|
3
|
+
# batches must plan the fixture, and render must reproduce fixtures/RenderGolden/expected.md exactly.
|
|
4
|
+
# Usage: scripts/smoke-sample.sh (from anywhere; exits non-zero on any difference)
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
8
|
+
golden="$here/fixtures/RenderGolden"
|
|
9
|
+
work="$(mktemp -d)"
|
|
10
|
+
trap 'rm -rf "$work"' EXIT
|
|
11
|
+
|
|
12
|
+
dotnet build "$here/LogicalComponents" -c Release -nologo -v q >/dev/null
|
|
13
|
+
lc=(dotnet "$here/LogicalComponents/bin/Release/net10.0/LogicalComponents.dll")
|
|
14
|
+
|
|
15
|
+
"${lc[@]}" batches --components "$golden/components.json" --agents 9 --out "$work/batches"
|
|
16
|
+
test -f "$work/batches/batch-01.json" && test -f "$work/batches/batch-02.json"
|
|
17
|
+
|
|
18
|
+
"${lc[@]}" render --components "$golden/components.json" --resp "$golden/resp" --repo "$golden/repo" --out "$work/out.md"
|
|
19
|
+
|
|
20
|
+
# Git may check expected.md out with CRLF; render always writes LF.
|
|
21
|
+
if diff <(tr -d '\r' < "$golden/expected.md") "$work/out.md"; then
|
|
22
|
+
echo "smoke: OK"
|
|
23
|
+
else
|
|
24
|
+
echo "smoke: render output differs from expected.md" >&2
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: research
|
|
3
|
-
description: "Research technical solutions and analyze architectures by spawning parallel researcher agents that search the web and cross-reference findings. Use for technology evaluation, best-practices research, solution design, and scalability/security/maintainability analysis."
|
|
4
|
-
license: MIT
|
|
5
|
-
argument-hint: "[topic]"
|
|
6
|
-
metadata:
|
|
7
|
-
author: Phuc Pham
|
|
8
|
-
version: "2.1.1"
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Research
|
|
12
|
-
|
|
13
|
-
## 1. Decompose
|
|
14
|
-
|
|
15
|
-
Break the topic into independent sub-questions. Note recency requirements (how current
|
|
16
|
-
the information must be) and any specific angles the user cares about (security, perf,
|
|
17
|
-
cost, migration path) — these shape both the queries and the final sections.
|
|
18
|
-
|
|
19
|
-
## 2. Gather (parallel agents)
|
|
20
|
-
|
|
21
|
-
For each independent sub-question, dispatch a `researcher` agent via the Agent tool
|
|
22
|
-
(`subagent_type: "researcher"`). Run independent agents in a single message so they execute
|
|
23
|
-
concurrently. Scale the count to the topic's breadth; don't spawn overlapping agents.
|
|
24
|
-
|
|
25
|
-
Give each agent **one** sub-question plus any recency/angle constraints from step 1. The
|
|
26
|
-
agent handles query crafting, source prioritization, and returning findings with URLs.
|
|
27
|
-
Keep synthesis (steps 3–4) in the main agent.
|
|
28
|
-
|
|
29
|
-
## 3. Cross-reference
|
|
30
|
-
|
|
31
|
-
Before synthesizing:
|
|
32
|
-
- **Verify** each significant claim across multiple independent sources.
|
|
33
|
-
- **Check dates** — flag stale information.
|
|
34
|
-
- **Surface conflicts** explicitly rather than silently picking a side.
|
|
35
|
-
- **Flag single-source claims** as unverified; discard or downgrade what fails.
|
|
36
|
-
|
|
37
|
-
## 4. Report
|
|
38
|
-
|
|
39
|
-
Save to the output path if the main agent provided one; otherwise return inline. Cite
|
|
40
|
-
sources throughout. Sacrifice grammar for concision.
|
|
41
|
-
|
|
42
|
-
Adapt the structure to the topic — don't pad with empty sections. A typical shape:
|
|
43
|
-
|
|
44
|
-
```markdown
|
|
45
|
-
# Research: [Topic]
|
|
46
|
-
|
|
47
|
-
## Summary
|
|
48
|
-
[Key findings + recommendation, 1-3 paragraphs]
|
|
49
|
-
|
|
50
|
-
## Findings
|
|
51
|
-
[Organized by sub-question. Add security / performance / cost subsections
|
|
52
|
-
only where they're relevant to this topic.]
|
|
53
|
-
|
|
54
|
-
## Conflicts & Caveats
|
|
55
|
-
[Conflicting or single-source claims, stale info]
|
|
56
|
-
|
|
57
|
-
## Recommendations
|
|
58
|
-
[Actionable: what to do, code examples, pitfalls. Include a comparison if evaluating options.]
|
|
59
|
-
|
|
60
|
-
## References
|
|
61
|
-
[Linked sources]
|
|
62
|
-
|
|
63
|
-
## Open Questions
|
|
64
|
-
[Unresolved items — always include, even if empty.]
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Standards:** accuracy (cross-referenced), currency (prefer last 12 months unless history
|
|
68
|
-
matters), always cite with links. Deliver strategic intelligence that enables a decision,
|
|
69
|
-
not a pile of links.
|
|
1
|
+
---
|
|
2
|
+
name: research
|
|
3
|
+
description: "Research technical solutions and analyze architectures by spawning parallel researcher agents that search the web and cross-reference findings. Use for technology evaluation, best-practices research, solution design, and scalability/security/maintainability analysis."
|
|
4
|
+
license: MIT
|
|
5
|
+
argument-hint: "[topic]"
|
|
6
|
+
metadata:
|
|
7
|
+
author: Phuc Pham
|
|
8
|
+
version: "2.1.1"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Research
|
|
12
|
+
|
|
13
|
+
## 1. Decompose
|
|
14
|
+
|
|
15
|
+
Break the topic into independent sub-questions. Note recency requirements (how current
|
|
16
|
+
the information must be) and any specific angles the user cares about (security, perf,
|
|
17
|
+
cost, migration path) — these shape both the queries and the final sections.
|
|
18
|
+
|
|
19
|
+
## 2. Gather (parallel agents)
|
|
20
|
+
|
|
21
|
+
For each independent sub-question, dispatch a `researcher` agent via the Agent tool
|
|
22
|
+
(`subagent_type: "researcher"`). Run independent agents in a single message so they execute
|
|
23
|
+
concurrently. Scale the count to the topic's breadth; don't spawn overlapping agents.
|
|
24
|
+
|
|
25
|
+
Give each agent **one** sub-question plus any recency/angle constraints from step 1. The
|
|
26
|
+
agent handles query crafting, source prioritization, and returning findings with URLs.
|
|
27
|
+
Keep synthesis (steps 3–4) in the main agent.
|
|
28
|
+
|
|
29
|
+
## 3. Cross-reference
|
|
30
|
+
|
|
31
|
+
Before synthesizing:
|
|
32
|
+
- **Verify** each significant claim across multiple independent sources.
|
|
33
|
+
- **Check dates** — flag stale information.
|
|
34
|
+
- **Surface conflicts** explicitly rather than silently picking a side.
|
|
35
|
+
- **Flag single-source claims** as unverified; discard or downgrade what fails.
|
|
36
|
+
|
|
37
|
+
## 4. Report
|
|
38
|
+
|
|
39
|
+
Save to the output path if the main agent provided one; otherwise return inline. Cite
|
|
40
|
+
sources throughout. Sacrifice grammar for concision.
|
|
41
|
+
|
|
42
|
+
Adapt the structure to the topic — don't pad with empty sections. A typical shape:
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
# Research: [Topic]
|
|
46
|
+
|
|
47
|
+
## Summary
|
|
48
|
+
[Key findings + recommendation, 1-3 paragraphs]
|
|
49
|
+
|
|
50
|
+
## Findings
|
|
51
|
+
[Organized by sub-question. Add security / performance / cost subsections
|
|
52
|
+
only where they're relevant to this topic.]
|
|
53
|
+
|
|
54
|
+
## Conflicts & Caveats
|
|
55
|
+
[Conflicting or single-source claims, stale info]
|
|
56
|
+
|
|
57
|
+
## Recommendations
|
|
58
|
+
[Actionable: what to do, code examples, pitfalls. Include a comparison if evaluating options.]
|
|
59
|
+
|
|
60
|
+
## References
|
|
61
|
+
[Linked sources]
|
|
62
|
+
|
|
63
|
+
## Open Questions
|
|
64
|
+
[Unresolved items — always include, even if empty.]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Standards:** accuracy (cross-referenced), currency (prefer last 12 months unless history
|
|
68
|
+
matters), always cite with links. Deliver strategic intelligence that enables a decision,
|
|
69
|
+
not a pile of links.
|