@autobe/agent 0.30.0-dev.20260315 → 0.30.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/LICENSE +661 -661
- package/lib/constants/AutoBeTemplateFileConstant.d.ts +1 -1
- package/lib/factory/consentFunctionCall.js +4 -4
- package/lib/factory/createAutoBeContext.js +24 -24
- package/lib/factory/createAutoBeMessageContent.js +6 -6
- package/lib/index.mjs +41 -41
- package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioHistory.js +18 -18
- package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioReviewHistory.js +13 -13
- package/lib/orchestrate/analyze/histories/transformAnalyzeSectionCrossFileReviewHistory.js +47 -47
- package/lib/orchestrate/analyze/histories/transformAnalyzeSectionReviewHistory.js +66 -66
- package/lib/orchestrate/analyze/histories/transformAnalyzeWriteSectionHistory.js +91 -91
- package/lib/orchestrate/analyze/histories/transformAnalyzeWriteSectionPatchHistory.js +46 -46
- package/lib/orchestrate/analyze/histories/transformAnalyzeWriteUnitHistory.js +72 -72
- package/lib/orchestrate/analyze/orchestrateAnalyzeScenario.js +1 -1
- package/lib/orchestrate/analyze/orchestrateAnalyzeSectionCrossFileReview.js +1 -1
- package/lib/orchestrate/analyze/orchestrateAnalyzeSectionReview.js +1 -1
- package/lib/orchestrate/analyze/orchestrateAnalyzeWriteSection.js +1 -1
- package/lib/orchestrate/analyze/orchestrateAnalyzeWriteSectionPatch.js +1 -1
- package/lib/orchestrate/analyze/orchestrateAnalyzeWriteUnit.js +1 -1
- package/lib/orchestrate/common/histories/transformCommonCorrectCastingHistory.js +5 -5
- package/lib/orchestrate/common/histories/transformPreliminaryHistory.js +44 -44
- package/lib/orchestrate/common/histories/transformPreviousAndLatestCorrectHistory.js +44 -44
- package/lib/orchestrate/common/internal/fixPrelminaryApplication.js +22 -22
- package/lib/orchestrate/common/internal/validatePreliminary.js +116 -116
- package/lib/orchestrate/facade/createAutoBeFacadeController.js +3 -3
- package/lib/orchestrate/facade/structures/transformFacadeStateMessage.js +20 -20
- package/lib/orchestrate/interface/histories/transformInterfaceActionEndpointReviewHistory.js +34 -34
- package/lib/orchestrate/interface/histories/transformInterfaceActionEndpointWriteHistory.js +37 -37
- package/lib/orchestrate/interface/histories/transformInterfaceAuthorizationHistory.js +56 -56
- package/lib/orchestrate/interface/histories/transformInterfaceBaseEndpointReviewHistory.js +26 -26
- package/lib/orchestrate/interface/histories/transformInterfaceBaseEndpointWriteHistory.js +28 -28
- package/lib/orchestrate/interface/histories/transformInterfaceEndpointAuthorizationSection.js +11 -11
- package/lib/orchestrate/interface/histories/transformInterfaceGroupHistory.js +38 -38
- package/lib/orchestrate/interface/histories/transformInterfaceOperationHistory.js +29 -29
- package/lib/orchestrate/interface/histories/transformInterfaceOperationParameterHistory.js +15 -15
- package/lib/orchestrate/interface/histories/transformInterfaceOperationReviewHistory.js +6 -6
- package/lib/orchestrate/interface/histories/transformInterfacePrerequisiteHistory.js +25 -25
- package/lib/orchestrate/interface/histories/transformInterfaceSchemaCastingHistory.js +67 -67
- package/lib/orchestrate/interface/histories/transformInterfaceSchemaComplementHistory.js +60 -60
- package/lib/orchestrate/interface/histories/transformInterfaceSchemaRefineHistory.js +83 -83
- package/lib/orchestrate/interface/histories/transformInterfaceSchemaRenameHistory.js +29 -29
- package/lib/orchestrate/interface/histories/transformInterfaceSchemaReviewHistory.js +74 -74
- package/lib/orchestrate/interface/histories/transformInterfaceSchemaWriteHistory.js +46 -46
- package/lib/orchestrate/interface/orchestrateInterfaceAuthorization.js +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceEndpointReview.js +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceEndpointWrite.js +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceGroup.js +9 -9
- package/lib/orchestrate/interface/orchestrateInterfaceOperation.js +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceOperationReview.js +1 -1
- package/lib/orchestrate/interface/orchestrateInterfacePrerequisite.js +4 -4
- package/lib/orchestrate/interface/orchestrateInterfaceSchemaCasting.js +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceSchemaComplement.js +5 -5
- package/lib/orchestrate/interface/orchestrateInterfaceSchemaRefine.js +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceSchemaReview.js +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceSchemaWrite.js +1 -1
- package/lib/orchestrate/interface/programmers/AutoBeInterfaceAuthorizationProgrammer.js +90 -90
- package/lib/orchestrate/interface/programmers/AutoBeInterfaceEndpointProgrammer.js +6 -6
- package/lib/orchestrate/interface/programmers/AutoBeInterfaceEndpointReviewProgrammer.js +25 -25
- package/lib/orchestrate/interface/programmers/AutoBeInterfaceOperationProgrammer.js +71 -71
- package/lib/orchestrate/interface/programmers/AutoBeInterfacePrerequisiteProgrammer.js +162 -162
- package/lib/orchestrate/interface/programmers/AutoBeInterfaceSchemaProgrammer.js +11 -11
- package/lib/orchestrate/interface/programmers/AutoBeInterfaceSchemaPropertyReviseProgrammer.js +73 -73
- package/lib/orchestrate/interface/programmers/AutoBeInterfaceSchemaRefineProgrammer.js +35 -35
- package/lib/orchestrate/interface/programmers/AutoBeInterfaceSchemaReviewProgrammer.js +11 -11
- package/lib/orchestrate/interface/utils/AutoBeJsonSchemaFactory.js +4 -4
- package/lib/orchestrate/interface/utils/AutoBeJsonSchemaValidator.js +283 -283
- package/lib/orchestrate/interface/utils/fulfillJsonSchemaErrorMessages.js +76 -76
- package/lib/orchestrate/prisma/histories/transformPrismaAuthorizationHistory.js +76 -76
- package/lib/orchestrate/prisma/histories/transformPrismaAuthorizationReviewHistory.js +51 -51
- package/lib/orchestrate/prisma/histories/transformPrismaComponentReviewHistory.js +54 -54
- package/lib/orchestrate/prisma/histories/transformPrismaComponentsHistory.js +83 -83
- package/lib/orchestrate/prisma/histories/transformPrismaCorrectHistory.js +6 -6
- package/lib/orchestrate/prisma/histories/transformPrismaGroupHistory.js +22 -22
- package/lib/orchestrate/prisma/histories/transformPrismaGroupReviewHistory.js +41 -41
- package/lib/orchestrate/prisma/histories/transformPrismaSchemaHistory.js +39 -39
- package/lib/orchestrate/prisma/histories/transformPrismaSchemaReviewHistory.js +41 -41
- package/lib/orchestrate/prisma/orchestratePrismaAuthorization.js +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaAuthorizationReview.js +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaComponent.js +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaComponentReview.js +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaCorrect.js +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaGroup.js +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaGroupReview.js +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaSchema.js +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaSchemaReview.js +1 -1
- package/lib/orchestrate/prisma/programmers/AutoBeDatabaseAuthorizationProgrammer.js +23 -23
- package/lib/orchestrate/prisma/programmers/AutoBeDatabaseAuthorizationReviewProgrammer.js +7 -7
- package/lib/orchestrate/prisma/programmers/AutoBeDatabaseComponentProgrammer.js +5 -5
- package/lib/orchestrate/prisma/programmers/AutoBeDatabaseComponentReviewProgrammer.js +20 -20
- package/lib/orchestrate/prisma/programmers/AutoBeDatabaseGroupProgrammer.js +13 -13
- package/lib/orchestrate/prisma/programmers/AutoBeDatabaseGroupReviewProgrammer.js +51 -51
- package/lib/orchestrate/prisma/programmers/AutoBeDatabaseSchemaProgrammer.js +25 -25
- package/lib/orchestrate/realize/histories/transformRealizeAuthorizationCorrectHistory.js +28 -28
- package/lib/orchestrate/realize/histories/transformRealizeAuthorizationWriteHistory.js +14 -14
- package/lib/orchestrate/realize/histories/transformRealizeCollectorCorrectHistory.js +42 -42
- package/lib/orchestrate/realize/histories/transformRealizeCollectorPlanHistory.js +27 -27
- package/lib/orchestrate/realize/histories/transformRealizeCollectorWriteHistory.js +57 -57
- package/lib/orchestrate/realize/histories/transformRealizeCorrectCastingHistory.js +35 -35
- package/lib/orchestrate/realize/histories/transformRealizeOperationCorrectHistory.js +14 -14
- package/lib/orchestrate/realize/histories/transformRealizeOperationWriteHistory.js +37 -37
- package/lib/orchestrate/realize/histories/transformRealizeOperationWriteHistory.js.map +1 -1
- package/lib/orchestrate/realize/histories/transformRealizeTransformerCorrectHistory.js +47 -47
- package/lib/orchestrate/realize/histories/transformRealizeTransformerPlanHistory.js +27 -27
- package/lib/orchestrate/realize/histories/transformRealizeTransformerWriteHistory.js +51 -51
- package/lib/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.js +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeAuthorizationWrite.js +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeCollectorCorrectOverall.js +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeCollectorPlan.js +11 -11
- package/lib/orchestrate/realize/orchestrateRealizeCollectorWrite.js +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeOperationCorrectOverall.js +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeOperationWrite.js +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeTransformerCorrectOverall.js +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeTransformerPlan.js +11 -11
- package/lib/orchestrate/realize/orchestrateRealizeTransformerWrite.js +1 -1
- package/lib/orchestrate/realize/programmers/AutoBeRealizeCollectorProgrammer.js +41 -41
- package/lib/orchestrate/realize/programmers/AutoBeRealizeOperationProgrammer.js +21 -21
- package/lib/orchestrate/realize/programmers/AutoBeRealizeTransformerProgrammer.js +57 -57
- package/lib/orchestrate/realize/utils/getRealizeWriteInputType.js +3 -3
- package/lib/orchestrate/realize/utils/printErrorHints.js +5 -5
- package/lib/orchestrate/test/compile/getTestImportStatements.js +9 -9
- package/lib/orchestrate/test/histories/transformTestAuthorizeWriteHistory.js +38 -38
- package/lib/orchestrate/test/histories/transformTestGenerationWriteHistory.js +79 -79
- package/lib/orchestrate/test/histories/transformTestOperationWriteHistory.js +162 -162
- package/lib/orchestrate/test/histories/transformTestPrepareWriteHistory.js +54 -54
- package/lib/orchestrate/test/histories/transformTestScenarioHistory.js +31 -31
- package/lib/orchestrate/test/histories/transformTestScenarioReviewHistory.js +27 -27
- package/lib/orchestrate/test/orchestrateTestScenario.js +1 -1
- package/lib/orchestrate/test/orchestrateTestScenarioReview.js +1 -1
- package/lib/orchestrate/test/programmers/AutoBeTestAuthorizeProgrammer.js +31 -31
- package/lib/orchestrate/test/programmers/AutoBeTestGenerateProgrammer.js +23 -23
- package/lib/orchestrate/test/programmers/AutoBeTestOperationProgrammer.js +6 -6
- package/lib/orchestrate/test/programmers/AutoBeTestPrepareProgrammer.js +34 -34
- package/lib/orchestrate/test/programmers/AutoBeTestScenarioProgrammer.js +39 -39
- package/lib/utils/predicateStateMessage.js +19 -19
- package/lib/utils/validateEmptyCode.js +16 -16
- package/package.json +5 -5
- package/src/AutoBeAgent.ts +374 -374
- package/src/AutoBeAgentBase.ts +126 -126
- package/src/AutoBeMockAgent.ts +254 -254
- package/src/constants/AutoBeConfigConstant.ts +173 -173
- package/src/constants/AutoBeTemplateFileConstant.ts +1 -1
- package/src/context/AutoBeContext.ts +107 -107
- package/src/context/AutoBeState.ts +66 -66
- package/src/context/AutoBeTokenUsage.ts +307 -307
- package/src/context/AutoBeTokenUsageComponent.ts +227 -227
- package/src/describe/describe.ts +47 -47
- package/src/describe/image/histories/transformImageDescribeDraftHistories.ts +16 -16
- package/src/describe/image/orchestrateImageDescribeDraft.ts +200 -200
- package/src/describe/image/structures/IAutoBeImageDescribeDraftApplication.ts +92 -92
- package/src/describe/imageDescribe.ts +64 -64
- package/src/factory/consentFunctionCall.ts +141 -141
- package/src/factory/createAgenticaHistory.ts +71 -71
- package/src/factory/createAutoBeContext.ts +584 -584
- package/src/factory/createAutoBeMessageContent.ts +36 -36
- package/src/factory/createAutoBeState.ts +20 -20
- package/src/factory/getAutoBeGenerated.ts +317 -317
- package/src/factory/getAutoBeRealizeGenerated.ts +31 -31
- package/src/factory/getCriticalCompiler.ts +52 -52
- package/src/factory/index.ts +1 -1
- package/src/factory/mergeSystemMessages.ts +60 -60
- package/src/factory/supportFunctionCallFallback.ts +214 -214
- package/src/factory/supportMistral.ts +138 -138
- package/src/index.ts +16 -16
- package/src/orchestrate/analyze/fillTocDeterministic.ts +280 -280
- package/src/orchestrate/analyze/histories/transformAnalyzeScenarioHistory.ts +55 -55
- package/src/orchestrate/analyze/histories/transformAnalyzeScenarioReviewHistory.ts +74 -74
- package/src/orchestrate/analyze/histories/transformAnalyzeSectionCrossFileReviewHistory.ts +179 -179
- package/src/orchestrate/analyze/histories/transformAnalyzeSectionReviewHistory.ts +163 -163
- package/src/orchestrate/analyze/histories/transformAnalyzeWriteSectionHistory.ts +191 -191
- package/src/orchestrate/analyze/histories/transformAnalyzeWriteSectionPatchHistory.ts +122 -122
- package/src/orchestrate/analyze/histories/transformAnalyzeWriteUnitHistory.ts +161 -161
- package/src/orchestrate/analyze/index.ts +7 -7
- package/src/orchestrate/analyze/orchestrateAnalyze.ts +1693 -1693
- package/src/orchestrate/analyze/orchestrateAnalyzeScenario.ts +267 -267
- package/src/orchestrate/analyze/orchestrateAnalyzeScenarioReview.ts +122 -122
- package/src/orchestrate/analyze/orchestrateAnalyzeSectionCrossFileReview.ts +146 -146
- package/src/orchestrate/analyze/orchestrateAnalyzeSectionReview.ts +154 -154
- package/src/orchestrate/analyze/orchestrateAnalyzeWriteSection.ts +388 -388
- package/src/orchestrate/analyze/orchestrateAnalyzeWriteSectionPatch.ts +407 -407
- package/src/orchestrate/analyze/orchestrateAnalyzeWriteUnit.ts +348 -348
- package/src/orchestrate/analyze/programmers/AutoBeAnalyzeProgrammer.ts +149 -149
- package/src/orchestrate/analyze/structures/FixedAnalyzeTemplate.ts +961 -961
- package/src/orchestrate/analyze/structures/IAutoBeAnalyzeScenarioApplication.ts +141 -141
- package/src/orchestrate/analyze/structures/IAutoBeAnalyzeScenarioReviewApplication.ts +96 -96
- package/src/orchestrate/analyze/structures/IAutoBeAnalyzeSectionCrossFileReviewApplication.ts +160 -160
- package/src/orchestrate/analyze/structures/IAutoBeAnalyzeSectionReviewApplication.ts +192 -192
- package/src/orchestrate/analyze/structures/IAutoBeAnalyzeWriteSectionApplication.ts +142 -142
- package/src/orchestrate/analyze/structures/IAutoBeAnalyzeWriteUnitApplication.ts +123 -123
- package/src/orchestrate/analyze/utils/buildConstraintConsistencyReport.ts +813 -813
- package/src/orchestrate/analyze/utils/buildErrorCodeRegistry.ts +324 -324
- package/src/orchestrate/analyze/utils/buildHardValidators.ts +88 -88
- package/src/orchestrate/analyze/utils/detectInventedEntities.ts +87 -87
- package/src/orchestrate/analyze/utils/detectProseConstraintConflicts.ts +319 -319
- package/src/orchestrate/analyze/utils/repairSectionReviewUtils.ts +181 -181
- package/src/orchestrate/analyze/utils/repairUtils.ts +60 -60
- package/src/orchestrate/analyze/utils/validateScenarioBasics.ts +104 -104
- package/src/orchestrate/common/AutoBePreliminaryController.ts +400 -400
- package/src/orchestrate/common/histories/transformCommonCorrectCastingHistory.ts +32 -32
- package/src/orchestrate/common/histories/transformPreliminaryHistory.ts +742 -742
- package/src/orchestrate/common/histories/transformPreviousAndLatestCorrectHistory.ts +77 -77
- package/src/orchestrate/common/internal/complementPreliminaryCollection.ts +263 -263
- package/src/orchestrate/common/internal/convertToSectionEntries.ts +57 -57
- package/src/orchestrate/common/internal/createPreliminaryCollection.ts +76 -76
- package/src/orchestrate/common/internal/fixPrelminaryApplication.ts +346 -346
- package/src/orchestrate/common/internal/validatePreliminary.ts +671 -671
- package/src/orchestrate/common/orchestrateCommonCorrectCasting.ts +223 -223
- package/src/orchestrate/common/orchestratePreliminary.ts +610 -610
- package/src/orchestrate/common/structures/AutoBePreliminaryRequest.ts +42 -42
- package/src/orchestrate/common/structures/IAnalysisSectionEntry.ts +35 -35
- package/src/orchestrate/common/structures/IAutoBeCommonCorrectCastingApplication.ts +72 -72
- package/src/orchestrate/common/structures/IAutoBeOrchestrateResult.ts +28 -28
- package/src/orchestrate/common/structures/IAutoBePreliminaryCollection.ts +52 -52
- package/src/orchestrate/common/structures/IAutoBePreliminaryGetAnalysisSections.ts +34 -34
- package/src/orchestrate/common/structures/IAutoBePreliminaryGetDatabaseSchemas.ts +31 -31
- package/src/orchestrate/common/structures/IAutoBePreliminaryGetInterfaceOperations.ts +32 -32
- package/src/orchestrate/common/structures/IAutoBePreliminaryGetInterfaceSchemas.ts +31 -31
- package/src/orchestrate/common/structures/IAutoBePreliminaryGetPreviousAnalysisSections.ts +28 -28
- package/src/orchestrate/common/structures/IAutoBePreliminaryGetPreviousDatabaseSchemas.ts +88 -88
- package/src/orchestrate/common/structures/IAutoBePreliminaryGetPreviousInterfaceOperations.ts +102 -102
- package/src/orchestrate/common/structures/IAutoBePreliminaryGetPreviousInterfaceSchemas.ts +105 -105
- package/src/orchestrate/common/structures/IAutoBePreliminaryGetRealizeCollectors.ts +32 -32
- package/src/orchestrate/common/structures/IAutoBePreliminaryGetRealizeTransformers.ts +32 -32
- package/src/orchestrate/facade/createAutoBeFacadeController.ts +118 -118
- package/src/orchestrate/facade/histories/IAutoBeFacadeApplication.ts +139 -139
- package/src/orchestrate/facade/histories/IAutoBeFacadeApplicationProps.ts +8 -8
- package/src/orchestrate/facade/histories/IAutoBeFacadeApplicationResult.ts +9 -9
- package/src/orchestrate/facade/structures/transformFacadeStateMessage.ts +59 -59
- package/src/orchestrate/index.ts +5 -5
- package/src/orchestrate/interface/histories/transformInterfaceActionEndpointReviewHistory.ts +83 -83
- package/src/orchestrate/interface/histories/transformInterfaceActionEndpointWriteHistory.ts +78 -78
- package/src/orchestrate/interface/histories/transformInterfaceAuthorizationHistory.ts +129 -129
- package/src/orchestrate/interface/histories/transformInterfaceBaseEndpointReviewHistory.ts +74 -74
- package/src/orchestrate/interface/histories/transformInterfaceBaseEndpointWriteHistory.ts +68 -68
- package/src/orchestrate/interface/histories/transformInterfaceCommonHistory.ts +64 -64
- package/src/orchestrate/interface/histories/transformInterfaceEndpointAuthorizationSection.ts +42 -42
- package/src/orchestrate/interface/histories/transformInterfaceGroupHistory.ts +103 -103
- package/src/orchestrate/interface/histories/transformInterfaceOperationHistory.ts +81 -81
- package/src/orchestrate/interface/histories/transformInterfaceOperationParameterHistory.ts +53 -53
- package/src/orchestrate/interface/histories/transformInterfaceOperationReviewHistory.ts +49 -49
- package/src/orchestrate/interface/histories/transformInterfacePrerequisiteHistory.ts +94 -94
- package/src/orchestrate/interface/histories/transformInterfaceSchemaCastingHistory.ts +122 -122
- package/src/orchestrate/interface/histories/transformInterfaceSchemaComplementHistory.ts +192 -192
- package/src/orchestrate/interface/histories/transformInterfaceSchemaRefineHistory.ts +189 -189
- package/src/orchestrate/interface/histories/transformInterfaceSchemaRenameHistory.ts +63 -63
- package/src/orchestrate/interface/histories/transformInterfaceSchemaReviewHistory.ts +173 -173
- package/src/orchestrate/interface/histories/transformInterfaceSchemaWriteHistory.ts +88 -88
- package/src/orchestrate/interface/index.ts +6 -6
- package/src/orchestrate/interface/orchestrateInterface.ts +118 -118
- package/src/orchestrate/interface/orchestrateInterfaceActionEndpoint.ts +58 -58
- package/src/orchestrate/interface/orchestrateInterfaceAuthorization.ts +208 -208
- package/src/orchestrate/interface/orchestrateInterfaceBaseEndpoint.ts +55 -55
- package/src/orchestrate/interface/orchestrateInterfaceEndpoint.ts +67 -67
- package/src/orchestrate/interface/orchestrateInterfaceEndpointOverall.ts +80 -80
- package/src/orchestrate/interface/orchestrateInterfaceEndpointReview.ts +212 -212
- package/src/orchestrate/interface/orchestrateInterfaceEndpointWrite.ts +236 -236
- package/src/orchestrate/interface/orchestrateInterfaceGroup.ts +166 -166
- package/src/orchestrate/interface/orchestrateInterfaceOperation.ts +322 -322
- package/src/orchestrate/interface/orchestrateInterfaceOperationReview.ts +245 -245
- package/src/orchestrate/interface/orchestrateInterfacePrerequisite.ts +240 -240
- package/src/orchestrate/interface/orchestrateInterfaceSchema.ts +191 -191
- package/src/orchestrate/interface/orchestrateInterfaceSchemaCasting.ts +274 -274
- package/src/orchestrate/interface/orchestrateInterfaceSchemaComplement.ts +329 -329
- package/src/orchestrate/interface/orchestrateInterfaceSchemaRefine.ts +292 -292
- package/src/orchestrate/interface/orchestrateInterfaceSchemaRename.ts +266 -266
- package/src/orchestrate/interface/orchestrateInterfaceSchemaReview.ts +310 -310
- package/src/orchestrate/interface/orchestrateInterfaceSchemaWrite.ts +283 -283
- package/src/orchestrate/interface/programmers/AutoBeInterfaceAuthorizationProgrammer.ts +260 -260
- package/src/orchestrate/interface/programmers/AutoBeInterfaceEndpointProgrammer.ts +155 -155
- package/src/orchestrate/interface/programmers/AutoBeInterfaceEndpointReviewProgrammer.ts +139 -139
- package/src/orchestrate/interface/programmers/AutoBeInterfaceOperationProgrammer.ts +277 -277
- package/src/orchestrate/interface/programmers/AutoBeInterfacePrerequisiteProgrammer.ts +259 -259
- package/src/orchestrate/interface/programmers/AutoBeInterfaceSchemaProgrammer.ts +152 -152
- package/src/orchestrate/interface/programmers/AutoBeInterfaceSchemaPropertyReviseProgrammer.ts +347 -347
- package/src/orchestrate/interface/programmers/AutoBeInterfaceSchemaRefineProgrammer.ts +183 -183
- package/src/orchestrate/interface/programmers/AutoBeInterfaceSchemaReviewProgrammer.ts +263 -263
- package/src/orchestrate/interface/structures/IAutoBeInterfaceAuthorizationApplication.ts +135 -135
- package/src/orchestrate/interface/structures/IAutoBeInterfaceEndpointReviewApplication.ts +128 -128
- package/src/orchestrate/interface/structures/IAutoBeInterfaceEndpointWriteApplication.ts +133 -133
- package/src/orchestrate/interface/structures/IAutoBeInterfaceGroupApplication.ts +122 -122
- package/src/orchestrate/interface/structures/IAutoBeInterfaceOperationApplication.ts +178 -178
- package/src/orchestrate/interface/structures/IAutoBeInterfaceOperationReviewApplication.ts +175 -175
- package/src/orchestrate/interface/structures/IAutoBeInterfacePrerequisiteApplication.ts +130 -130
- package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaApplication.ts +121 -121
- package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaCastingApplication.ts +153 -153
- package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaComplementApplication.ts +123 -123
- package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaRefineApplication.ts +181 -181
- package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaRenameApplication.ts +45 -45
- package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaReviewApplication.ts +108 -108
- package/src/orchestrate/interface/utils/AutoBeJsonSchemaCollection.ts +42 -42
- package/src/orchestrate/interface/utils/AutoBeJsonSchemaFactory.ts +714 -714
- package/src/orchestrate/interface/utils/AutoBeJsonSchemaNamingConvention.ts +86 -86
- package/src/orchestrate/interface/utils/AutoBeJsonSchemaValidator.ts +725 -725
- package/src/orchestrate/interface/utils/fulfillJsonSchemaErrorMessages.ts +219 -219
- package/src/orchestrate/prisma/histories/transformPrismaAuthorizationHistory.ts +144 -144
- package/src/orchestrate/prisma/histories/transformPrismaAuthorizationReviewHistory.ts +104 -104
- package/src/orchestrate/prisma/histories/transformPrismaComponentReviewHistory.ts +97 -97
- package/src/orchestrate/prisma/histories/transformPrismaComponentsHistory.ts +136 -136
- package/src/orchestrate/prisma/histories/transformPrismaCorrectHistory.ts +41 -41
- package/src/orchestrate/prisma/histories/transformPrismaGroupHistory.ts +63 -63
- package/src/orchestrate/prisma/histories/transformPrismaGroupReviewHistory.ts +79 -79
- package/src/orchestrate/prisma/histories/transformPrismaSchemaHistory.ts +97 -97
- package/src/orchestrate/prisma/histories/transformPrismaSchemaReviewHistory.ts +126 -126
- package/src/orchestrate/prisma/index.ts +7 -7
- package/src/orchestrate/prisma/orchestratePrisma.ts +296 -296
- package/src/orchestrate/prisma/orchestratePrismaAuthorization.ts +173 -173
- package/src/orchestrate/prisma/orchestratePrismaAuthorizationReview.ts +183 -183
- package/src/orchestrate/prisma/orchestratePrismaComponent.ts +205 -205
- package/src/orchestrate/prisma/orchestratePrismaComponentReview.ts +205 -205
- package/src/orchestrate/prisma/orchestratePrismaCorrect.ts +265 -265
- package/src/orchestrate/prisma/orchestratePrismaGroup.ts +121 -121
- package/src/orchestrate/prisma/orchestratePrismaGroupReview.ts +141 -141
- package/src/orchestrate/prisma/orchestratePrismaSchema.ts +218 -218
- package/src/orchestrate/prisma/orchestratePrismaSchemaReview.ts +220 -220
- package/src/orchestrate/prisma/programmers/AutoBeDatabaseAuthorizationProgrammer.ts +86 -86
- package/src/orchestrate/prisma/programmers/AutoBeDatabaseAuthorizationReviewProgrammer.ts +103 -103
- package/src/orchestrate/prisma/programmers/AutoBeDatabaseComponentProgrammer.ts +80 -80
- package/src/orchestrate/prisma/programmers/AutoBeDatabaseComponentReviewProgrammer.ts +168 -168
- package/src/orchestrate/prisma/programmers/AutoBeDatabaseGroupProgrammer.ts +63 -63
- package/src/orchestrate/prisma/programmers/AutoBeDatabaseGroupReviewProgrammer.ts +210 -210
- package/src/orchestrate/prisma/programmers/AutoBeDatabaseModelProgrammer.ts +57 -57
- package/src/orchestrate/prisma/programmers/AutoBeDatabaseSchemaProgrammer.ts +92 -92
- package/src/orchestrate/prisma/structures/IAutoBeDatabaseAuthorizationApplication.ts +147 -147
- package/src/orchestrate/prisma/structures/IAutoBeDatabaseAuthorizationReviewApplication.ts +153 -153
- package/src/orchestrate/prisma/structures/IAutoBeDatabaseComponentApplication.ts +142 -142
- package/src/orchestrate/prisma/structures/IAutoBeDatabaseComponentReviewApplication.ts +151 -151
- package/src/orchestrate/prisma/structures/IAutoBeDatabaseCorrectApplication.ts +157 -157
- package/src/orchestrate/prisma/structures/IAutoBeDatabaseGroupApplication.ts +117 -117
- package/src/orchestrate/prisma/structures/IAutoBeDatabaseGroupReviewApplication.ts +154 -154
- package/src/orchestrate/prisma/structures/IAutoBeDatabaseSchemaApplication.ts +144 -144
- package/src/orchestrate/prisma/structures/IAutoBeDatabaseSchemaReviewApplication.ts +138 -138
- package/src/orchestrate/realize/histories/transformRealizeAuthorizationCorrectHistory.ts +89 -89
- package/src/orchestrate/realize/histories/transformRealizeAuthorizationWriteHistory.ts +45 -45
- package/src/orchestrate/realize/histories/transformRealizeCollectorCorrectHistory.ts +137 -137
- package/src/orchestrate/realize/histories/transformRealizeCollectorPlanHistory.ts +64 -64
- package/src/orchestrate/realize/histories/transformRealizeCollectorWriteHistory.ts +147 -147
- package/src/orchestrate/realize/histories/transformRealizeCorrectCastingHistory.ts +69 -69
- package/src/orchestrate/realize/histories/transformRealizeOperationCorrectHistory.ts +94 -94
- package/src/orchestrate/realize/histories/transformRealizeOperationWriteHistory.ts +127 -127
- package/src/orchestrate/realize/histories/transformRealizeTransformerCorrectHistory.ts +147 -147
- package/src/orchestrate/realize/histories/transformRealizeTransformerPlanHistory.ts +61 -61
- package/src/orchestrate/realize/histories/transformRealizeTransformerWriteHistory.ts +133 -133
- package/src/orchestrate/realize/histories/transformRealizeWriteMembershipHistory.ts +30 -30
- package/src/orchestrate/realize/index.ts +3 -3
- package/src/orchestrate/realize/internal/orchestrateRealizeCorrectCasting.ts +444 -444
- package/src/orchestrate/realize/internal/orchestrateRealizeCorrectOverall.ts +449 -449
- package/src/orchestrate/realize/orchestrateRealize.ts +143 -143
- package/src/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.ts +207 -207
- package/src/orchestrate/realize/orchestrateRealizeAuthorizationWrite.ts +209 -209
- package/src/orchestrate/realize/orchestrateRealizeCollector.ts +41 -41
- package/src/orchestrate/realize/orchestrateRealizeCollectorCorrectCasting.ts +43 -43
- package/src/orchestrate/realize/orchestrateRealizeCollectorCorrectOverall.ts +157 -157
- package/src/orchestrate/realize/orchestrateRealizeCollectorPlan.ts +264 -264
- package/src/orchestrate/realize/orchestrateRealizeCollectorWrite.ts +225 -225
- package/src/orchestrate/realize/orchestrateRealizeOperation.ts +48 -48
- package/src/orchestrate/realize/orchestrateRealizeOperationCorrectCasting.ts +69 -69
- package/src/orchestrate/realize/orchestrateRealizeOperationCorrectOverall.ts +173 -173
- package/src/orchestrate/realize/orchestrateRealizeOperationWrite.ts +262 -262
- package/src/orchestrate/realize/orchestrateRealizeTransformer.ts +41 -41
- package/src/orchestrate/realize/orchestrateRealizeTransformerCorrectCasting.ts +38 -38
- package/src/orchestrate/realize/orchestrateRealizeTransformerCorrectOverall.ts +160 -160
- package/src/orchestrate/realize/orchestrateRealizeTransformerPlan.ts +254 -254
- package/src/orchestrate/realize/orchestrateRealizeTransformerWrite.ts +226 -226
- package/src/orchestrate/realize/programmers/AutoBeRealizeCollectorProgrammer.ts +424 -424
- package/src/orchestrate/realize/programmers/AutoBeRealizeOperationProgrammer.ts +409 -409
- package/src/orchestrate/realize/programmers/AutoBeRealizeTransformerProgrammer.ts +451 -451
- package/src/orchestrate/realize/programmers/compileRealizeFiles.ts +65 -65
- package/src/orchestrate/realize/structures/IAutoBeRealizeAuthorizationCorrectApplication.ts +119 -119
- package/src/orchestrate/realize/structures/IAutoBeRealizeAuthorizationWriteApplication.ts +167 -167
- package/src/orchestrate/realize/structures/IAutoBeRealizeCollectorCorrectApplication.ts +191 -191
- package/src/orchestrate/realize/structures/IAutoBeRealizeCollectorPlanApplication.ts +177 -177
- package/src/orchestrate/realize/structures/IAutoBeRealizeCollectorWriteApplication.ts +207 -207
- package/src/orchestrate/realize/structures/IAutoBeRealizeFunctionFailure.ts +11 -11
- package/src/orchestrate/realize/structures/IAutoBeRealizeOperationCorrectApplication.ts +134 -134
- package/src/orchestrate/realize/structures/IAutoBeRealizeOperationWriteApplication.ts +138 -138
- package/src/orchestrate/realize/structures/IAutoBeRealizeScenarioResult.ts +32 -32
- package/src/orchestrate/realize/structures/IAutoBeRealizeTransformerCorrectApplication.ts +248 -248
- package/src/orchestrate/realize/structures/IAutoBeRealizeTransformerPlanApplication.ts +150 -150
- package/src/orchestrate/realize/structures/IAutoBeRealizeTransformerWriteApplication.ts +278 -278
- package/src/orchestrate/realize/utils/AuthorizationFileSystem.ts +10 -10
- package/src/orchestrate/realize/utils/AutoBeRealizeAuthorizationFileSystem.ts +9 -9
- package/src/orchestrate/realize/utils/AutoBeRealizeAuthorizationReplaceImport.ts +62 -62
- package/src/orchestrate/realize/utils/InternalFileSystem.ts +12 -12
- package/src/orchestrate/realize/utils/ProviderFileSystem.ts +4 -4
- package/src/orchestrate/realize/utils/filterDiagnostics.ts +25 -25
- package/src/orchestrate/realize/utils/generateTS2339Hints.ts +54 -54
- package/src/orchestrate/realize/utils/getRealizeWriteImportStatements.ts +42 -42
- package/src/orchestrate/realize/utils/getRealizeWriteInputType.ts +88 -88
- package/src/orchestrate/realize/utils/printErrorHints.ts +54 -54
- package/src/orchestrate/test/compile/getTestArtifacts.ts +124 -124
- package/src/orchestrate/test/compile/getTestExternalDeclarations.ts +39 -39
- package/src/orchestrate/test/compile/getTestImportStatements.ts +27 -27
- package/src/orchestrate/test/experimental/orchestrateTestCorrect.ast +237 -237
- package/src/orchestrate/test/experimental/orchestrateTestWrite.ast +322 -322
- package/src/orchestrate/test/experimental/transformTestCorrectHistories.ast +52 -52
- package/src/orchestrate/test/histories/transformTestAuthorizeWriteHistory.ts +80 -80
- package/src/orchestrate/test/histories/transformTestCorrectOverallHistory.ts +116 -116
- package/src/orchestrate/test/histories/transformTestGenerationWriteHistory.ts +118 -118
- package/src/orchestrate/test/histories/transformTestOperationWriteHistory.ts +287 -287
- package/src/orchestrate/test/histories/transformTestPrepareWriteHistory.ts +95 -95
- package/src/orchestrate/test/histories/transformTestScenarioHistory.ts +120 -120
- package/src/orchestrate/test/histories/transformTestScenarioReviewHistory.ts +99 -99
- package/src/orchestrate/test/histories/transformTestValidateEvent.ts +11 -11
- package/src/orchestrate/test/index.ts +5 -5
- package/src/orchestrate/test/internal/orchestrateTestCorrectCasting.ts +96 -96
- package/src/orchestrate/test/internal/orchestrateTestCorrectOverall.ts +219 -219
- package/src/orchestrate/test/internal/orchestrateTestCorrectRequest.ts +206 -206
- package/src/orchestrate/test/orchestrateTest.ts +161 -161
- package/src/orchestrate/test/orchestrateTestAuthorize.ts +125 -125
- package/src/orchestrate/test/orchestrateTestAuthorizeWrite.ts +263 -263
- package/src/orchestrate/test/orchestrateTestGenerate.ts +121 -121
- package/src/orchestrate/test/orchestrateTestGenerateWrite.ts +211 -211
- package/src/orchestrate/test/orchestrateTestOperation.ts +133 -133
- package/src/orchestrate/test/orchestrateTestOperationWrite.ts +221 -221
- package/src/orchestrate/test/orchestrateTestPrepare.ts +117 -117
- package/src/orchestrate/test/orchestrateTestPrepareWrite.ts +264 -264
- package/src/orchestrate/test/orchestrateTestScenario.ts +290 -290
- package/src/orchestrate/test/orchestrateTestScenarioReview.ts +262 -262
- package/src/orchestrate/test/programmers/AutoBeTestAuthorizeProgrammer.ts +149 -149
- package/src/orchestrate/test/programmers/AutoBeTestFunctionProgrammer.ts +90 -90
- package/src/orchestrate/test/programmers/AutoBeTestGenerateProgrammer.ts +170 -170
- package/src/orchestrate/test/programmers/AutoBeTestOperationProgrammer.ts +168 -168
- package/src/orchestrate/test/programmers/AutoBeTestPrepareProgrammer.ts +261 -261
- package/src/orchestrate/test/programmers/AutoBeTestScenarioProgrammer.ts +316 -316
- package/src/orchestrate/test/structures/IAutoBeTestArtifacts.ts +8 -8
- package/src/orchestrate/test/structures/IAutoBeTestAuthorizationWriteApplication.ts +113 -113
- package/src/orchestrate/test/structures/IAutoBeTestAuthorizeWriteResult.ts +10 -10
- package/src/orchestrate/test/structures/IAutoBeTestCorrectOverallApplication.ts +134 -134
- package/src/orchestrate/test/structures/IAutoBeTestCorrectRequestApplication.ts +152 -152
- package/src/orchestrate/test/structures/IAutoBeTestFunction.ts +10 -10
- package/src/orchestrate/test/structures/IAutoBeTestFunctionFailure.ts +10 -10
- package/src/orchestrate/test/structures/IAutoBeTestGenerateProcedure.ts +15 -15
- package/src/orchestrate/test/structures/IAutoBeTestGenerationWriteApplication.ts +145 -145
- package/src/orchestrate/test/structures/IAutoBeTestOperationProcedure.ts +17 -17
- package/src/orchestrate/test/structures/IAutoBeTestOperationWriteApplication.ts +162 -162
- package/src/orchestrate/test/structures/IAutoBeTestPrepareCorrectOverallApplication.ts +194 -194
- package/src/orchestrate/test/structures/IAutoBeTestPrepareProcedure.ts +8 -8
- package/src/orchestrate/test/structures/IAutoBeTestPrepareWriteApplication.ts +147 -147
- package/src/orchestrate/test/structures/IAutoBeTestProcedure.ts +10 -10
- package/src/orchestrate/test/structures/IAutoBeTestScenarioApplication.ts +105 -105
- package/src/orchestrate/test/structures/IAutoBeTestScenarioArtifacts.ts +8 -8
- package/src/orchestrate/test/structures/IAutoBeTestScenarioAuthorizationActor.ts +7 -7
- package/src/orchestrate/test/structures/IAutoBeTestScenarioReviewApplication.ts +133 -133
- package/src/orchestrate/test/utils/getPrerequisites.ts +51 -51
- package/src/orchestrate/test/utils/getReferenceIds.ts +26 -26
- package/src/orchestrate/test/utils/insertScriptToTestResult.ts +14 -14
- package/src/structures/IAutoBeConfig.ts +110 -110
- package/src/structures/IAutoBeOrchestrateHistory.ts +44 -44
- package/src/structures/IAutoBeProps.ts +102 -102
- package/src/structures/IAutoBeVendor.ts +113 -113
- package/src/utils/AutoBePreliminaryExhaustedError.ts +30 -30
- package/src/utils/AutoBeTimeoutError.ts +35 -35
- package/src/utils/EmbeddingProvider.ts +4 -4
- package/src/utils/LocalEmbeddingProvider.ts +145 -145
- package/src/utils/RAGRetrieval.ts +411 -411
- package/src/utils/TimedConversation.ts +125 -125
- package/src/utils/backoffRetry.ts +169 -169
- package/src/utils/divideArray.ts +35 -35
- package/src/utils/emplaceMap.ts +31 -31
- package/src/utils/executeCachedBatch.ts +67 -67
- package/src/utils/forceRetry.ts +15 -15
- package/src/utils/getEmbedder.ts +16 -16
- package/src/utils/parseTextFunctionCall.ts +437 -437
- package/src/utils/predicateStateMessage.ts +131 -131
- package/src/utils/validateEmptyCode.ts +73 -73
- package/src/utils/validateEnglishOnly.ts +224 -224
- package/README.md +0 -261
|
@@ -1,961 +1,961 @@
|
|
|
1
|
-
import { AutoBeAnalyze } from "@autobe/interface";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Fixed 6-category SRS document structure template.
|
|
5
|
-
*
|
|
6
|
-
* Defines the authoritative structure for all analysis documents. LLM is no
|
|
7
|
-
* longer responsible for deciding file count, file names, or module/unit
|
|
8
|
-
* layout. Instead, it focuses solely on content generation within this fixed
|
|
9
|
-
* skeleton.
|
|
10
|
-
*
|
|
11
|
-
* Hierarchy: Category (file) -> Module (#) -> Unit (##) -> Section (###)
|
|
12
|
-
*
|
|
13
|
-
* @author Juntak
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
// ─────────────────────────────────────────────
|
|
17
|
-
// Types
|
|
18
|
-
// ─────────────────────────────────────────────
|
|
19
|
-
|
|
20
|
-
export type FixedAnalyzeTemplateCategoryId =
|
|
21
|
-
| "00-toc"
|
|
22
|
-
| "01-actors-and-auth"
|
|
23
|
-
| "02-domain-model"
|
|
24
|
-
| "03-functional-requirements"
|
|
25
|
-
| "04-business-rules"
|
|
26
|
-
| "05-non-functional";
|
|
27
|
-
|
|
28
|
-
export interface FixedAnalyzeTemplateFileTemplate {
|
|
29
|
-
categoryId: FixedAnalyzeTemplateCategoryId;
|
|
30
|
-
/** Currently equals categoryId; reserved for future per-category splits. */
|
|
31
|
-
fileId: string;
|
|
32
|
-
filename: `${string}.md`;
|
|
33
|
-
documentType: string;
|
|
34
|
-
description: string;
|
|
35
|
-
downstreamPhase: string;
|
|
36
|
-
modules: FixedAnalyzeTemplateModuleTemplate[];
|
|
37
|
-
/** Regex patterns that must NOT appear in this file's sections. */
|
|
38
|
-
forbiddenPatterns: RegExp[];
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface FixedAnalyzeTemplateModuleTemplate {
|
|
42
|
-
index: number;
|
|
43
|
-
title: string;
|
|
44
|
-
purpose: string;
|
|
45
|
-
unitStrategy: FixedAnalyzeTemplateUnitStrategy;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export type FixedAnalyzeTemplateUnitStrategy =
|
|
49
|
-
| FixedAnalyzeTemplateFixedUnits
|
|
50
|
-
| FixedAnalyzeTemplatePerEntityUnits
|
|
51
|
-
| FixedAnalyzeTemplatePerActorUnits
|
|
52
|
-
| FixedAnalyzeTemplatePerEntityGroupUnits;
|
|
53
|
-
|
|
54
|
-
export interface FixedAnalyzeTemplateFixedUnits {
|
|
55
|
-
type: "fixed";
|
|
56
|
-
units: FixedAnalyzeTemplateUnitTemplate[];
|
|
57
|
-
}
|
|
58
|
-
export interface FixedAnalyzeTemplatePerEntityUnits {
|
|
59
|
-
type: "perEntity";
|
|
60
|
-
unitTemplate: FixedAnalyzeTemplateUnitTemplate;
|
|
61
|
-
}
|
|
62
|
-
export interface FixedAnalyzeTemplatePerActorUnits {
|
|
63
|
-
type: "perActor";
|
|
64
|
-
unitTemplate: FixedAnalyzeTemplateUnitTemplate;
|
|
65
|
-
}
|
|
66
|
-
export interface FixedAnalyzeTemplatePerEntityGroupUnits {
|
|
67
|
-
type: "perEntityGroup";
|
|
68
|
-
unitTemplate: FixedAnalyzeTemplateUnitTemplate;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export interface FixedAnalyzeTemplateUnitTemplate {
|
|
72
|
-
titlePattern: string;
|
|
73
|
-
purposePattern: string;
|
|
74
|
-
keywords: string[];
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// ─────────────────────────────────────────────
|
|
78
|
-
// Feature types (conditional module activation)
|
|
79
|
-
// ─────────────────────────────────────────────
|
|
80
|
-
|
|
81
|
-
export type FixedAnalyzeTemplateFeatureId =
|
|
82
|
-
| "real-time"
|
|
83
|
-
| "external-integration"
|
|
84
|
-
| "file-storage";
|
|
85
|
-
|
|
86
|
-
export interface FixedAnalyzeTemplateFeature {
|
|
87
|
-
id: FixedAnalyzeTemplateFeatureId;
|
|
88
|
-
/** Provider names for external-integration (e.g., ["stripe", "sendgrid"]) */
|
|
89
|
-
providers?: string[];
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// ─────────────────────────────────────────────
|
|
93
|
-
// Canonical source mapping
|
|
94
|
-
// ─────────────────────────────────────────────
|
|
95
|
-
|
|
96
|
-
export const FIXED_ANALYZE_TEMPLATE_CANONICAL_SOURCE: Record<
|
|
97
|
-
string,
|
|
98
|
-
FixedAnalyzeTemplateCategoryId
|
|
99
|
-
> = {
|
|
100
|
-
"domain-concepts": "02-domain-model",
|
|
101
|
-
"error-conditions": "04-business-rules",
|
|
102
|
-
permissions: "01-actors-and-auth",
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
// ─────────────────────────────────────────────
|
|
106
|
-
// 6-file template definition
|
|
107
|
-
// ─────────────────────────────────────────────
|
|
108
|
-
|
|
109
|
-
export const FIXED_ANALYZE_TEMPLATE: FixedAnalyzeTemplateFileTemplate[] = [
|
|
110
|
-
// ── 00-toc ──
|
|
111
|
-
{
|
|
112
|
-
categoryId: "00-toc",
|
|
113
|
-
fileId: "00-toc",
|
|
114
|
-
filename: "00-toc.md",
|
|
115
|
-
documentType: "overview",
|
|
116
|
-
description: "Project summary, scope, glossary, and assumptions",
|
|
117
|
-
downstreamPhase: "project-setup",
|
|
118
|
-
forbiddenPatterns: [],
|
|
119
|
-
modules: [
|
|
120
|
-
{
|
|
121
|
-
index: 0,
|
|
122
|
-
title: "Project Summary",
|
|
123
|
-
purpose: "High-level vision, goals, and scope of the project.",
|
|
124
|
-
unitStrategy: {
|
|
125
|
-
type: "fixed",
|
|
126
|
-
units: [
|
|
127
|
-
{
|
|
128
|
-
titlePattern: "Vision and Goals",
|
|
129
|
-
purposePattern:
|
|
130
|
-
"Define the project vision, business objectives, and success criteria.",
|
|
131
|
-
keywords: [
|
|
132
|
-
"vision",
|
|
133
|
-
"goals",
|
|
134
|
-
"objectives",
|
|
135
|
-
"success-criteria",
|
|
136
|
-
"business-value",
|
|
137
|
-
],
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
titlePattern: "Scope Definition",
|
|
141
|
-
purposePattern:
|
|
142
|
-
"Define what is in-scope and out-of-scope for this project.",
|
|
143
|
-
keywords: [
|
|
144
|
-
"scope",
|
|
145
|
-
"boundaries",
|
|
146
|
-
"in-scope",
|
|
147
|
-
"out-of-scope",
|
|
148
|
-
"constraints",
|
|
149
|
-
],
|
|
150
|
-
},
|
|
151
|
-
],
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
index: 1,
|
|
156
|
-
title: "Document Map and Canonical Sources",
|
|
157
|
-
purpose:
|
|
158
|
-
"Navigation index and authoritative source declarations for cross-file references.",
|
|
159
|
-
unitStrategy: {
|
|
160
|
-
type: "fixed",
|
|
161
|
-
units: [
|
|
162
|
-
{
|
|
163
|
-
titlePattern: "Document Map",
|
|
164
|
-
purposePattern:
|
|
165
|
-
"Hyperlinked file index with role summaries and downstream phase mapping.",
|
|
166
|
-
keywords: [
|
|
167
|
-
"document-map",
|
|
168
|
-
"navigation",
|
|
169
|
-
"file-index",
|
|
170
|
-
"hyperlink",
|
|
171
|
-
],
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
titlePattern: "Canonical Source Declaration",
|
|
175
|
-
purposePattern:
|
|
176
|
-
"Declare which file is the authoritative source for each data type and the required reference format.",
|
|
177
|
-
keywords: [
|
|
178
|
-
"canonical-source",
|
|
179
|
-
"reference-format",
|
|
180
|
-
"backtick",
|
|
181
|
-
"authority",
|
|
182
|
-
],
|
|
183
|
-
},
|
|
184
|
-
],
|
|
185
|
-
},
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
index: 2,
|
|
189
|
-
title: "Glossary and Assumptions",
|
|
190
|
-
purpose: "Domain terminology definitions and project assumptions.",
|
|
191
|
-
unitStrategy: {
|
|
192
|
-
type: "fixed",
|
|
193
|
-
units: [
|
|
194
|
-
{
|
|
195
|
-
titlePattern: "Domain Glossary",
|
|
196
|
-
purposePattern:
|
|
197
|
-
"Define domain-specific terms used throughout the documents.",
|
|
198
|
-
keywords: [
|
|
199
|
-
"glossary",
|
|
200
|
-
"terminology",
|
|
201
|
-
"definitions",
|
|
202
|
-
"domain-language",
|
|
203
|
-
],
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
titlePattern: "Assumptions and Constraints",
|
|
207
|
-
purposePattern:
|
|
208
|
-
"List project assumptions and environmental constraints.",
|
|
209
|
-
keywords: [
|
|
210
|
-
"assumptions",
|
|
211
|
-
"constraints",
|
|
212
|
-
"prerequisites",
|
|
213
|
-
"limitations",
|
|
214
|
-
],
|
|
215
|
-
},
|
|
216
|
-
],
|
|
217
|
-
},
|
|
218
|
-
},
|
|
219
|
-
],
|
|
220
|
-
},
|
|
221
|
-
|
|
222
|
-
// ── 01-actors-and-auth ──
|
|
223
|
-
{
|
|
224
|
-
categoryId: "01-actors-and-auth",
|
|
225
|
-
fileId: "01-actors-and-auth",
|
|
226
|
-
filename: "01-actors-and-auth.md",
|
|
227
|
-
documentType: "actors-and-auth",
|
|
228
|
-
description:
|
|
229
|
-
"Actor definitions, permission matrix, authentication, session, account lifecycle",
|
|
230
|
-
downstreamPhase: "auth-middleware",
|
|
231
|
-
forbiddenPatterns: [
|
|
232
|
-
/\|\s*(?:type|required|default|constraint)\s*\|/i, // Entity attribute tables → 02
|
|
233
|
-
/```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
|
|
234
|
-
],
|
|
235
|
-
modules: [
|
|
236
|
-
{
|
|
237
|
-
index: 0,
|
|
238
|
-
title: "Actor Definitions",
|
|
239
|
-
purpose:
|
|
240
|
-
"Define all user actor types with their identity, permissions, and access boundaries.",
|
|
241
|
-
unitStrategy: {
|
|
242
|
-
type: "perActor",
|
|
243
|
-
unitTemplate: {
|
|
244
|
-
titlePattern: "{name} Actor",
|
|
245
|
-
purposePattern:
|
|
246
|
-
"Define the {name} actor's identity, permissions, and access boundaries. Do NOT describe specific operations (03), data isolation policies (05), or domain concepts (02).",
|
|
247
|
-
keywords: ["actor", "role", "permissions", "access-boundary"],
|
|
248
|
-
},
|
|
249
|
-
},
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
index: 1,
|
|
253
|
-
title: "Authentication Flows",
|
|
254
|
-
purpose:
|
|
255
|
-
"Registration, login, logout, and session management from a user perspective.",
|
|
256
|
-
unitStrategy: {
|
|
257
|
-
type: "fixed",
|
|
258
|
-
units: [
|
|
259
|
-
{
|
|
260
|
-
titlePattern: "Registration and Login",
|
|
261
|
-
purposePattern:
|
|
262
|
-
"Define user registration and login flows including validation and error handling.",
|
|
263
|
-
keywords: ["registration", "login", "authentication"],
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
titlePattern: "Session and Logout",
|
|
267
|
-
purposePattern:
|
|
268
|
-
"Define session behavior and logout from a user perspective.",
|
|
269
|
-
keywords: ["session", "logout", "account-security"],
|
|
270
|
-
},
|
|
271
|
-
],
|
|
272
|
-
},
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
index: 2,
|
|
276
|
-
title: "Account Lifecycle",
|
|
277
|
-
purpose: "Account creation, deletion, and password management.",
|
|
278
|
-
unitStrategy: {
|
|
279
|
-
type: "fixed",
|
|
280
|
-
units: [
|
|
281
|
-
{
|
|
282
|
-
titlePattern: "Account Management",
|
|
283
|
-
purposePattern:
|
|
284
|
-
"Define how users create accounts, delete accounts, and change passwords.",
|
|
285
|
-
keywords: [
|
|
286
|
-
"account-creation",
|
|
287
|
-
"account-deletion",
|
|
288
|
-
"password-change",
|
|
289
|
-
],
|
|
290
|
-
},
|
|
291
|
-
],
|
|
292
|
-
},
|
|
293
|
-
},
|
|
294
|
-
],
|
|
295
|
-
},
|
|
296
|
-
|
|
297
|
-
// ── 02-domain-model ──
|
|
298
|
-
{
|
|
299
|
-
categoryId: "02-domain-model",
|
|
300
|
-
fileId: "02-domain-model",
|
|
301
|
-
filename: "02-domain-model.md",
|
|
302
|
-
documentType: "domain-model",
|
|
303
|
-
description:
|
|
304
|
-
"Business concepts, relationships, and states from user perspective",
|
|
305
|
-
downstreamPhase: "database-design",
|
|
306
|
-
forbiddenPatterns: [
|
|
307
|
-
/\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
|
|
308
|
-
/\bRequest\s+Body\b/i,
|
|
309
|
-
/\bResponse\s+(?:Body|Schema)\b/i,
|
|
310
|
-
],
|
|
311
|
-
modules: [
|
|
312
|
-
{
|
|
313
|
-
index: 0,
|
|
314
|
-
title: "Domain Concepts",
|
|
315
|
-
purpose:
|
|
316
|
-
"Describe what each concept means in the business domain and its key attributes.",
|
|
317
|
-
unitStrategy: {
|
|
318
|
-
type: "perEntity",
|
|
319
|
-
unitTemplate: {
|
|
320
|
-
titlePattern: "{name} Concept",
|
|
321
|
-
purposePattern:
|
|
322
|
-
"Describe what {name} represents in the business domain and its key attributes. Do NOT describe operations or workflows — those belong in 03-functional-requirements.",
|
|
323
|
-
keywords: ["concept", "domain", "business-meaning", "attributes"],
|
|
324
|
-
},
|
|
325
|
-
},
|
|
326
|
-
},
|
|
327
|
-
{
|
|
328
|
-
index: 1,
|
|
329
|
-
title: "Domain Relationships",
|
|
330
|
-
purpose:
|
|
331
|
-
"Describe how concepts relate to each other from a business perspective.",
|
|
332
|
-
unitStrategy: {
|
|
333
|
-
type: "fixed",
|
|
334
|
-
units: [
|
|
335
|
-
{
|
|
336
|
-
titlePattern: "Conceptual Relationships",
|
|
337
|
-
purposePattern:
|
|
338
|
-
"Describe how concepts relate to each other in business terms.",
|
|
339
|
-
keywords: [
|
|
340
|
-
"relationship",
|
|
341
|
-
"association",
|
|
342
|
-
"belongs-to",
|
|
343
|
-
"has-many",
|
|
344
|
-
"ownership",
|
|
345
|
-
],
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
titlePattern: "Lifecycle and Retention",
|
|
349
|
-
purposePattern:
|
|
350
|
-
"Describe concept lifecycle states and transitions only. Detailed retention/recovery policies belong in 05-non-functional. Operation details belong in 03-functional-requirements.",
|
|
351
|
-
keywords: [
|
|
352
|
-
"lifecycle",
|
|
353
|
-
"retention",
|
|
354
|
-
"archival",
|
|
355
|
-
"deletion-policy",
|
|
356
|
-
"recovery",
|
|
357
|
-
],
|
|
358
|
-
},
|
|
359
|
-
],
|
|
360
|
-
},
|
|
361
|
-
},
|
|
362
|
-
{
|
|
363
|
-
index: 2,
|
|
364
|
-
title: "Business Categories and State Flows",
|
|
365
|
-
purpose:
|
|
366
|
-
"Business category classifications and state flow definitions.",
|
|
367
|
-
unitStrategy: {
|
|
368
|
-
type: "fixed",
|
|
369
|
-
units: [
|
|
370
|
-
{
|
|
371
|
-
titlePattern: "Business Category Definitions",
|
|
372
|
-
purposePattern:
|
|
373
|
-
"Define all business category classifications with their allowed values and descriptions.",
|
|
374
|
-
keywords: [
|
|
375
|
-
"business-category",
|
|
376
|
-
"classification",
|
|
377
|
-
"allowed-values",
|
|
378
|
-
"status-type",
|
|
379
|
-
],
|
|
380
|
-
},
|
|
381
|
-
{
|
|
382
|
-
titlePattern: "State Transitions",
|
|
383
|
-
purposePattern:
|
|
384
|
-
"Define valid state transition paths for stateful concepts.",
|
|
385
|
-
keywords: [
|
|
386
|
-
"state-flow",
|
|
387
|
-
"transition",
|
|
388
|
-
"workflow",
|
|
389
|
-
"status-change",
|
|
390
|
-
],
|
|
391
|
-
},
|
|
392
|
-
],
|
|
393
|
-
},
|
|
394
|
-
},
|
|
395
|
-
],
|
|
396
|
-
},
|
|
397
|
-
|
|
398
|
-
// ── 03-functional-requirements ──
|
|
399
|
-
{
|
|
400
|
-
categoryId: "03-functional-requirements",
|
|
401
|
-
fileId: "03-functional-requirements",
|
|
402
|
-
filename: "03-functional-requirements.md",
|
|
403
|
-
documentType: "functional-requirements",
|
|
404
|
-
description:
|
|
405
|
-
"What operations users can perform, use cases, business workflows",
|
|
406
|
-
downstreamPhase: "interface-design",
|
|
407
|
-
forbiddenPatterns: [
|
|
408
|
-
/\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs FORBIDDEN in requirements
|
|
409
|
-
/\bHTTP\s+[1-5]\d{2}\b/i, // HTTP status codes FORBIDDEN
|
|
410
|
-
/\bRequest\s+(?:Body|Example)\b/i, // Request schemas FORBIDDEN
|
|
411
|
-
/\bResponse\s+(?:Body|Example|Schema)\b/i, // Response schemas FORBIDDEN
|
|
412
|
-
/```json\s*\n\s*\{/i, // JSON examples FORBIDDEN
|
|
413
|
-
/\b(?:CREATE\s+)?(?:UNIQUE\s+)?INDEX\b/i, // Index defs → 02
|
|
414
|
-
/\bON\s+DELETE\s+(?:CASCADE|SET\s+NULL|RESTRICT)\b/i, // Cascade rules → 02
|
|
415
|
-
/```yaml\s*\n\s*errors:/i, // Error catalog YAML → 04
|
|
416
|
-
],
|
|
417
|
-
modules: [
|
|
418
|
-
{
|
|
419
|
-
index: 0,
|
|
420
|
-
title: "Core Business Operations",
|
|
421
|
-
purpose: "What the system must do for each business concept.",
|
|
422
|
-
unitStrategy: {
|
|
423
|
-
type: "perEntity",
|
|
424
|
-
unitTemplate: {
|
|
425
|
-
titlePattern: "{name} Operations",
|
|
426
|
-
purposePattern:
|
|
427
|
-
"Define business operations for {name}: what create, read, update, delete, and list operations must accomplish from a business perspective.",
|
|
428
|
-
keywords: [
|
|
429
|
-
"operation",
|
|
430
|
-
"business-logic",
|
|
431
|
-
"use-case",
|
|
432
|
-
"requirement",
|
|
433
|
-
"behavior",
|
|
434
|
-
"functionality",
|
|
435
|
-
],
|
|
436
|
-
},
|
|
437
|
-
},
|
|
438
|
-
},
|
|
439
|
-
{
|
|
440
|
-
index: 1,
|
|
441
|
-
title: "Error Scenarios and Edge Cases",
|
|
442
|
-
purpose:
|
|
443
|
-
"Business-level error scenarios, edge case coverage, and expected system behaviors for exceptional conditions.",
|
|
444
|
-
unitStrategy: {
|
|
445
|
-
type: "perEntity",
|
|
446
|
-
unitTemplate: {
|
|
447
|
-
titlePattern: "{name} Error Scenarios",
|
|
448
|
-
purposePattern:
|
|
449
|
-
"Define business error conditions, edge cases, and expected system behaviors for all {name} operations.",
|
|
450
|
-
keywords: [
|
|
451
|
-
"error-scenario",
|
|
452
|
-
"edge-case",
|
|
453
|
-
"validation-rule",
|
|
454
|
-
"conflict-resolution",
|
|
455
|
-
"boundary-condition",
|
|
456
|
-
],
|
|
457
|
-
},
|
|
458
|
-
},
|
|
459
|
-
},
|
|
460
|
-
{
|
|
461
|
-
index: 2,
|
|
462
|
-
title: "End-to-End User Scenarios",
|
|
463
|
-
purpose:
|
|
464
|
-
"Cross-domain user scenarios that span multiple concepts, describing complete user journeys.",
|
|
465
|
-
unitStrategy: {
|
|
466
|
-
type: "fixed",
|
|
467
|
-
units: [
|
|
468
|
-
{
|
|
469
|
-
titlePattern: "Cross-Domain User Scenarios",
|
|
470
|
-
purposePattern:
|
|
471
|
-
"Define end-to-end user scenarios that span multiple concepts, describing complete user journeys from start to finish.",
|
|
472
|
-
keywords: [
|
|
473
|
-
"user-scenario",
|
|
474
|
-
"end-to-end",
|
|
475
|
-
"multi-step",
|
|
476
|
-
"user-journey",
|
|
477
|
-
],
|
|
478
|
-
},
|
|
479
|
-
],
|
|
480
|
-
},
|
|
481
|
-
},
|
|
482
|
-
],
|
|
483
|
-
},
|
|
484
|
-
|
|
485
|
-
// ── 04-business-rules ──
|
|
486
|
-
{
|
|
487
|
-
categoryId: "04-business-rules",
|
|
488
|
-
fileId: "04-business-rules",
|
|
489
|
-
filename: "04-business-rules.md",
|
|
490
|
-
documentType: "business-rules",
|
|
491
|
-
description:
|
|
492
|
-
"Business rules, validation constraints, data browsing expectations, error scenarios",
|
|
493
|
-
downstreamPhase: "service-layer",
|
|
494
|
-
forbiddenPatterns: [
|
|
495
|
-
/```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
|
|
496
|
-
/\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
|
|
497
|
-
],
|
|
498
|
-
modules: [
|
|
499
|
-
{
|
|
500
|
-
index: 0,
|
|
501
|
-
title: "Domain Business Rules",
|
|
502
|
-
purpose:
|
|
503
|
-
"Per-concept business rules, validation logic, and domain constraints.",
|
|
504
|
-
unitStrategy: {
|
|
505
|
-
type: "perEntity",
|
|
506
|
-
unitTemplate: {
|
|
507
|
-
titlePattern: "{name} Rules",
|
|
508
|
-
purposePattern:
|
|
509
|
-
"Define validation rules and domain constraints for {name}. Do NOT repeat data isolation (05), lifecycle states (02), or operation flows (03).",
|
|
510
|
-
keywords: [
|
|
511
|
-
"business-rule",
|
|
512
|
-
"validation",
|
|
513
|
-
"constraint",
|
|
514
|
-
"domain-logic",
|
|
515
|
-
],
|
|
516
|
-
},
|
|
517
|
-
},
|
|
518
|
-
},
|
|
519
|
-
{
|
|
520
|
-
index: 1,
|
|
521
|
-
title: "Data Browsing Expectations",
|
|
522
|
-
purpose:
|
|
523
|
-
"Business expectations for how users browse, find, and navigate through lists of data.",
|
|
524
|
-
unitStrategy: {
|
|
525
|
-
type: "fixed",
|
|
526
|
-
units: [
|
|
527
|
-
{
|
|
528
|
-
titlePattern: "List Browsing Expectations",
|
|
529
|
-
purposePattern:
|
|
530
|
-
"Define business expectations for how users find, filter, and browse lists.",
|
|
531
|
-
keywords: ["filtering", "sorting", "pagination"],
|
|
532
|
-
},
|
|
533
|
-
],
|
|
534
|
-
},
|
|
535
|
-
},
|
|
536
|
-
{
|
|
537
|
-
index: 2,
|
|
538
|
-
title: "Error Conditions",
|
|
539
|
-
purpose: "Business error scenarios and how the system should respond.",
|
|
540
|
-
unitStrategy: {
|
|
541
|
-
type: "fixed",
|
|
542
|
-
units: [
|
|
543
|
-
{
|
|
544
|
-
titlePattern: "Error Scenarios",
|
|
545
|
-
purposePattern:
|
|
546
|
-
"Describe error conditions and expected system responses in natural language.",
|
|
547
|
-
keywords: [
|
|
548
|
-
"error-scenario",
|
|
549
|
-
"rejection",
|
|
550
|
-
"failure-case",
|
|
551
|
-
"exception",
|
|
552
|
-
],
|
|
553
|
-
},
|
|
554
|
-
],
|
|
555
|
-
},
|
|
556
|
-
},
|
|
557
|
-
],
|
|
558
|
-
},
|
|
559
|
-
|
|
560
|
-
// ── 05-non-functional ──
|
|
561
|
-
{
|
|
562
|
-
categoryId: "05-non-functional",
|
|
563
|
-
fileId: "05-non-functional",
|
|
564
|
-
filename: "05-non-functional.md",
|
|
565
|
-
documentType: "non-functional",
|
|
566
|
-
description: "Data ownership, privacy, retention, and recovery policies",
|
|
567
|
-
downstreamPhase: "test-infra",
|
|
568
|
-
forbiddenPatterns: [
|
|
569
|
-
/\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
|
|
570
|
-
/```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
|
|
571
|
-
],
|
|
572
|
-
modules: [
|
|
573
|
-
{
|
|
574
|
-
index: 0,
|
|
575
|
-
title: "Data Policies",
|
|
576
|
-
purpose:
|
|
577
|
-
"Data ownership, privacy, retention, and recovery policies from a business perspective.",
|
|
578
|
-
unitStrategy: {
|
|
579
|
-
type: "fixed",
|
|
580
|
-
units: [
|
|
581
|
-
{
|
|
582
|
-
titlePattern: "Data Ownership and Privacy",
|
|
583
|
-
purposePattern:
|
|
584
|
-
"Define who owns what data, who can access it, and privacy boundaries between users.",
|
|
585
|
-
keywords: [
|
|
586
|
-
"data-isolation",
|
|
587
|
-
"ownership",
|
|
588
|
-
"access-control",
|
|
589
|
-
"privacy",
|
|
590
|
-
],
|
|
591
|
-
},
|
|
592
|
-
{
|
|
593
|
-
titlePattern: "Data Retention and Recovery",
|
|
594
|
-
purposePattern:
|
|
595
|
-
"Define what happens to deleted data, how long it is retained, and how users can recover it.",
|
|
596
|
-
keywords: [
|
|
597
|
-
"soft-delete",
|
|
598
|
-
"retention",
|
|
599
|
-
"recovery",
|
|
600
|
-
"permanent-deletion",
|
|
601
|
-
],
|
|
602
|
-
},
|
|
603
|
-
],
|
|
604
|
-
},
|
|
605
|
-
},
|
|
606
|
-
],
|
|
607
|
-
},
|
|
608
|
-
];
|
|
609
|
-
|
|
610
|
-
// ─────────────────────────────────────────────
|
|
611
|
-
// Conditional modules (activated by features)
|
|
612
|
-
// ─────────────────────────────────────────────
|
|
613
|
-
|
|
614
|
-
export const FIXED_ANALYZE_TEMPLATE_CONDITIONAL_MODULES: Record<
|
|
615
|
-
FixedAnalyzeTemplateFeatureId,
|
|
616
|
-
Array<{
|
|
617
|
-
targetCategory: FixedAnalyzeTemplateCategoryId;
|
|
618
|
-
module: FixedAnalyzeTemplateModuleTemplate;
|
|
619
|
-
}>
|
|
620
|
-
> = {
|
|
621
|
-
"real-time": [
|
|
622
|
-
{
|
|
623
|
-
targetCategory: "03-functional-requirements",
|
|
624
|
-
module: {
|
|
625
|
-
index: 100, // appended after base modules
|
|
626
|
-
title: "Real-time Events",
|
|
627
|
-
purpose:
|
|
628
|
-
"WebSocket/SSE event definitions and subscription specifications.",
|
|
629
|
-
unitStrategy: {
|
|
630
|
-
type: "perEntity",
|
|
631
|
-
unitTemplate: {
|
|
632
|
-
titlePattern: "{name} Events",
|
|
633
|
-
purposePattern:
|
|
634
|
-
"Define real-time events for {name} changes, including event payload and subscription rules.",
|
|
635
|
-
keywords: [
|
|
636
|
-
"websocket",
|
|
637
|
-
"sse",
|
|
638
|
-
"event",
|
|
639
|
-
"subscription",
|
|
640
|
-
"real-time",
|
|
641
|
-
],
|
|
642
|
-
},
|
|
643
|
-
},
|
|
644
|
-
},
|
|
645
|
-
},
|
|
646
|
-
{
|
|
647
|
-
targetCategory: "05-non-functional",
|
|
648
|
-
module: {
|
|
649
|
-
index: 100,
|
|
650
|
-
title: "Real-time Communication",
|
|
651
|
-
purpose:
|
|
652
|
-
"WebSocket/SSE connection policies and performance requirements.",
|
|
653
|
-
unitStrategy: {
|
|
654
|
-
type: "fixed",
|
|
655
|
-
units: [
|
|
656
|
-
{
|
|
657
|
-
titlePattern: "WebSocket Security and Performance",
|
|
658
|
-
purposePattern:
|
|
659
|
-
"Define connection limits, heartbeat intervals, reconnection policies, and security requirements for real-time communication.",
|
|
660
|
-
keywords: [
|
|
661
|
-
"websocket-security",
|
|
662
|
-
"connection-limit",
|
|
663
|
-
"heartbeat",
|
|
664
|
-
"reconnection",
|
|
665
|
-
],
|
|
666
|
-
},
|
|
667
|
-
],
|
|
668
|
-
},
|
|
669
|
-
},
|
|
670
|
-
},
|
|
671
|
-
],
|
|
672
|
-
"external-integration": [
|
|
673
|
-
{
|
|
674
|
-
targetCategory: "03-functional-requirements",
|
|
675
|
-
module: {
|
|
676
|
-
index: 101,
|
|
677
|
-
title: "External Integrations",
|
|
678
|
-
purpose:
|
|
679
|
-
"Third-party API contracts, webhook handlers, and integration specifications.",
|
|
680
|
-
unitStrategy: {
|
|
681
|
-
type: "fixed",
|
|
682
|
-
units: [
|
|
683
|
-
{
|
|
684
|
-
titlePattern: "Integration Contracts",
|
|
685
|
-
purposePattern:
|
|
686
|
-
"Define external API dependencies, authentication methods, request/response formats, and error handling for third-party integrations.",
|
|
687
|
-
keywords: [
|
|
688
|
-
"integration",
|
|
689
|
-
"third-party",
|
|
690
|
-
"webhook",
|
|
691
|
-
"oauth-provider",
|
|
692
|
-
"payment",
|
|
693
|
-
],
|
|
694
|
-
},
|
|
695
|
-
],
|
|
696
|
-
},
|
|
697
|
-
},
|
|
698
|
-
},
|
|
699
|
-
{
|
|
700
|
-
targetCategory: "04-business-rules",
|
|
701
|
-
module: {
|
|
702
|
-
index: 100,
|
|
703
|
-
title: "Integration Error Handling",
|
|
704
|
-
purpose: "Error handling and retry policies for external integrations.",
|
|
705
|
-
unitStrategy: {
|
|
706
|
-
type: "fixed",
|
|
707
|
-
units: [
|
|
708
|
-
{
|
|
709
|
-
titlePattern: "Integration Failure Policies",
|
|
710
|
-
purposePattern:
|
|
711
|
-
"Define retry strategies, circuit breaker policies, fallback behavior, and error escalation for external service failures.",
|
|
712
|
-
keywords: [
|
|
713
|
-
"retry",
|
|
714
|
-
"circuit-breaker",
|
|
715
|
-
"fallback",
|
|
716
|
-
"integration-error",
|
|
717
|
-
],
|
|
718
|
-
},
|
|
719
|
-
],
|
|
720
|
-
},
|
|
721
|
-
},
|
|
722
|
-
},
|
|
723
|
-
{
|
|
724
|
-
targetCategory: "05-non-functional",
|
|
725
|
-
module: {
|
|
726
|
-
index: 101,
|
|
727
|
-
title: "External Dependency SLOs",
|
|
728
|
-
purpose:
|
|
729
|
-
"Service level objectives for external dependency availability.",
|
|
730
|
-
unitStrategy: {
|
|
731
|
-
type: "fixed",
|
|
732
|
-
units: [
|
|
733
|
-
{
|
|
734
|
-
titlePattern: "External Dependency SLOs",
|
|
735
|
-
purposePattern:
|
|
736
|
-
"Define availability expectations, timeout thresholds, and degradation policies for external service dependencies.",
|
|
737
|
-
keywords: [
|
|
738
|
-
"dependency-slo",
|
|
739
|
-
"timeout",
|
|
740
|
-
"degradation",
|
|
741
|
-
"external-availability",
|
|
742
|
-
],
|
|
743
|
-
},
|
|
744
|
-
],
|
|
745
|
-
},
|
|
746
|
-
},
|
|
747
|
-
},
|
|
748
|
-
],
|
|
749
|
-
"file-storage": [
|
|
750
|
-
{
|
|
751
|
-
targetCategory: "03-functional-requirements",
|
|
752
|
-
module: {
|
|
753
|
-
index: 103,
|
|
754
|
-
title: "File Storage",
|
|
755
|
-
purpose:
|
|
756
|
-
"File upload capabilities, media processing, and storage requirements.",
|
|
757
|
-
unitStrategy: {
|
|
758
|
-
type: "fixed",
|
|
759
|
-
units: [
|
|
760
|
-
{
|
|
761
|
-
titlePattern: "File Upload and Management",
|
|
762
|
-
purposePattern:
|
|
763
|
-
"Define file upload capabilities, supported formats, processing requirements, and access control for stored files.",
|
|
764
|
-
keywords: ["file-upload", "media", "storage", "attachment"],
|
|
765
|
-
},
|
|
766
|
-
],
|
|
767
|
-
},
|
|
768
|
-
},
|
|
769
|
-
},
|
|
770
|
-
{
|
|
771
|
-
targetCategory: "04-business-rules",
|
|
772
|
-
module: {
|
|
773
|
-
index: 102,
|
|
774
|
-
title: "File Validation Rules",
|
|
775
|
-
purpose: "Validation rules and policies for file uploads and storage.",
|
|
776
|
-
unitStrategy: {
|
|
777
|
-
type: "fixed",
|
|
778
|
-
units: [
|
|
779
|
-
{
|
|
780
|
-
titlePattern: "File Validation and Policies",
|
|
781
|
-
purposePattern:
|
|
782
|
-
"Define file type restrictions, virus scanning requirements, content validation, and retention policies for uploaded files.",
|
|
783
|
-
keywords: [
|
|
784
|
-
"file-validation",
|
|
785
|
-
"virus-scan",
|
|
786
|
-
"content-type",
|
|
787
|
-
"retention",
|
|
788
|
-
],
|
|
789
|
-
},
|
|
790
|
-
],
|
|
791
|
-
},
|
|
792
|
-
},
|
|
793
|
-
},
|
|
794
|
-
{
|
|
795
|
-
targetCategory: "05-non-functional",
|
|
796
|
-
module: {
|
|
797
|
-
index: 103,
|
|
798
|
-
title: "Storage Capacity",
|
|
799
|
-
purpose: "Storage capacity planning and CDN requirements.",
|
|
800
|
-
unitStrategy: {
|
|
801
|
-
type: "fixed",
|
|
802
|
-
units: [
|
|
803
|
-
{
|
|
804
|
-
titlePattern: "Storage Capacity Requirements",
|
|
805
|
-
purposePattern:
|
|
806
|
-
"Define storage requirements and capacity planning for file storage.",
|
|
807
|
-
keywords: ["storage-capacity", "cdn", "capacity"],
|
|
808
|
-
},
|
|
809
|
-
],
|
|
810
|
-
},
|
|
811
|
-
},
|
|
812
|
-
},
|
|
813
|
-
],
|
|
814
|
-
};
|
|
815
|
-
|
|
816
|
-
// ─────────────────────────────────────────────
|
|
817
|
-
// Helper functions
|
|
818
|
-
// ─────────────────────────────────────────────
|
|
819
|
-
|
|
820
|
-
/**
|
|
821
|
-
* Expand a module's unit strategy into concrete unit templates based on the
|
|
822
|
-
* domain's entities and actors.
|
|
823
|
-
*/
|
|
824
|
-
export const expandFixedAnalyzeTemplateUnits = (
|
|
825
|
-
module: FixedAnalyzeTemplateModuleTemplate,
|
|
826
|
-
entities: Array<{ name: string }>,
|
|
827
|
-
actors: Array<{ name: string }>,
|
|
828
|
-
): FixedAnalyzeTemplateUnitTemplate[] => {
|
|
829
|
-
const strategy = module.unitStrategy;
|
|
830
|
-
switch (strategy.type) {
|
|
831
|
-
case "fixed":
|
|
832
|
-
return strategy.units;
|
|
833
|
-
case "perEntity":
|
|
834
|
-
return entities.map((e) => ({
|
|
835
|
-
titlePattern: strategy.unitTemplate.titlePattern.replace(
|
|
836
|
-
"{name}",
|
|
837
|
-
e.name,
|
|
838
|
-
),
|
|
839
|
-
purposePattern: strategy.unitTemplate.purposePattern.replace(
|
|
840
|
-
"{name}",
|
|
841
|
-
e.name,
|
|
842
|
-
),
|
|
843
|
-
keywords: [...strategy.unitTemplate.keywords, e.name.toLowerCase()],
|
|
844
|
-
}));
|
|
845
|
-
case "perActor":
|
|
846
|
-
return actors.map((a) => ({
|
|
847
|
-
titlePattern: strategy.unitTemplate.titlePattern.replace(
|
|
848
|
-
"{name}",
|
|
849
|
-
a.name,
|
|
850
|
-
),
|
|
851
|
-
purposePattern: strategy.unitTemplate.purposePattern.replace(
|
|
852
|
-
"{name}",
|
|
853
|
-
a.name,
|
|
854
|
-
),
|
|
855
|
-
keywords: [...strategy.unitTemplate.keywords, a.name.toLowerCase()],
|
|
856
|
-
}));
|
|
857
|
-
case "perEntityGroup":
|
|
858
|
-
// For now, entity groups = entities; can be refined later
|
|
859
|
-
return entities.map((e) => ({
|
|
860
|
-
titlePattern: strategy.unitTemplate.titlePattern.replace(
|
|
861
|
-
"{name}",
|
|
862
|
-
e.name,
|
|
863
|
-
),
|
|
864
|
-
purposePattern: strategy.unitTemplate.purposePattern.replace(
|
|
865
|
-
"{name}",
|
|
866
|
-
e.name,
|
|
867
|
-
),
|
|
868
|
-
keywords: [...strategy.unitTemplate.keywords, e.name.toLowerCase()],
|
|
869
|
-
}));
|
|
870
|
-
}
|
|
871
|
-
};
|
|
872
|
-
|
|
873
|
-
/**
|
|
874
|
-
* Build an expanded template by merging base TEMPLATE with conditional modules
|
|
875
|
-
* activated by the given features.
|
|
876
|
-
*
|
|
877
|
-
* Module indices are renumbered sequentially per file after merging.
|
|
878
|
-
*/
|
|
879
|
-
export const buildFixedAnalyzeExpandedTemplate = (
|
|
880
|
-
features: FixedAnalyzeTemplateFeature[],
|
|
881
|
-
): FixedAnalyzeTemplateFileTemplate[] => {
|
|
882
|
-
if (features.length === 0) return FIXED_ANALYZE_TEMPLATE;
|
|
883
|
-
|
|
884
|
-
const activeFeatureIds = new Set(features.map((f) => f.id));
|
|
885
|
-
const extraModules = new Map<
|
|
886
|
-
FixedAnalyzeTemplateCategoryId,
|
|
887
|
-
FixedAnalyzeTemplateModuleTemplate[]
|
|
888
|
-
>();
|
|
889
|
-
|
|
890
|
-
for (const featureId of activeFeatureIds) {
|
|
891
|
-
const conditionals = FIXED_ANALYZE_TEMPLATE_CONDITIONAL_MODULES[featureId];
|
|
892
|
-
for (const { targetCategory, module } of conditionals) {
|
|
893
|
-
const existing = extraModules.get(targetCategory) ?? [];
|
|
894
|
-
existing.push(module);
|
|
895
|
-
extraModules.set(targetCategory, existing);
|
|
896
|
-
}
|
|
897
|
-
}
|
|
898
|
-
|
|
899
|
-
return FIXED_ANALYZE_TEMPLATE.map((fileTemplate) => {
|
|
900
|
-
const extras = extraModules.get(fileTemplate.categoryId);
|
|
901
|
-
if (!extras || extras.length === 0) return fileTemplate;
|
|
902
|
-
|
|
903
|
-
const mergedModules = [...fileTemplate.modules, ...extras].map((m, i) => ({
|
|
904
|
-
...m,
|
|
905
|
-
index: i,
|
|
906
|
-
}));
|
|
907
|
-
|
|
908
|
-
return { ...fileTemplate, modules: mergedModules };
|
|
909
|
-
});
|
|
910
|
-
};
|
|
911
|
-
|
|
912
|
-
/**
|
|
913
|
-
* Generate AutoBeAnalyze.IFile.Scenario objects from the fixed template,
|
|
914
|
-
* optionally expanded with conditional modules based on features. Called after
|
|
915
|
-
* LLM returns actors/entities/features in the scenario phase.
|
|
916
|
-
*/
|
|
917
|
-
export const buildFixedAnalyzeScenarioFiles = (
|
|
918
|
-
_prefix: string,
|
|
919
|
-
features: FixedAnalyzeTemplateFeature[] = [],
|
|
920
|
-
): AutoBeAnalyze.IFileScenario[] =>
|
|
921
|
-
buildFixedAnalyzeExpandedTemplate(features).map((t) => ({
|
|
922
|
-
reason: `Fixed SRS structure: ${t.description}`,
|
|
923
|
-
filename: t.filename,
|
|
924
|
-
documentType: t.documentType,
|
|
925
|
-
outline: t.modules.map((m) => m.title),
|
|
926
|
-
audience: "general",
|
|
927
|
-
detailLevel: "detailed specification",
|
|
928
|
-
constraints: [
|
|
929
|
-
`File scope: ${t.description}`,
|
|
930
|
-
`Downstream phase: ${t.downstreamPhase}`,
|
|
931
|
-
],
|
|
932
|
-
}));
|
|
933
|
-
|
|
934
|
-
/** Deterministically generate the Document Map unit content for 00-toc. */
|
|
935
|
-
export const buildFixedAnalyzeDocumentMapContent = (
|
|
936
|
-
files: FixedAnalyzeTemplateFileTemplate[],
|
|
937
|
-
): string => {
|
|
938
|
-
const rows = files
|
|
939
|
-
.map(
|
|
940
|
-
(f) =>
|
|
941
|
-
`| [${f.filename}](./${f.filename}) | ${f.description} | ${f.downstreamPhase} |`,
|
|
942
|
-
)
|
|
943
|
-
.join("\n");
|
|
944
|
-
return `| File | Role | Downstream |\n|------|------|------------|\n${rows}`;
|
|
945
|
-
};
|
|
946
|
-
|
|
947
|
-
/** Deterministically generate the Canonical Source Declaration unit content. */
|
|
948
|
-
export const buildFixedAnalyzeCanonicalSourceContent = (): string => {
|
|
949
|
-
const header = `Each type of information has one authoritative location. Other files should reference these canonical sources.\n`;
|
|
950
|
-
const table = [
|
|
951
|
-
"| Information Type | Canonical File |",
|
|
952
|
-
"|------------------|---------------|",
|
|
953
|
-
"| Domain concepts | [02-domain-model.md](./02-domain-model.md) |",
|
|
954
|
-
"| Error conditions | [04-business-rules.md](./04-business-rules.md) |",
|
|
955
|
-
"| Permissions | [01-actors-and-auth.md](./01-actors-and-auth.md) |",
|
|
956
|
-
"| Actor definitions | [01-actors-and-auth.md](./01-actors-and-auth.md) |",
|
|
957
|
-
"| Filtering/pagination rules | [04-business-rules.md](./04-business-rules.md) |",
|
|
958
|
-
"| Data retention/recovery | [05-non-functional.md](./05-non-functional.md) |",
|
|
959
|
-
].join("\n");
|
|
960
|
-
return `${header}\n${table}`;
|
|
961
|
-
};
|
|
1
|
+
import { AutoBeAnalyze } from "@autobe/interface";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Fixed 6-category SRS document structure template.
|
|
5
|
+
*
|
|
6
|
+
* Defines the authoritative structure for all analysis documents. LLM is no
|
|
7
|
+
* longer responsible for deciding file count, file names, or module/unit
|
|
8
|
+
* layout. Instead, it focuses solely on content generation within this fixed
|
|
9
|
+
* skeleton.
|
|
10
|
+
*
|
|
11
|
+
* Hierarchy: Category (file) -> Module (#) -> Unit (##) -> Section (###)
|
|
12
|
+
*
|
|
13
|
+
* @author Juntak
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
// ─────────────────────────────────────────────
|
|
17
|
+
// Types
|
|
18
|
+
// ─────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
export type FixedAnalyzeTemplateCategoryId =
|
|
21
|
+
| "00-toc"
|
|
22
|
+
| "01-actors-and-auth"
|
|
23
|
+
| "02-domain-model"
|
|
24
|
+
| "03-functional-requirements"
|
|
25
|
+
| "04-business-rules"
|
|
26
|
+
| "05-non-functional";
|
|
27
|
+
|
|
28
|
+
export interface FixedAnalyzeTemplateFileTemplate {
|
|
29
|
+
categoryId: FixedAnalyzeTemplateCategoryId;
|
|
30
|
+
/** Currently equals categoryId; reserved for future per-category splits. */
|
|
31
|
+
fileId: string;
|
|
32
|
+
filename: `${string}.md`;
|
|
33
|
+
documentType: string;
|
|
34
|
+
description: string;
|
|
35
|
+
downstreamPhase: string;
|
|
36
|
+
modules: FixedAnalyzeTemplateModuleTemplate[];
|
|
37
|
+
/** Regex patterns that must NOT appear in this file's sections. */
|
|
38
|
+
forbiddenPatterns: RegExp[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface FixedAnalyzeTemplateModuleTemplate {
|
|
42
|
+
index: number;
|
|
43
|
+
title: string;
|
|
44
|
+
purpose: string;
|
|
45
|
+
unitStrategy: FixedAnalyzeTemplateUnitStrategy;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type FixedAnalyzeTemplateUnitStrategy =
|
|
49
|
+
| FixedAnalyzeTemplateFixedUnits
|
|
50
|
+
| FixedAnalyzeTemplatePerEntityUnits
|
|
51
|
+
| FixedAnalyzeTemplatePerActorUnits
|
|
52
|
+
| FixedAnalyzeTemplatePerEntityGroupUnits;
|
|
53
|
+
|
|
54
|
+
export interface FixedAnalyzeTemplateFixedUnits {
|
|
55
|
+
type: "fixed";
|
|
56
|
+
units: FixedAnalyzeTemplateUnitTemplate[];
|
|
57
|
+
}
|
|
58
|
+
export interface FixedAnalyzeTemplatePerEntityUnits {
|
|
59
|
+
type: "perEntity";
|
|
60
|
+
unitTemplate: FixedAnalyzeTemplateUnitTemplate;
|
|
61
|
+
}
|
|
62
|
+
export interface FixedAnalyzeTemplatePerActorUnits {
|
|
63
|
+
type: "perActor";
|
|
64
|
+
unitTemplate: FixedAnalyzeTemplateUnitTemplate;
|
|
65
|
+
}
|
|
66
|
+
export interface FixedAnalyzeTemplatePerEntityGroupUnits {
|
|
67
|
+
type: "perEntityGroup";
|
|
68
|
+
unitTemplate: FixedAnalyzeTemplateUnitTemplate;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface FixedAnalyzeTemplateUnitTemplate {
|
|
72
|
+
titlePattern: string;
|
|
73
|
+
purposePattern: string;
|
|
74
|
+
keywords: string[];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// ─────────────────────────────────────────────
|
|
78
|
+
// Feature types (conditional module activation)
|
|
79
|
+
// ─────────────────────────────────────────────
|
|
80
|
+
|
|
81
|
+
export type FixedAnalyzeTemplateFeatureId =
|
|
82
|
+
| "real-time"
|
|
83
|
+
| "external-integration"
|
|
84
|
+
| "file-storage";
|
|
85
|
+
|
|
86
|
+
export interface FixedAnalyzeTemplateFeature {
|
|
87
|
+
id: FixedAnalyzeTemplateFeatureId;
|
|
88
|
+
/** Provider names for external-integration (e.g., ["stripe", "sendgrid"]) */
|
|
89
|
+
providers?: string[];
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ─────────────────────────────────────────────
|
|
93
|
+
// Canonical source mapping
|
|
94
|
+
// ─────────────────────────────────────────────
|
|
95
|
+
|
|
96
|
+
export const FIXED_ANALYZE_TEMPLATE_CANONICAL_SOURCE: Record<
|
|
97
|
+
string,
|
|
98
|
+
FixedAnalyzeTemplateCategoryId
|
|
99
|
+
> = {
|
|
100
|
+
"domain-concepts": "02-domain-model",
|
|
101
|
+
"error-conditions": "04-business-rules",
|
|
102
|
+
permissions: "01-actors-and-auth",
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// ─────────────────────────────────────────────
|
|
106
|
+
// 6-file template definition
|
|
107
|
+
// ─────────────────────────────────────────────
|
|
108
|
+
|
|
109
|
+
export const FIXED_ANALYZE_TEMPLATE: FixedAnalyzeTemplateFileTemplate[] = [
|
|
110
|
+
// ── 00-toc ──
|
|
111
|
+
{
|
|
112
|
+
categoryId: "00-toc",
|
|
113
|
+
fileId: "00-toc",
|
|
114
|
+
filename: "00-toc.md",
|
|
115
|
+
documentType: "overview",
|
|
116
|
+
description: "Project summary, scope, glossary, and assumptions",
|
|
117
|
+
downstreamPhase: "project-setup",
|
|
118
|
+
forbiddenPatterns: [],
|
|
119
|
+
modules: [
|
|
120
|
+
{
|
|
121
|
+
index: 0,
|
|
122
|
+
title: "Project Summary",
|
|
123
|
+
purpose: "High-level vision, goals, and scope of the project.",
|
|
124
|
+
unitStrategy: {
|
|
125
|
+
type: "fixed",
|
|
126
|
+
units: [
|
|
127
|
+
{
|
|
128
|
+
titlePattern: "Vision and Goals",
|
|
129
|
+
purposePattern:
|
|
130
|
+
"Define the project vision, business objectives, and success criteria.",
|
|
131
|
+
keywords: [
|
|
132
|
+
"vision",
|
|
133
|
+
"goals",
|
|
134
|
+
"objectives",
|
|
135
|
+
"success-criteria",
|
|
136
|
+
"business-value",
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
titlePattern: "Scope Definition",
|
|
141
|
+
purposePattern:
|
|
142
|
+
"Define what is in-scope and out-of-scope for this project.",
|
|
143
|
+
keywords: [
|
|
144
|
+
"scope",
|
|
145
|
+
"boundaries",
|
|
146
|
+
"in-scope",
|
|
147
|
+
"out-of-scope",
|
|
148
|
+
"constraints",
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
index: 1,
|
|
156
|
+
title: "Document Map and Canonical Sources",
|
|
157
|
+
purpose:
|
|
158
|
+
"Navigation index and authoritative source declarations for cross-file references.",
|
|
159
|
+
unitStrategy: {
|
|
160
|
+
type: "fixed",
|
|
161
|
+
units: [
|
|
162
|
+
{
|
|
163
|
+
titlePattern: "Document Map",
|
|
164
|
+
purposePattern:
|
|
165
|
+
"Hyperlinked file index with role summaries and downstream phase mapping.",
|
|
166
|
+
keywords: [
|
|
167
|
+
"document-map",
|
|
168
|
+
"navigation",
|
|
169
|
+
"file-index",
|
|
170
|
+
"hyperlink",
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
titlePattern: "Canonical Source Declaration",
|
|
175
|
+
purposePattern:
|
|
176
|
+
"Declare which file is the authoritative source for each data type and the required reference format.",
|
|
177
|
+
keywords: [
|
|
178
|
+
"canonical-source",
|
|
179
|
+
"reference-format",
|
|
180
|
+
"backtick",
|
|
181
|
+
"authority",
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
index: 2,
|
|
189
|
+
title: "Glossary and Assumptions",
|
|
190
|
+
purpose: "Domain terminology definitions and project assumptions.",
|
|
191
|
+
unitStrategy: {
|
|
192
|
+
type: "fixed",
|
|
193
|
+
units: [
|
|
194
|
+
{
|
|
195
|
+
titlePattern: "Domain Glossary",
|
|
196
|
+
purposePattern:
|
|
197
|
+
"Define domain-specific terms used throughout the documents.",
|
|
198
|
+
keywords: [
|
|
199
|
+
"glossary",
|
|
200
|
+
"terminology",
|
|
201
|
+
"definitions",
|
|
202
|
+
"domain-language",
|
|
203
|
+
],
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
titlePattern: "Assumptions and Constraints",
|
|
207
|
+
purposePattern:
|
|
208
|
+
"List project assumptions and environmental constraints.",
|
|
209
|
+
keywords: [
|
|
210
|
+
"assumptions",
|
|
211
|
+
"constraints",
|
|
212
|
+
"prerequisites",
|
|
213
|
+
"limitations",
|
|
214
|
+
],
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
],
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
// ── 01-actors-and-auth ──
|
|
223
|
+
{
|
|
224
|
+
categoryId: "01-actors-and-auth",
|
|
225
|
+
fileId: "01-actors-and-auth",
|
|
226
|
+
filename: "01-actors-and-auth.md",
|
|
227
|
+
documentType: "actors-and-auth",
|
|
228
|
+
description:
|
|
229
|
+
"Actor definitions, permission matrix, authentication, session, account lifecycle",
|
|
230
|
+
downstreamPhase: "auth-middleware",
|
|
231
|
+
forbiddenPatterns: [
|
|
232
|
+
/\|\s*(?:type|required|default|constraint)\s*\|/i, // Entity attribute tables → 02
|
|
233
|
+
/```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
|
|
234
|
+
],
|
|
235
|
+
modules: [
|
|
236
|
+
{
|
|
237
|
+
index: 0,
|
|
238
|
+
title: "Actor Definitions",
|
|
239
|
+
purpose:
|
|
240
|
+
"Define all user actor types with their identity, permissions, and access boundaries.",
|
|
241
|
+
unitStrategy: {
|
|
242
|
+
type: "perActor",
|
|
243
|
+
unitTemplate: {
|
|
244
|
+
titlePattern: "{name} Actor",
|
|
245
|
+
purposePattern:
|
|
246
|
+
"Define the {name} actor's identity, permissions, and access boundaries. Do NOT describe specific operations (03), data isolation policies (05), or domain concepts (02).",
|
|
247
|
+
keywords: ["actor", "role", "permissions", "access-boundary"],
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
index: 1,
|
|
253
|
+
title: "Authentication Flows",
|
|
254
|
+
purpose:
|
|
255
|
+
"Registration, login, logout, and session management from a user perspective.",
|
|
256
|
+
unitStrategy: {
|
|
257
|
+
type: "fixed",
|
|
258
|
+
units: [
|
|
259
|
+
{
|
|
260
|
+
titlePattern: "Registration and Login",
|
|
261
|
+
purposePattern:
|
|
262
|
+
"Define user registration and login flows including validation and error handling.",
|
|
263
|
+
keywords: ["registration", "login", "authentication"],
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
titlePattern: "Session and Logout",
|
|
267
|
+
purposePattern:
|
|
268
|
+
"Define session behavior and logout from a user perspective.",
|
|
269
|
+
keywords: ["session", "logout", "account-security"],
|
|
270
|
+
},
|
|
271
|
+
],
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
index: 2,
|
|
276
|
+
title: "Account Lifecycle",
|
|
277
|
+
purpose: "Account creation, deletion, and password management.",
|
|
278
|
+
unitStrategy: {
|
|
279
|
+
type: "fixed",
|
|
280
|
+
units: [
|
|
281
|
+
{
|
|
282
|
+
titlePattern: "Account Management",
|
|
283
|
+
purposePattern:
|
|
284
|
+
"Define how users create accounts, delete accounts, and change passwords.",
|
|
285
|
+
keywords: [
|
|
286
|
+
"account-creation",
|
|
287
|
+
"account-deletion",
|
|
288
|
+
"password-change",
|
|
289
|
+
],
|
|
290
|
+
},
|
|
291
|
+
],
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
],
|
|
295
|
+
},
|
|
296
|
+
|
|
297
|
+
// ── 02-domain-model ──
|
|
298
|
+
{
|
|
299
|
+
categoryId: "02-domain-model",
|
|
300
|
+
fileId: "02-domain-model",
|
|
301
|
+
filename: "02-domain-model.md",
|
|
302
|
+
documentType: "domain-model",
|
|
303
|
+
description:
|
|
304
|
+
"Business concepts, relationships, and states from user perspective",
|
|
305
|
+
downstreamPhase: "database-design",
|
|
306
|
+
forbiddenPatterns: [
|
|
307
|
+
/\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
|
|
308
|
+
/\bRequest\s+Body\b/i,
|
|
309
|
+
/\bResponse\s+(?:Body|Schema)\b/i,
|
|
310
|
+
],
|
|
311
|
+
modules: [
|
|
312
|
+
{
|
|
313
|
+
index: 0,
|
|
314
|
+
title: "Domain Concepts",
|
|
315
|
+
purpose:
|
|
316
|
+
"Describe what each concept means in the business domain and its key attributes.",
|
|
317
|
+
unitStrategy: {
|
|
318
|
+
type: "perEntity",
|
|
319
|
+
unitTemplate: {
|
|
320
|
+
titlePattern: "{name} Concept",
|
|
321
|
+
purposePattern:
|
|
322
|
+
"Describe what {name} represents in the business domain and its key attributes. Do NOT describe operations or workflows — those belong in 03-functional-requirements.",
|
|
323
|
+
keywords: ["concept", "domain", "business-meaning", "attributes"],
|
|
324
|
+
},
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
index: 1,
|
|
329
|
+
title: "Domain Relationships",
|
|
330
|
+
purpose:
|
|
331
|
+
"Describe how concepts relate to each other from a business perspective.",
|
|
332
|
+
unitStrategy: {
|
|
333
|
+
type: "fixed",
|
|
334
|
+
units: [
|
|
335
|
+
{
|
|
336
|
+
titlePattern: "Conceptual Relationships",
|
|
337
|
+
purposePattern:
|
|
338
|
+
"Describe how concepts relate to each other in business terms.",
|
|
339
|
+
keywords: [
|
|
340
|
+
"relationship",
|
|
341
|
+
"association",
|
|
342
|
+
"belongs-to",
|
|
343
|
+
"has-many",
|
|
344
|
+
"ownership",
|
|
345
|
+
],
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
titlePattern: "Lifecycle and Retention",
|
|
349
|
+
purposePattern:
|
|
350
|
+
"Describe concept lifecycle states and transitions only. Detailed retention/recovery policies belong in 05-non-functional. Operation details belong in 03-functional-requirements.",
|
|
351
|
+
keywords: [
|
|
352
|
+
"lifecycle",
|
|
353
|
+
"retention",
|
|
354
|
+
"archival",
|
|
355
|
+
"deletion-policy",
|
|
356
|
+
"recovery",
|
|
357
|
+
],
|
|
358
|
+
},
|
|
359
|
+
],
|
|
360
|
+
},
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
index: 2,
|
|
364
|
+
title: "Business Categories and State Flows",
|
|
365
|
+
purpose:
|
|
366
|
+
"Business category classifications and state flow definitions.",
|
|
367
|
+
unitStrategy: {
|
|
368
|
+
type: "fixed",
|
|
369
|
+
units: [
|
|
370
|
+
{
|
|
371
|
+
titlePattern: "Business Category Definitions",
|
|
372
|
+
purposePattern:
|
|
373
|
+
"Define all business category classifications with their allowed values and descriptions.",
|
|
374
|
+
keywords: [
|
|
375
|
+
"business-category",
|
|
376
|
+
"classification",
|
|
377
|
+
"allowed-values",
|
|
378
|
+
"status-type",
|
|
379
|
+
],
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
titlePattern: "State Transitions",
|
|
383
|
+
purposePattern:
|
|
384
|
+
"Define valid state transition paths for stateful concepts.",
|
|
385
|
+
keywords: [
|
|
386
|
+
"state-flow",
|
|
387
|
+
"transition",
|
|
388
|
+
"workflow",
|
|
389
|
+
"status-change",
|
|
390
|
+
],
|
|
391
|
+
},
|
|
392
|
+
],
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
],
|
|
396
|
+
},
|
|
397
|
+
|
|
398
|
+
// ── 03-functional-requirements ──
|
|
399
|
+
{
|
|
400
|
+
categoryId: "03-functional-requirements",
|
|
401
|
+
fileId: "03-functional-requirements",
|
|
402
|
+
filename: "03-functional-requirements.md",
|
|
403
|
+
documentType: "functional-requirements",
|
|
404
|
+
description:
|
|
405
|
+
"What operations users can perform, use cases, business workflows",
|
|
406
|
+
downstreamPhase: "interface-design",
|
|
407
|
+
forbiddenPatterns: [
|
|
408
|
+
/\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs FORBIDDEN in requirements
|
|
409
|
+
/\bHTTP\s+[1-5]\d{2}\b/i, // HTTP status codes FORBIDDEN
|
|
410
|
+
/\bRequest\s+(?:Body|Example)\b/i, // Request schemas FORBIDDEN
|
|
411
|
+
/\bResponse\s+(?:Body|Example|Schema)\b/i, // Response schemas FORBIDDEN
|
|
412
|
+
/```json\s*\n\s*\{/i, // JSON examples FORBIDDEN
|
|
413
|
+
/\b(?:CREATE\s+)?(?:UNIQUE\s+)?INDEX\b/i, // Index defs → 02
|
|
414
|
+
/\bON\s+DELETE\s+(?:CASCADE|SET\s+NULL|RESTRICT)\b/i, // Cascade rules → 02
|
|
415
|
+
/```yaml\s*\n\s*errors:/i, // Error catalog YAML → 04
|
|
416
|
+
],
|
|
417
|
+
modules: [
|
|
418
|
+
{
|
|
419
|
+
index: 0,
|
|
420
|
+
title: "Core Business Operations",
|
|
421
|
+
purpose: "What the system must do for each business concept.",
|
|
422
|
+
unitStrategy: {
|
|
423
|
+
type: "perEntity",
|
|
424
|
+
unitTemplate: {
|
|
425
|
+
titlePattern: "{name} Operations",
|
|
426
|
+
purposePattern:
|
|
427
|
+
"Define business operations for {name}: what create, read, update, delete, and list operations must accomplish from a business perspective.",
|
|
428
|
+
keywords: [
|
|
429
|
+
"operation",
|
|
430
|
+
"business-logic",
|
|
431
|
+
"use-case",
|
|
432
|
+
"requirement",
|
|
433
|
+
"behavior",
|
|
434
|
+
"functionality",
|
|
435
|
+
],
|
|
436
|
+
},
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
index: 1,
|
|
441
|
+
title: "Error Scenarios and Edge Cases",
|
|
442
|
+
purpose:
|
|
443
|
+
"Business-level error scenarios, edge case coverage, and expected system behaviors for exceptional conditions.",
|
|
444
|
+
unitStrategy: {
|
|
445
|
+
type: "perEntity",
|
|
446
|
+
unitTemplate: {
|
|
447
|
+
titlePattern: "{name} Error Scenarios",
|
|
448
|
+
purposePattern:
|
|
449
|
+
"Define business error conditions, edge cases, and expected system behaviors for all {name} operations.",
|
|
450
|
+
keywords: [
|
|
451
|
+
"error-scenario",
|
|
452
|
+
"edge-case",
|
|
453
|
+
"validation-rule",
|
|
454
|
+
"conflict-resolution",
|
|
455
|
+
"boundary-condition",
|
|
456
|
+
],
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
index: 2,
|
|
462
|
+
title: "End-to-End User Scenarios",
|
|
463
|
+
purpose:
|
|
464
|
+
"Cross-domain user scenarios that span multiple concepts, describing complete user journeys.",
|
|
465
|
+
unitStrategy: {
|
|
466
|
+
type: "fixed",
|
|
467
|
+
units: [
|
|
468
|
+
{
|
|
469
|
+
titlePattern: "Cross-Domain User Scenarios",
|
|
470
|
+
purposePattern:
|
|
471
|
+
"Define end-to-end user scenarios that span multiple concepts, describing complete user journeys from start to finish.",
|
|
472
|
+
keywords: [
|
|
473
|
+
"user-scenario",
|
|
474
|
+
"end-to-end",
|
|
475
|
+
"multi-step",
|
|
476
|
+
"user-journey",
|
|
477
|
+
],
|
|
478
|
+
},
|
|
479
|
+
],
|
|
480
|
+
},
|
|
481
|
+
},
|
|
482
|
+
],
|
|
483
|
+
},
|
|
484
|
+
|
|
485
|
+
// ── 04-business-rules ──
|
|
486
|
+
{
|
|
487
|
+
categoryId: "04-business-rules",
|
|
488
|
+
fileId: "04-business-rules",
|
|
489
|
+
filename: "04-business-rules.md",
|
|
490
|
+
documentType: "business-rules",
|
|
491
|
+
description:
|
|
492
|
+
"Business rules, validation constraints, data browsing expectations, error scenarios",
|
|
493
|
+
downstreamPhase: "service-layer",
|
|
494
|
+
forbiddenPatterns: [
|
|
495
|
+
/```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
|
|
496
|
+
/\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
|
|
497
|
+
],
|
|
498
|
+
modules: [
|
|
499
|
+
{
|
|
500
|
+
index: 0,
|
|
501
|
+
title: "Domain Business Rules",
|
|
502
|
+
purpose:
|
|
503
|
+
"Per-concept business rules, validation logic, and domain constraints.",
|
|
504
|
+
unitStrategy: {
|
|
505
|
+
type: "perEntity",
|
|
506
|
+
unitTemplate: {
|
|
507
|
+
titlePattern: "{name} Rules",
|
|
508
|
+
purposePattern:
|
|
509
|
+
"Define validation rules and domain constraints for {name}. Do NOT repeat data isolation (05), lifecycle states (02), or operation flows (03).",
|
|
510
|
+
keywords: [
|
|
511
|
+
"business-rule",
|
|
512
|
+
"validation",
|
|
513
|
+
"constraint",
|
|
514
|
+
"domain-logic",
|
|
515
|
+
],
|
|
516
|
+
},
|
|
517
|
+
},
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
index: 1,
|
|
521
|
+
title: "Data Browsing Expectations",
|
|
522
|
+
purpose:
|
|
523
|
+
"Business expectations for how users browse, find, and navigate through lists of data.",
|
|
524
|
+
unitStrategy: {
|
|
525
|
+
type: "fixed",
|
|
526
|
+
units: [
|
|
527
|
+
{
|
|
528
|
+
titlePattern: "List Browsing Expectations",
|
|
529
|
+
purposePattern:
|
|
530
|
+
"Define business expectations for how users find, filter, and browse lists.",
|
|
531
|
+
keywords: ["filtering", "sorting", "pagination"],
|
|
532
|
+
},
|
|
533
|
+
],
|
|
534
|
+
},
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
index: 2,
|
|
538
|
+
title: "Error Conditions",
|
|
539
|
+
purpose: "Business error scenarios and how the system should respond.",
|
|
540
|
+
unitStrategy: {
|
|
541
|
+
type: "fixed",
|
|
542
|
+
units: [
|
|
543
|
+
{
|
|
544
|
+
titlePattern: "Error Scenarios",
|
|
545
|
+
purposePattern:
|
|
546
|
+
"Describe error conditions and expected system responses in natural language.",
|
|
547
|
+
keywords: [
|
|
548
|
+
"error-scenario",
|
|
549
|
+
"rejection",
|
|
550
|
+
"failure-case",
|
|
551
|
+
"exception",
|
|
552
|
+
],
|
|
553
|
+
},
|
|
554
|
+
],
|
|
555
|
+
},
|
|
556
|
+
},
|
|
557
|
+
],
|
|
558
|
+
},
|
|
559
|
+
|
|
560
|
+
// ── 05-non-functional ──
|
|
561
|
+
{
|
|
562
|
+
categoryId: "05-non-functional",
|
|
563
|
+
fileId: "05-non-functional",
|
|
564
|
+
filename: "05-non-functional.md",
|
|
565
|
+
documentType: "non-functional",
|
|
566
|
+
description: "Data ownership, privacy, retention, and recovery policies",
|
|
567
|
+
downstreamPhase: "test-infra",
|
|
568
|
+
forbiddenPatterns: [
|
|
569
|
+
/\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
|
|
570
|
+
/```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
|
|
571
|
+
],
|
|
572
|
+
modules: [
|
|
573
|
+
{
|
|
574
|
+
index: 0,
|
|
575
|
+
title: "Data Policies",
|
|
576
|
+
purpose:
|
|
577
|
+
"Data ownership, privacy, retention, and recovery policies from a business perspective.",
|
|
578
|
+
unitStrategy: {
|
|
579
|
+
type: "fixed",
|
|
580
|
+
units: [
|
|
581
|
+
{
|
|
582
|
+
titlePattern: "Data Ownership and Privacy",
|
|
583
|
+
purposePattern:
|
|
584
|
+
"Define who owns what data, who can access it, and privacy boundaries between users.",
|
|
585
|
+
keywords: [
|
|
586
|
+
"data-isolation",
|
|
587
|
+
"ownership",
|
|
588
|
+
"access-control",
|
|
589
|
+
"privacy",
|
|
590
|
+
],
|
|
591
|
+
},
|
|
592
|
+
{
|
|
593
|
+
titlePattern: "Data Retention and Recovery",
|
|
594
|
+
purposePattern:
|
|
595
|
+
"Define what happens to deleted data, how long it is retained, and how users can recover it.",
|
|
596
|
+
keywords: [
|
|
597
|
+
"soft-delete",
|
|
598
|
+
"retention",
|
|
599
|
+
"recovery",
|
|
600
|
+
"permanent-deletion",
|
|
601
|
+
],
|
|
602
|
+
},
|
|
603
|
+
],
|
|
604
|
+
},
|
|
605
|
+
},
|
|
606
|
+
],
|
|
607
|
+
},
|
|
608
|
+
];
|
|
609
|
+
|
|
610
|
+
// ─────────────────────────────────────────────
|
|
611
|
+
// Conditional modules (activated by features)
|
|
612
|
+
// ─────────────────────────────────────────────
|
|
613
|
+
|
|
614
|
+
export const FIXED_ANALYZE_TEMPLATE_CONDITIONAL_MODULES: Record<
|
|
615
|
+
FixedAnalyzeTemplateFeatureId,
|
|
616
|
+
Array<{
|
|
617
|
+
targetCategory: FixedAnalyzeTemplateCategoryId;
|
|
618
|
+
module: FixedAnalyzeTemplateModuleTemplate;
|
|
619
|
+
}>
|
|
620
|
+
> = {
|
|
621
|
+
"real-time": [
|
|
622
|
+
{
|
|
623
|
+
targetCategory: "03-functional-requirements",
|
|
624
|
+
module: {
|
|
625
|
+
index: 100, // appended after base modules
|
|
626
|
+
title: "Real-time Events",
|
|
627
|
+
purpose:
|
|
628
|
+
"WebSocket/SSE event definitions and subscription specifications.",
|
|
629
|
+
unitStrategy: {
|
|
630
|
+
type: "perEntity",
|
|
631
|
+
unitTemplate: {
|
|
632
|
+
titlePattern: "{name} Events",
|
|
633
|
+
purposePattern:
|
|
634
|
+
"Define real-time events for {name} changes, including event payload and subscription rules.",
|
|
635
|
+
keywords: [
|
|
636
|
+
"websocket",
|
|
637
|
+
"sse",
|
|
638
|
+
"event",
|
|
639
|
+
"subscription",
|
|
640
|
+
"real-time",
|
|
641
|
+
],
|
|
642
|
+
},
|
|
643
|
+
},
|
|
644
|
+
},
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
targetCategory: "05-non-functional",
|
|
648
|
+
module: {
|
|
649
|
+
index: 100,
|
|
650
|
+
title: "Real-time Communication",
|
|
651
|
+
purpose:
|
|
652
|
+
"WebSocket/SSE connection policies and performance requirements.",
|
|
653
|
+
unitStrategy: {
|
|
654
|
+
type: "fixed",
|
|
655
|
+
units: [
|
|
656
|
+
{
|
|
657
|
+
titlePattern: "WebSocket Security and Performance",
|
|
658
|
+
purposePattern:
|
|
659
|
+
"Define connection limits, heartbeat intervals, reconnection policies, and security requirements for real-time communication.",
|
|
660
|
+
keywords: [
|
|
661
|
+
"websocket-security",
|
|
662
|
+
"connection-limit",
|
|
663
|
+
"heartbeat",
|
|
664
|
+
"reconnection",
|
|
665
|
+
],
|
|
666
|
+
},
|
|
667
|
+
],
|
|
668
|
+
},
|
|
669
|
+
},
|
|
670
|
+
},
|
|
671
|
+
],
|
|
672
|
+
"external-integration": [
|
|
673
|
+
{
|
|
674
|
+
targetCategory: "03-functional-requirements",
|
|
675
|
+
module: {
|
|
676
|
+
index: 101,
|
|
677
|
+
title: "External Integrations",
|
|
678
|
+
purpose:
|
|
679
|
+
"Third-party API contracts, webhook handlers, and integration specifications.",
|
|
680
|
+
unitStrategy: {
|
|
681
|
+
type: "fixed",
|
|
682
|
+
units: [
|
|
683
|
+
{
|
|
684
|
+
titlePattern: "Integration Contracts",
|
|
685
|
+
purposePattern:
|
|
686
|
+
"Define external API dependencies, authentication methods, request/response formats, and error handling for third-party integrations.",
|
|
687
|
+
keywords: [
|
|
688
|
+
"integration",
|
|
689
|
+
"third-party",
|
|
690
|
+
"webhook",
|
|
691
|
+
"oauth-provider",
|
|
692
|
+
"payment",
|
|
693
|
+
],
|
|
694
|
+
},
|
|
695
|
+
],
|
|
696
|
+
},
|
|
697
|
+
},
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
targetCategory: "04-business-rules",
|
|
701
|
+
module: {
|
|
702
|
+
index: 100,
|
|
703
|
+
title: "Integration Error Handling",
|
|
704
|
+
purpose: "Error handling and retry policies for external integrations.",
|
|
705
|
+
unitStrategy: {
|
|
706
|
+
type: "fixed",
|
|
707
|
+
units: [
|
|
708
|
+
{
|
|
709
|
+
titlePattern: "Integration Failure Policies",
|
|
710
|
+
purposePattern:
|
|
711
|
+
"Define retry strategies, circuit breaker policies, fallback behavior, and error escalation for external service failures.",
|
|
712
|
+
keywords: [
|
|
713
|
+
"retry",
|
|
714
|
+
"circuit-breaker",
|
|
715
|
+
"fallback",
|
|
716
|
+
"integration-error",
|
|
717
|
+
],
|
|
718
|
+
},
|
|
719
|
+
],
|
|
720
|
+
},
|
|
721
|
+
},
|
|
722
|
+
},
|
|
723
|
+
{
|
|
724
|
+
targetCategory: "05-non-functional",
|
|
725
|
+
module: {
|
|
726
|
+
index: 101,
|
|
727
|
+
title: "External Dependency SLOs",
|
|
728
|
+
purpose:
|
|
729
|
+
"Service level objectives for external dependency availability.",
|
|
730
|
+
unitStrategy: {
|
|
731
|
+
type: "fixed",
|
|
732
|
+
units: [
|
|
733
|
+
{
|
|
734
|
+
titlePattern: "External Dependency SLOs",
|
|
735
|
+
purposePattern:
|
|
736
|
+
"Define availability expectations, timeout thresholds, and degradation policies for external service dependencies.",
|
|
737
|
+
keywords: [
|
|
738
|
+
"dependency-slo",
|
|
739
|
+
"timeout",
|
|
740
|
+
"degradation",
|
|
741
|
+
"external-availability",
|
|
742
|
+
],
|
|
743
|
+
},
|
|
744
|
+
],
|
|
745
|
+
},
|
|
746
|
+
},
|
|
747
|
+
},
|
|
748
|
+
],
|
|
749
|
+
"file-storage": [
|
|
750
|
+
{
|
|
751
|
+
targetCategory: "03-functional-requirements",
|
|
752
|
+
module: {
|
|
753
|
+
index: 103,
|
|
754
|
+
title: "File Storage",
|
|
755
|
+
purpose:
|
|
756
|
+
"File upload capabilities, media processing, and storage requirements.",
|
|
757
|
+
unitStrategy: {
|
|
758
|
+
type: "fixed",
|
|
759
|
+
units: [
|
|
760
|
+
{
|
|
761
|
+
titlePattern: "File Upload and Management",
|
|
762
|
+
purposePattern:
|
|
763
|
+
"Define file upload capabilities, supported formats, processing requirements, and access control for stored files.",
|
|
764
|
+
keywords: ["file-upload", "media", "storage", "attachment"],
|
|
765
|
+
},
|
|
766
|
+
],
|
|
767
|
+
},
|
|
768
|
+
},
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
targetCategory: "04-business-rules",
|
|
772
|
+
module: {
|
|
773
|
+
index: 102,
|
|
774
|
+
title: "File Validation Rules",
|
|
775
|
+
purpose: "Validation rules and policies for file uploads and storage.",
|
|
776
|
+
unitStrategy: {
|
|
777
|
+
type: "fixed",
|
|
778
|
+
units: [
|
|
779
|
+
{
|
|
780
|
+
titlePattern: "File Validation and Policies",
|
|
781
|
+
purposePattern:
|
|
782
|
+
"Define file type restrictions, virus scanning requirements, content validation, and retention policies for uploaded files.",
|
|
783
|
+
keywords: [
|
|
784
|
+
"file-validation",
|
|
785
|
+
"virus-scan",
|
|
786
|
+
"content-type",
|
|
787
|
+
"retention",
|
|
788
|
+
],
|
|
789
|
+
},
|
|
790
|
+
],
|
|
791
|
+
},
|
|
792
|
+
},
|
|
793
|
+
},
|
|
794
|
+
{
|
|
795
|
+
targetCategory: "05-non-functional",
|
|
796
|
+
module: {
|
|
797
|
+
index: 103,
|
|
798
|
+
title: "Storage Capacity",
|
|
799
|
+
purpose: "Storage capacity planning and CDN requirements.",
|
|
800
|
+
unitStrategy: {
|
|
801
|
+
type: "fixed",
|
|
802
|
+
units: [
|
|
803
|
+
{
|
|
804
|
+
titlePattern: "Storage Capacity Requirements",
|
|
805
|
+
purposePattern:
|
|
806
|
+
"Define storage requirements and capacity planning for file storage.",
|
|
807
|
+
keywords: ["storage-capacity", "cdn", "capacity"],
|
|
808
|
+
},
|
|
809
|
+
],
|
|
810
|
+
},
|
|
811
|
+
},
|
|
812
|
+
},
|
|
813
|
+
],
|
|
814
|
+
};
|
|
815
|
+
|
|
816
|
+
// ─────────────────────────────────────────────
|
|
817
|
+
// Helper functions
|
|
818
|
+
// ─────────────────────────────────────────────
|
|
819
|
+
|
|
820
|
+
/**
|
|
821
|
+
* Expand a module's unit strategy into concrete unit templates based on the
|
|
822
|
+
* domain's entities and actors.
|
|
823
|
+
*/
|
|
824
|
+
export const expandFixedAnalyzeTemplateUnits = (
|
|
825
|
+
module: FixedAnalyzeTemplateModuleTemplate,
|
|
826
|
+
entities: Array<{ name: string }>,
|
|
827
|
+
actors: Array<{ name: string }>,
|
|
828
|
+
): FixedAnalyzeTemplateUnitTemplate[] => {
|
|
829
|
+
const strategy = module.unitStrategy;
|
|
830
|
+
switch (strategy.type) {
|
|
831
|
+
case "fixed":
|
|
832
|
+
return strategy.units;
|
|
833
|
+
case "perEntity":
|
|
834
|
+
return entities.map((e) => ({
|
|
835
|
+
titlePattern: strategy.unitTemplate.titlePattern.replace(
|
|
836
|
+
"{name}",
|
|
837
|
+
e.name,
|
|
838
|
+
),
|
|
839
|
+
purposePattern: strategy.unitTemplate.purposePattern.replace(
|
|
840
|
+
"{name}",
|
|
841
|
+
e.name,
|
|
842
|
+
),
|
|
843
|
+
keywords: [...strategy.unitTemplate.keywords, e.name.toLowerCase()],
|
|
844
|
+
}));
|
|
845
|
+
case "perActor":
|
|
846
|
+
return actors.map((a) => ({
|
|
847
|
+
titlePattern: strategy.unitTemplate.titlePattern.replace(
|
|
848
|
+
"{name}",
|
|
849
|
+
a.name,
|
|
850
|
+
),
|
|
851
|
+
purposePattern: strategy.unitTemplate.purposePattern.replace(
|
|
852
|
+
"{name}",
|
|
853
|
+
a.name,
|
|
854
|
+
),
|
|
855
|
+
keywords: [...strategy.unitTemplate.keywords, a.name.toLowerCase()],
|
|
856
|
+
}));
|
|
857
|
+
case "perEntityGroup":
|
|
858
|
+
// For now, entity groups = entities; can be refined later
|
|
859
|
+
return entities.map((e) => ({
|
|
860
|
+
titlePattern: strategy.unitTemplate.titlePattern.replace(
|
|
861
|
+
"{name}",
|
|
862
|
+
e.name,
|
|
863
|
+
),
|
|
864
|
+
purposePattern: strategy.unitTemplate.purposePattern.replace(
|
|
865
|
+
"{name}",
|
|
866
|
+
e.name,
|
|
867
|
+
),
|
|
868
|
+
keywords: [...strategy.unitTemplate.keywords, e.name.toLowerCase()],
|
|
869
|
+
}));
|
|
870
|
+
}
|
|
871
|
+
};
|
|
872
|
+
|
|
873
|
+
/**
|
|
874
|
+
* Build an expanded template by merging base TEMPLATE with conditional modules
|
|
875
|
+
* activated by the given features.
|
|
876
|
+
*
|
|
877
|
+
* Module indices are renumbered sequentially per file after merging.
|
|
878
|
+
*/
|
|
879
|
+
export const buildFixedAnalyzeExpandedTemplate = (
|
|
880
|
+
features: FixedAnalyzeTemplateFeature[],
|
|
881
|
+
): FixedAnalyzeTemplateFileTemplate[] => {
|
|
882
|
+
if (features.length === 0) return FIXED_ANALYZE_TEMPLATE;
|
|
883
|
+
|
|
884
|
+
const activeFeatureIds = new Set(features.map((f) => f.id));
|
|
885
|
+
const extraModules = new Map<
|
|
886
|
+
FixedAnalyzeTemplateCategoryId,
|
|
887
|
+
FixedAnalyzeTemplateModuleTemplate[]
|
|
888
|
+
>();
|
|
889
|
+
|
|
890
|
+
for (const featureId of activeFeatureIds) {
|
|
891
|
+
const conditionals = FIXED_ANALYZE_TEMPLATE_CONDITIONAL_MODULES[featureId];
|
|
892
|
+
for (const { targetCategory, module } of conditionals) {
|
|
893
|
+
const existing = extraModules.get(targetCategory) ?? [];
|
|
894
|
+
existing.push(module);
|
|
895
|
+
extraModules.set(targetCategory, existing);
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
return FIXED_ANALYZE_TEMPLATE.map((fileTemplate) => {
|
|
900
|
+
const extras = extraModules.get(fileTemplate.categoryId);
|
|
901
|
+
if (!extras || extras.length === 0) return fileTemplate;
|
|
902
|
+
|
|
903
|
+
const mergedModules = [...fileTemplate.modules, ...extras].map((m, i) => ({
|
|
904
|
+
...m,
|
|
905
|
+
index: i,
|
|
906
|
+
}));
|
|
907
|
+
|
|
908
|
+
return { ...fileTemplate, modules: mergedModules };
|
|
909
|
+
});
|
|
910
|
+
};
|
|
911
|
+
|
|
912
|
+
/**
|
|
913
|
+
* Generate AutoBeAnalyze.IFile.Scenario objects from the fixed template,
|
|
914
|
+
* optionally expanded with conditional modules based on features. Called after
|
|
915
|
+
* LLM returns actors/entities/features in the scenario phase.
|
|
916
|
+
*/
|
|
917
|
+
export const buildFixedAnalyzeScenarioFiles = (
|
|
918
|
+
_prefix: string,
|
|
919
|
+
features: FixedAnalyzeTemplateFeature[] = [],
|
|
920
|
+
): AutoBeAnalyze.IFileScenario[] =>
|
|
921
|
+
buildFixedAnalyzeExpandedTemplate(features).map((t) => ({
|
|
922
|
+
reason: `Fixed SRS structure: ${t.description}`,
|
|
923
|
+
filename: t.filename,
|
|
924
|
+
documentType: t.documentType,
|
|
925
|
+
outline: t.modules.map((m) => m.title),
|
|
926
|
+
audience: "general",
|
|
927
|
+
detailLevel: "detailed specification",
|
|
928
|
+
constraints: [
|
|
929
|
+
`File scope: ${t.description}`,
|
|
930
|
+
`Downstream phase: ${t.downstreamPhase}`,
|
|
931
|
+
],
|
|
932
|
+
}));
|
|
933
|
+
|
|
934
|
+
/** Deterministically generate the Document Map unit content for 00-toc. */
|
|
935
|
+
export const buildFixedAnalyzeDocumentMapContent = (
|
|
936
|
+
files: FixedAnalyzeTemplateFileTemplate[],
|
|
937
|
+
): string => {
|
|
938
|
+
const rows = files
|
|
939
|
+
.map(
|
|
940
|
+
(f) =>
|
|
941
|
+
`| [${f.filename}](./${f.filename}) | ${f.description} | ${f.downstreamPhase} |`,
|
|
942
|
+
)
|
|
943
|
+
.join("\n");
|
|
944
|
+
return `| File | Role | Downstream |\n|------|------|------------|\n${rows}`;
|
|
945
|
+
};
|
|
946
|
+
|
|
947
|
+
/** Deterministically generate the Canonical Source Declaration unit content. */
|
|
948
|
+
export const buildFixedAnalyzeCanonicalSourceContent = (): string => {
|
|
949
|
+
const header = `Each type of information has one authoritative location. Other files should reference these canonical sources.\n`;
|
|
950
|
+
const table = [
|
|
951
|
+
"| Information Type | Canonical File |",
|
|
952
|
+
"|------------------|---------------|",
|
|
953
|
+
"| Domain concepts | [02-domain-model.md](./02-domain-model.md) |",
|
|
954
|
+
"| Error conditions | [04-business-rules.md](./04-business-rules.md) |",
|
|
955
|
+
"| Permissions | [01-actors-and-auth.md](./01-actors-and-auth.md) |",
|
|
956
|
+
"| Actor definitions | [01-actors-and-auth.md](./01-actors-and-auth.md) |",
|
|
957
|
+
"| Filtering/pagination rules | [04-business-rules.md](./04-business-rules.md) |",
|
|
958
|
+
"| Data retention/recovery | [05-non-functional.md](./05-non-functional.md) |",
|
|
959
|
+
].join("\n");
|
|
960
|
+
return `${header}\n${table}`;
|
|
961
|
+
};
|