pumuki 6.3.7
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 +21 -0
- package/README.md +370 -0
- package/VERSION +1 -0
- package/assets/Hook_01.png +0 -0
- package/assets/Hook_02.png +0 -0
- package/assets/ai-start.png +0 -0
- package/assets/ai_gate.png +0 -0
- package/assets/ast_intelligence_01.png +0 -0
- package/assets/ast_intelligence_01.svg +40 -0
- package/assets/ast_intelligence_02.png +0 -0
- package/assets/ast_intelligence_02.svg +39 -0
- package/assets/ast_intelligence_03.png +0 -0
- package/assets/ast_intelligence_03.svg +55 -0
- package/assets/ast_intelligence_04.png +0 -0
- package/assets/ast_intelligence_04.svg +39 -0
- package/assets/ast_intelligence_05.png +0 -0
- package/assets/ast_intelligence_05.svg +45 -0
- package/assets/logo.png +0 -0
- package/assets/logo_banner.svg +29 -0
- package/assets/pre-flight-check.png +0 -0
- package/bin/_run-ts-entry.js +46 -0
- package/bin/pumuki-ci.js +5 -0
- package/bin/pumuki-framework.js +5 -0
- package/bin/pumuki-mcp-evidence.js +5 -0
- package/bin/pumuki-pre-commit.js +5 -0
- package/bin/pumuki-pre-push.js +5 -0
- package/bin/pumuki.js +5 -0
- package/core/facts/DependencyFact.test.ts +38 -0
- package/core/facts/DependencyFact.ts +6 -0
- package/core/facts/Fact.test.ts +74 -0
- package/core/facts/Fact.ts +10 -0
- package/core/facts/FactSet.test.ts +38 -0
- package/core/facts/FactSet.ts +3 -0
- package/core/facts/FileChangeFact.test.ts +36 -0
- package/core/facts/FileChangeFact.ts +5 -0
- package/core/facts/FileContentFact.test.ts +26 -0
- package/core/facts/FileContentFact.ts +5 -0
- package/core/facts/HeuristicFact.test.ts +34 -0
- package/core/facts/HeuristicFact.ts +10 -0
- package/core/facts/detectors/browser/index.test.ts +131 -0
- package/core/facts/detectors/browser/index.ts +67 -0
- package/core/facts/detectors/fs/callbacks.test.ts +73 -0
- package/core/facts/detectors/fs/callbacks.ts +93 -0
- package/core/facts/detectors/fs/promises.test.ts +88 -0
- package/core/facts/detectors/fs/promises.ts +75 -0
- package/core/facts/detectors/fs/sync.test.ts +48 -0
- package/core/facts/detectors/fs/sync.ts +3 -0
- package/core/facts/detectors/fs/syncPart1.test.ts +52 -0
- package/core/facts/detectors/fs/syncPart1.ts +3 -0
- package/core/facts/detectors/fs/syncPart1DirTimes.test.ts +58 -0
- package/core/facts/detectors/fs/syncPart1DirTimes.ts +93 -0
- package/core/facts/detectors/fs/syncPart1FileOps.test.ts +64 -0
- package/core/facts/detectors/fs/syncPart1FileOps.ts +93 -0
- package/core/facts/detectors/fs/syncPart1Metadata.test.ts +64 -0
- package/core/facts/detectors/fs/syncPart1Metadata.ts +139 -0
- package/core/facts/detectors/fs/syncPart2.test.ts +62 -0
- package/core/facts/detectors/fs/syncPart2.ts +4 -0
- package/core/facts/detectors/fs/syncPart2Core.test.ts +62 -0
- package/core/facts/detectors/fs/syncPart2Core.ts +70 -0
- package/core/facts/detectors/fs/syncPart2Io.test.ts +62 -0
- package/core/facts/detectors/fs/syncPart2Io.ts +70 -0
- package/core/facts/detectors/fs/syncPart2Permissions.test.ts +66 -0
- package/core/facts/detectors/fs/syncPart2Permissions.ts +93 -0
- package/core/facts/detectors/fs/syncPart2Times.test.ts +66 -0
- package/core/facts/detectors/fs/syncPart2Times.ts +93 -0
- package/core/facts/detectors/fs/syncPart3.test.ts +62 -0
- package/core/facts/detectors/fs/syncPart3.ts +3 -0
- package/core/facts/detectors/fs/syncPart3DescriptorIo.test.ts +69 -0
- package/core/facts/detectors/fs/syncPart3DescriptorIo.ts +93 -0
- package/core/facts/detectors/fs/syncPart3Links.test.ts +62 -0
- package/core/facts/detectors/fs/syncPart3Links.ts +70 -0
- package/core/facts/detectors/fs/syncPart3PathOps.test.ts +72 -0
- package/core/facts/detectors/fs/syncPart3PathOps.ts +116 -0
- package/core/facts/detectors/process/core.test.ts +147 -0
- package/core/facts/detectors/process/core.ts +120 -0
- package/core/facts/detectors/process/index.test.ts +61 -0
- package/core/facts/detectors/process/index.ts +3 -0
- package/core/facts/detectors/process/shell.test.ts +137 -0
- package/core/facts/detectors/process/shell.ts +170 -0
- package/core/facts/detectors/process/spawn.test.ts +155 -0
- package/core/facts/detectors/process/spawn.ts +121 -0
- package/core/facts/detectors/security/index.test.ts +382 -0
- package/core/facts/detectors/security/index.ts +16 -0
- package/core/facts/detectors/security/securityCredentials.test.ts +149 -0
- package/core/facts/detectors/security/securityCredentials.ts +192 -0
- package/core/facts/detectors/security/securityCrypto.test.ts +122 -0
- package/core/facts/detectors/security/securityCrypto.ts +88 -0
- package/core/facts/detectors/security/securityJwt.test.ts +187 -0
- package/core/facts/detectors/security/securityJwt.ts +134 -0
- package/core/facts/detectors/security/securityTls.test.ts +121 -0
- package/core/facts/detectors/security/securityTls.ts +88 -0
- package/core/facts/detectors/text/android.test.ts +87 -0
- package/core/facts/detectors/text/android.ts +38 -0
- package/core/facts/detectors/text/ios.test.ts +83 -0
- package/core/facts/detectors/text/ios.ts +108 -0
- package/core/facts/detectors/text/utils.test.ts +71 -0
- package/core/facts/detectors/text/utils.ts +146 -0
- package/core/facts/detectors/typescript/index.test.ts +231 -0
- package/core/facts/detectors/typescript/index.ts +167 -0
- package/core/facts/detectors/utils/astHelpers.test.ts +79 -0
- package/core/facts/detectors/utils/astHelpers.ts +33 -0
- package/core/facts/detectors/vm/index.test.ts +58 -0
- package/core/facts/detectors/vm/index.ts +27 -0
- package/core/facts/extractHeuristicFacts.ts +394 -0
- package/core/facts/index.test.ts +72 -0
- package/core/facts/index.ts +11 -0
- package/core/gate/Finding.test.ts +52 -0
- package/core/gate/Finding.ts +9 -0
- package/core/gate/GateOutcome.test.ts +20 -0
- package/core/gate/GateOutcome.ts +1 -0
- package/core/gate/GatePolicy.test.ts +28 -0
- package/core/gate/GatePolicy.ts +9 -0
- package/core/gate/GateStage.test.ts +22 -0
- package/core/gate/GateStage.ts +1 -0
- package/core/gate/conditionMatches.test.ts +110 -0
- package/core/gate/conditionMatches.ts +174 -0
- package/core/gate/evaluateGate.test.ts +77 -0
- package/core/gate/evaluateGate.ts +23 -0
- package/core/gate/evaluateRules.test.ts +106 -0
- package/core/gate/evaluateRules.ts +40 -0
- package/core/gate/index.test.ts +39 -0
- package/core/gate/index.ts +6 -0
- package/core/rules/Condition.test.ts +54 -0
- package/core/rules/Condition.ts +40 -0
- package/core/rules/Consequence.test.ts +25 -0
- package/core/rules/Consequence.ts +5 -0
- package/core/rules/README.md +6 -0
- package/core/rules/RuleDefinition.test.ts +55 -0
- package/core/rules/RuleDefinition.ts +20 -0
- package/core/rules/RuleSet.test.ts +48 -0
- package/core/rules/RuleSet.ts +3 -0
- package/core/rules/Severity.test.ts +19 -0
- package/core/rules/Severity.ts +12 -0
- package/core/rules/index.test.ts +41 -0
- package/core/rules/index.ts +7 -0
- package/core/rules/mergeRuleSets.ts +53 -0
- package/core/rules/presets/androidRuleSet.test.ts +22 -0
- package/core/rules/presets/androidRuleSet.ts +62 -0
- package/core/rules/presets/astHeuristicsRuleSet.ts +31 -0
- package/core/rules/presets/backendRuleSet.test.ts +27 -0
- package/core/rules/presets/backendRuleSet.ts +61 -0
- package/core/rules/presets/exampleRuleSet.test.ts +25 -0
- package/core/rules/presets/exampleRuleSet.ts +34 -0
- package/core/rules/presets/frontendRuleSet.test.ts +27 -0
- package/core/rules/presets/frontendRuleSet.ts +61 -0
- package/core/rules/presets/heuristics/android.ts +58 -0
- package/core/rules/presets/heuristics/browser.ts +58 -0
- package/core/rules/presets/heuristics/fsCallbacks.ts +9 -0
- package/core/rules/presets/heuristics/fsCallbacksFileOperationsRules.ts +400 -0
- package/core/rules/presets/heuristics/fsCallbacksMetadataRules.ts +418 -0
- package/core/rules/presets/heuristics/fsPromises.ts +9 -0
- package/core/rules/presets/heuristics/fsPromisesFileOperations.ts +184 -0
- package/core/rules/presets/heuristics/fsPromisesMetadataRules.ts +238 -0
- package/core/rules/presets/heuristics/fsSync.ts +13 -0
- package/core/rules/presets/heuristics/fsSyncAppendRules.ts +22 -0
- package/core/rules/presets/heuristics/fsSyncDescriptorRules.ts +328 -0
- package/core/rules/presets/heuristics/fsSyncFileOperationsRules.ts +382 -0
- package/core/rules/presets/heuristics/fsSyncPathRules.ts +4 -0
- package/core/rules/presets/heuristics/ios.ts +94 -0
- package/core/rules/presets/heuristics/process.ts +241 -0
- package/core/rules/presets/heuristics/security.ts +13 -0
- package/core/rules/presets/heuristics/securityCredentialsRules.ts +80 -0
- package/core/rules/presets/heuristics/securityCryptoRules.ts +61 -0
- package/core/rules/presets/heuristics/securityJwtRules.ts +61 -0
- package/core/rules/presets/heuristics/securityTlsRules.ts +42 -0
- package/core/rules/presets/heuristics/typescript.ts +220 -0
- package/core/rules/presets/heuristics/vm.ts +23 -0
- package/core/rules/presets/index.test.ts +32 -0
- package/core/rules/presets/index.ts +8 -0
- package/core/rules/presets/iosEnterpriseRuleSet.ts +204 -0
- package/core/rules/presets/iosNonNegotiableRuleSet.ts +76 -0
- package/core/rules/presets/rulePackVersions.test.ts +21 -0
- package/core/rules/presets/rulePackVersions.ts +11 -0
- package/core/utils/stableStringify.ts +18 -0
- package/docs/API_REFERENCE.md +233 -0
- package/docs/ARCHITECTURE.md +190 -0
- package/docs/ARCHITECTURE_DETAILED.md +165 -0
- package/docs/AST_HEURISTICS_REINTRODUCTION_PLAN.md +88 -0
- package/docs/BRANCH_PROTECTION_GUIDE.md +50 -0
- package/docs/CODE_STANDARDS.md +73 -0
- package/docs/CONFIGURATION.md +132 -0
- package/docs/CONTRIBUTING.md +92 -0
- package/docs/DEPENDENCIES.md +54 -0
- package/docs/HOW_IT_WORKS.md +155 -0
- package/docs/INSTALLATION.md +172 -0
- package/docs/MCP_AGENT_CONTEXT_CONSUMPTION.md +189 -0
- package/docs/MCP_EVIDENCE_CONTEXT_SERVER.md +242 -0
- package/docs/MCP_SERVERS.md +114 -0
- package/docs/README.md +85 -0
- package/docs/REFRACTOR_PROGRESS.md +155 -0
- package/docs/RELEASE_NOTES.md +175 -0
- package/docs/TESTING.md +101 -0
- package/docs/TODO.md +692 -0
- package/docs/USAGE.md +259 -0
- package/docs/evidence-v2.1.md +49 -0
- package/docs/images/README.md +20 -0
- package/docs/rule-packs/README.md +45 -0
- package/docs/rule-packs/android.md +21 -0
- package/docs/rule-packs/backend.md +24 -0
- package/docs/rule-packs/frontend.md +22 -0
- package/docs/rule-packs/heuristics.md +1304 -0
- package/docs/rule-packs/ios.md +22 -0
- package/docs/skills-repo-enforcement-migration.md +73 -0
- package/docs/validation/README.md +82 -0
- package/docs/validation/adapter-hook-runtime-local-report.md +45 -0
- package/docs/validation/adapter-hook-runtime-validation.md +82 -0
- package/docs/validation/adapter-real-session-report-template.md +63 -0
- package/docs/validation/consumer-ci-startup-failure-playbook.md +184 -0
- package/docs/validation/consumer-startup-escalation-handoff-latest.md +237 -0
- package/docs/validation/enterprise-consumer-isolation-policy.md +45 -0
- package/docs/validation/github-support-ticket-template-startup-failure.md +84 -0
- package/docs/validation/mock-consumer-integration-runbook.md +89 -0
- package/docs/validation/phase5-execution-closure.md +227 -0
- package/docs/validation/phase8-external-rollout-pack.md +168 -0
- package/docs/validation/phase8-post-billing-reactivation-runbook.md +133 -0
- package/docs/validation/skills-rollout-consumer-repositories.md +124 -0
- package/index.js +15 -0
- package/integrations/config/compileSkillsLock.ts +231 -0
- package/integrations/config/heuristics.ts +18 -0
- package/integrations/config/loadProjectRules.ts +43 -0
- package/integrations/config/projectRules.ts +6 -0
- package/integrations/config/projectRulesSchema.ts +85 -0
- package/integrations/config/skillsCompilerTemplates.ts +151 -0
- package/integrations/config/skillsLock.ts +248 -0
- package/integrations/config/skillsPolicy.ts +178 -0
- package/integrations/config/skillsRuleSet.ts +188 -0
- package/integrations/config/skillsSources.ts +88 -0
- package/integrations/evidence/buildEvidence.ts +350 -0
- package/integrations/evidence/generateEvidence.ts +14 -0
- package/integrations/evidence/humanIntent.ts +115 -0
- package/integrations/evidence/readEvidence.ts +47 -0
- package/integrations/evidence/schema.ts +97 -0
- package/integrations/evidence/writeEvidence.ts +201 -0
- package/integrations/gate/stagePolicies.ts +295 -0
- package/integrations/git/EvidenceService.ts +111 -0
- package/integrations/git/GitService.ts +35 -0
- package/integrations/git/baselineRuleSets.ts +58 -0
- package/integrations/git/ciAndroid.cli.ts +4 -0
- package/integrations/git/ciAndroid.ts +1 -0
- package/integrations/git/ciBackend.cli.ts +4 -0
- package/integrations/git/ciBackend.ts +1 -0
- package/integrations/git/ciFrontend.cli.ts +4 -0
- package/integrations/git/ciFrontend.ts +1 -0
- package/integrations/git/ciIOS.cli.ts +4 -0
- package/integrations/git/ciIOS.ts +1 -0
- package/integrations/git/evaluateStagedIOS.ts +127 -0
- package/integrations/git/getCommitRangeFacts.ts +28 -0
- package/integrations/git/gitDiffUtils.ts +90 -0
- package/integrations/git/index.ts +13 -0
- package/integrations/git/preCommitAndroid.cli.ts +4 -0
- package/integrations/git/preCommitAndroid.ts +1 -0
- package/integrations/git/preCommitBackend.cli.ts +4 -0
- package/integrations/git/preCommitBackend.ts +1 -0
- package/integrations/git/preCommitFrontend.cli.ts +4 -0
- package/integrations/git/preCommitFrontend.ts +1 -0
- package/integrations/git/preCommitIOS.cli.ts +4 -0
- package/integrations/git/preCommitIOS.ts +1 -0
- package/integrations/git/prePushAndroid.cli.ts +4 -0
- package/integrations/git/prePushAndroid.ts +1 -0
- package/integrations/git/prePushBackend.cli.ts +4 -0
- package/integrations/git/prePushBackend.ts +1 -0
- package/integrations/git/prePushFrontend.cli.ts +4 -0
- package/integrations/git/prePushFrontend.ts +1 -0
- package/integrations/git/prePushIOS.cli.ts +4 -0
- package/integrations/git/prePushIOS.ts +1 -0
- package/integrations/git/resolveGitRefs.ts +51 -0
- package/integrations/git/runCliCommand.ts +11 -0
- package/integrations/git/runPlatformGate.ts +89 -0
- package/integrations/git/runPlatformGateEvaluation.ts +82 -0
- package/integrations/git/runPlatformGateEvidence.ts +41 -0
- package/integrations/git/runPlatformGateFacts.ts +34 -0
- package/integrations/git/runPlatformGateOutput.ts +11 -0
- package/integrations/git/stageRunners.ts +40 -0
- package/integrations/lifecycle/artifacts.ts +26 -0
- package/integrations/lifecycle/cli.ts +180 -0
- package/integrations/lifecycle/constants.ts +13 -0
- package/integrations/lifecycle/consumerPackage.ts +48 -0
- package/integrations/lifecycle/doctor.ts +90 -0
- package/integrations/lifecycle/gitService.ts +63 -0
- package/integrations/lifecycle/hookBlock.ts +93 -0
- package/integrations/lifecycle/hookManager.ts +107 -0
- package/integrations/lifecycle/index.ts +6 -0
- package/integrations/lifecycle/install.ts +44 -0
- package/integrations/lifecycle/npmService.ts +21 -0
- package/integrations/lifecycle/packageInfo.ts +5 -0
- package/integrations/lifecycle/remove.ts +95 -0
- package/integrations/lifecycle/state.ts +41 -0
- package/integrations/lifecycle/status.ts +30 -0
- package/integrations/lifecycle/uninstall.ts +36 -0
- package/integrations/lifecycle/update.ts +77 -0
- package/integrations/mcp/evidenceContextServer.cli.ts +16 -0
- package/integrations/mcp/evidenceContextServer.ts +152 -0
- package/integrations/mcp/evidenceFacets.ts +3 -0
- package/integrations/mcp/evidenceFacetsBase.ts +94 -0
- package/integrations/mcp/evidenceFacetsSnapshot.ts +104 -0
- package/integrations/mcp/evidenceFacetsSuppressed.ts +3 -0
- package/integrations/mcp/evidenceFacetsSuppressedBase.ts +221 -0
- package/integrations/mcp/evidenceFacetsSuppressedRelations.ts +263 -0
- package/integrations/mcp/evidenceFacetsSuppressedShare.ts +2 -0
- package/integrations/mcp/evidenceFacetsSuppressedShareCore.ts +442 -0
- package/integrations/mcp/evidenceFacetsSuppressedShareTriage.ts +487 -0
- package/integrations/mcp/evidencePayloadCollections.ts +37 -0
- package/integrations/mcp/evidencePayloadCollectionsFindings.ts +64 -0
- package/integrations/mcp/evidencePayloadCollectionsLedger.ts +69 -0
- package/integrations/mcp/evidencePayloadCollectionsPaging.ts +38 -0
- package/integrations/mcp/evidencePayloadCollectionsPlatforms.ts +49 -0
- package/integrations/mcp/evidencePayloadCollectionsRulesets.ts +50 -0
- package/integrations/mcp/evidencePayloadCollectionsSorters.ts +62 -0
- package/integrations/mcp/evidencePayloadConfig.ts +79 -0
- package/integrations/mcp/evidencePayloadSummary.ts +144 -0
- package/integrations/mcp/evidencePayloadSummarySuppressed.ts +361 -0
- package/integrations/mcp/evidencePayloads.ts +8 -0
- package/integrations/mcp/index.ts +1 -0
- package/integrations/platform/detectAndroid.ts +25 -0
- package/integrations/platform/detectBackend.ts +22 -0
- package/integrations/platform/detectFrontend.ts +29 -0
- package/integrations/platform/detectPlatforms.ts +69 -0
- package/package.json +218 -0
- package/scripts/adapter-readiness-cli-lib.ts +64 -0
- package/scripts/adapter-readiness-contract.ts +46 -0
- package/scripts/adapter-readiness-lib.ts +10 -0
- package/scripts/adapter-readiness-markdown-lib.ts +41 -0
- package/scripts/adapter-readiness-markdown-next-actions-lib.ts +33 -0
- package/scripts/adapter-readiness-markdown-sections-lib.ts +78 -0
- package/scripts/adapter-readiness-parser-lib.ts +30 -0
- package/scripts/adapter-readiness-summary-lib.ts +62 -0
- package/scripts/adapter-real-session-analysis-evaluation-lib.ts +49 -0
- package/scripts/adapter-real-session-analysis-lib.ts +8 -0
- package/scripts/adapter-real-session-analysis-messages-lib.ts +58 -0
- package/scripts/adapter-real-session-analysis-signals-lib.ts +59 -0
- package/scripts/adapter-real-session-analysis-status-lib.ts +29 -0
- package/scripts/adapter-real-session-arg-values-lib.ts +47 -0
- package/scripts/adapter-real-session-args-lib.ts +46 -0
- package/scripts/adapter-real-session-audit-snapshot-lib.ts +70 -0
- package/scripts/adapter-real-session-context-lib.ts +7 -0
- package/scripts/adapter-real-session-contract.ts +54 -0
- package/scripts/adapter-real-session-fs-lib.ts +36 -0
- package/scripts/adapter-real-session-git-lib.ts +13 -0
- package/scripts/adapter-real-session-hook-config-lib.ts +24 -0
- package/scripts/adapter-real-session-markdown-core-sections-lib.ts +11 -0
- package/scripts/adapter-real-session-markdown-lib.ts +25 -0
- package/scripts/adapter-real-session-markdown-sections-context-lib.ts +56 -0
- package/scripts/adapter-real-session-markdown-sections-evaluation-lib.ts +71 -0
- package/scripts/adapter-real-session-markdown-sections-lib.ts +34 -0
- package/scripts/adapter-real-session-markdown-snippet-section-lib.ts +44 -0
- package/scripts/adapter-real-session-markdown-snippets-lib.ts +19 -0
- package/scripts/adapter-real-session-markdown-value-formatters-lib.ts +10 -0
- package/scripts/adapter-real-session-report-lib.ts +16 -0
- package/scripts/adapter-real-session-status-parser-lib.ts +42 -0
- package/scripts/adapter-session-status-args-lib.ts +46 -0
- package/scripts/adapter-session-status-audit-latest-lib.ts +22 -0
- package/scripts/adapter-session-status-audit-tail-entries-lib.ts +78 -0
- package/scripts/adapter-session-status-audit-tail-lib.ts +15 -0
- package/scripts/adapter-session-status-command-lib.ts +49 -0
- package/scripts/adapter-session-status-contract.ts +55 -0
- package/scripts/adapter-session-status-hook-log-filter-lib.ts +38 -0
- package/scripts/adapter-session-status-lib.ts +25 -0
- package/scripts/adapter-session-status-log-filter-lib.ts +3 -0
- package/scripts/adapter-session-status-log-utils-lib.ts +23 -0
- package/scripts/adapter-session-status-markdown-lib.ts +65 -0
- package/scripts/adapter-session-status-report-lib.ts +21 -0
- package/scripts/adapter-session-status-tail-readers-lib.ts +58 -0
- package/scripts/adapter-session-status-verdict-lib.ts +43 -0
- package/scripts/adapter-session-status-writes-log-filter-lib.ts +25 -0
- package/scripts/build-adapter-readiness.ts +51 -0
- package/scripts/build-adapter-real-session-report.ts +58 -0
- package/scripts/build-adapter-session-status.ts +42 -0
- package/scripts/build-consumer-startup-failure-support-bundle.ts +22 -0
- package/scripts/build-consumer-startup-triage-arg-flags-lib.ts +26 -0
- package/scripts/build-consumer-startup-triage-arg-values-lib.ts +45 -0
- package/scripts/build-consumer-startup-triage-args-lib.ts +59 -0
- package/scripts/build-consumer-startup-triage-contract.ts +25 -0
- package/scripts/build-consumer-startup-triage-runner-lib.ts +59 -0
- package/scripts/build-consumer-startup-triage.ts +58 -0
- package/scripts/build-consumer-startup-unblock-status.ts +34 -0
- package/scripts/build-consumer-support-ticket-draft.ts +32 -0
- package/scripts/build-mock-consumer-ab-report.ts +34 -0
- package/scripts/build-mock-consumer-startup-triage.ts +71 -0
- package/scripts/build-phase5-blockers-readiness.ts +69 -0
- package/scripts/build-phase5-execution-closure-status-output-lib.ts +22 -0
- package/scripts/build-phase5-execution-closure-status-runner-lib.ts +61 -0
- package/scripts/build-phase5-execution-closure-status.ts +35 -0
- package/scripts/build-phase5-external-handoff-arg-flags-lib.ts +21 -0
- package/scripts/build-phase5-external-handoff-arg-handlers-lib.ts +48 -0
- package/scripts/build-phase5-external-handoff-arg-values-lib.ts +59 -0
- package/scripts/build-phase5-external-handoff-args-lib.ts +25 -0
- package/scripts/build-phase5-external-handoff-contract.ts +39 -0
- package/scripts/build-phase5-external-handoff-inputs-lib.ts +86 -0
- package/scripts/build-phase5-external-handoff.ts +71 -0
- package/scripts/build-phase5-support-portal-payload.sh +67 -0
- package/scripts/build-phase8-ready-handoff-summary.sh +66 -0
- package/scripts/check-consumer-ci-auth.ts +64 -0
- package/scripts/check-package-manifest.ts +54 -0
- package/scripts/check-phase5-escalation-ready-to-submit.sh +74 -0
- package/scripts/check-phase5-latest-ready-chain.sh +44 -0
- package/scripts/check-phase8-loop-guard-coverage.sh +44 -0
- package/scripts/check-phase8-loop-guard.sh +81 -0
- package/scripts/check-refactor-progress-single-active.sh +25 -0
- package/scripts/check-validation-docs-hygiene.ts +42 -0
- package/scripts/clean-validation-artifacts-cli-lib.ts +38 -0
- package/scripts/clean-validation-artifacts-lib.ts +64 -0
- package/scripts/clean-validation-artifacts-output-lib.ts +21 -0
- package/scripts/clean-validation-artifacts.ts +42 -0
- package/scripts/close-phase5-escalation-submission.sh +81 -0
- package/scripts/collect-consumer-ci-artifacts-args-lib.ts +61 -0
- package/scripts/collect-consumer-ci-artifacts-contract.ts +54 -0
- package/scripts/collect-consumer-ci-artifacts-gh-command-lib.ts +17 -0
- package/scripts/collect-consumer-ci-artifacts-gh-fetch-lib.ts +45 -0
- package/scripts/collect-consumer-ci-artifacts-gh-lib.ts +5 -0
- package/scripts/collect-consumer-ci-artifacts-gh-run-fetch-lib.ts +56 -0
- package/scripts/collect-consumer-ci-artifacts-markdown-lib.ts +69 -0
- package/scripts/collect-consumer-ci-artifacts.ts +30 -0
- package/scripts/compile-skills-lock-args-lib.ts +53 -0
- package/scripts/compile-skills-lock-runner-lib.ts +48 -0
- package/scripts/compile-skills-lock.ts +9 -0
- package/scripts/consumer-ci-auth-check-contract.ts +39 -0
- package/scripts/consumer-ci-auth-check-gh-lib.ts +54 -0
- package/scripts/consumer-ci-auth-check-lib.ts +15 -0
- package/scripts/consumer-ci-auth-check-markdown-header-status-lib.ts +32 -0
- package/scripts/consumer-ci-auth-check-markdown-json-lib.ts +19 -0
- package/scripts/consumer-ci-auth-check-markdown-lib.ts +30 -0
- package/scripts/consumer-ci-auth-check-markdown-remediation-lib.ts +36 -0
- package/scripts/consumer-ci-auth-check-markdown-sections-lib.ts +6 -0
- package/scripts/consumer-ci-auth-check-parse-lib.ts +65 -0
- package/scripts/consumer-startup-failure-support-bundle-lib.ts +58 -0
- package/scripts/consumer-startup-triage-command-builders-core-lib.ts +5 -0
- package/scripts/consumer-startup-triage-command-builders-core-required-lib.ts +40 -0
- package/scripts/consumer-startup-triage-command-builders-lib.ts +10 -0
- package/scripts/consumer-startup-triage-command-builders-support-bundle-lib.ts +26 -0
- package/scripts/consumer-startup-triage-command-builders-support-followup-lib.ts +53 -0
- package/scripts/consumer-startup-triage-command-builders-support-lib.ts +5 -0
- package/scripts/consumer-startup-triage-command-builders-workflow-lint-lib.ts +45 -0
- package/scripts/consumer-startup-triage-commands-lib.ts +64 -0
- package/scripts/consumer-startup-triage-contract.ts +41 -0
- package/scripts/consumer-startup-triage-lib.ts +9 -0
- package/scripts/consumer-startup-triage-markdown-lib.ts +63 -0
- package/scripts/consumer-startup-triage-outputs-lib.ts +19 -0
- package/scripts/consumer-startup-unblock-arg-setters-lib.ts +34 -0
- package/scripts/consumer-startup-unblock-args-contract.ts +17 -0
- package/scripts/consumer-startup-unblock-args-defaults-lib.ts +17 -0
- package/scripts/consumer-startup-unblock-args-lib.ts +49 -0
- package/scripts/consumer-startup-unblock-auth-lib.ts +16 -0
- package/scripts/consumer-startup-unblock-blockers-lib.ts +65 -0
- package/scripts/consumer-startup-unblock-cli-lib.ts +10 -0
- package/scripts/consumer-startup-unblock-contract.ts +42 -0
- package/scripts/consumer-startup-unblock-input-lib.ts +17 -0
- package/scripts/consumer-startup-unblock-markdown-lib.ts +47 -0
- package/scripts/consumer-startup-unblock-markdown-next-actions-lib.ts +37 -0
- package/scripts/consumer-startup-unblock-markdown-sections-lib.ts +53 -0
- package/scripts/consumer-startup-unblock-parser-lib.ts +24 -0
- package/scripts/consumer-startup-unblock-runner-lib.ts +69 -0
- package/scripts/consumer-startup-unblock-status-lib.ts +7 -0
- package/scripts/consumer-startup-unblock-summary-lib.ts +54 -0
- package/scripts/consumer-support-bundle-args-defaults-lib.ts +11 -0
- package/scripts/consumer-support-bundle-args-values-lib.ts +27 -0
- package/scripts/consumer-support-bundle-contract.ts +61 -0
- package/scripts/consumer-support-bundle-gh-auth-repo-lib.ts +51 -0
- package/scripts/consumer-support-bundle-gh-command-lib.ts +63 -0
- package/scripts/consumer-support-bundle-gh-diagnostics-collector-lib.ts +66 -0
- package/scripts/consumer-support-bundle-gh-diagnostics-fetch-lib.ts +36 -0
- package/scripts/consumer-support-bundle-gh-lib.ts +8 -0
- package/scripts/consumer-support-bundle-gh-loaders-lib.ts +7 -0
- package/scripts/consumer-support-bundle-gh-workflow-runs-lib.ts +30 -0
- package/scripts/consumer-support-bundle-markdown-context-lib.ts +49 -0
- package/scripts/consumer-support-bundle-markdown-lib.ts +44 -0
- package/scripts/consumer-support-bundle-markdown-run-sections-append-lib.ts +47 -0
- package/scripts/consumer-support-bundle-markdown-sections-append-lib.ts +51 -0
- package/scripts/consumer-support-bundle-markdown-sections-core-lib.ts +67 -0
- package/scripts/consumer-support-bundle-markdown-sections-lib.ts +7 -0
- package/scripts/consumer-support-bundle-markdown-sections-run-diagnostics-lib.ts +34 -0
- package/scripts/consumer-support-bundle-markdown-sections-support-payload-lib.ts +60 -0
- package/scripts/consumer-support-bundle-markdown-top-sections-append-lib.ts +55 -0
- package/scripts/consumer-support-bundle-markdown-top-sections-lib.ts +51 -0
- package/scripts/consumer-support-bundle-runner-lib.ts +49 -0
- package/scripts/consumer-support-ticket-cli-arg-setters-lib.ts +30 -0
- package/scripts/consumer-support-ticket-cli-contract.ts +14 -0
- package/scripts/consumer-support-ticket-cli-defaults-lib.ts +14 -0
- package/scripts/consumer-support-ticket-cli-lib.ts +63 -0
- package/scripts/consumer-support-ticket-draft-diagnostics-sections-lib.ts +67 -0
- package/scripts/consumer-support-ticket-draft-lib.ts +36 -0
- package/scripts/consumer-support-ticket-draft-primary-sections-lib.ts +51 -0
- package/scripts/consumer-support-ticket-draft-sections-lib.ts +10 -0
- package/scripts/consumer-support-ticket-lib.ts +3 -0
- package/scripts/consumer-support-ticket-parser-lib.ts +72 -0
- package/scripts/consumer-support-ticket-runner-lib.ts +42 -0
- package/scripts/consumer-workflow-lint-args-lib.ts +56 -0
- package/scripts/consumer-workflow-lint-command-lib.ts +60 -0
- package/scripts/consumer-workflow-lint-contract.ts +14 -0
- package/scripts/consumer-workflow-lint-markdown-lib.ts +39 -0
- package/scripts/consumer-workflow-lint-runner-lib.ts +52 -0
- package/scripts/fill-adapter-external-ide-replay-closeout.sh +90 -0
- package/scripts/framework-menu-action-contract.ts +17 -0
- package/scripts/framework-menu-actions-diagnostics-adapter-lib.ts +31 -0
- package/scripts/framework-menu-actions-diagnostics-ci-lib.ts +40 -0
- package/scripts/framework-menu-actions-diagnostics-maintenance-lib.ts +22 -0
- package/scripts/framework-menu-actions-diagnostics-support-core-lib.ts +40 -0
- package/scripts/framework-menu-actions-diagnostics-support-lib.ts +15 -0
- package/scripts/framework-menu-actions-diagnostics-support-triage-lib.ts +28 -0
- package/scripts/framework-menu-actions-diagnostics.ts +19 -0
- package/scripts/framework-menu-actions-gates-ci-lib.ts +30 -0
- package/scripts/framework-menu-actions-gates-stage-lib.ts +32 -0
- package/scripts/framework-menu-actions-gates-tools-lib.ts +26 -0
- package/scripts/framework-menu-actions-gates.ts +17 -0
- package/scripts/framework-menu-actions-phase5-exec-lib.ts +32 -0
- package/scripts/framework-menu-actions-phase5-exit-lib.ts +16 -0
- package/scripts/framework-menu-actions-phase5-reports-lib.ts +49 -0
- package/scripts/framework-menu-actions-phase5.ts +17 -0
- package/scripts/framework-menu-actions.ts +22 -0
- package/scripts/framework-menu-builders-adapter.ts +29 -0
- package/scripts/framework-menu-builders-consumer-contract.ts +19 -0
- package/scripts/framework-menu-builders-consumer-mock-ab-lib.ts +22 -0
- package/scripts/framework-menu-builders-consumer-triage-lib.ts +31 -0
- package/scripts/framework-menu-builders-consumer.ts +6 -0
- package/scripts/framework-menu-builders-maintenance.ts +24 -0
- package/scripts/framework-menu-builders-phase5-blockers-lib.ts +16 -0
- package/scripts/framework-menu-builders-phase5-closure-lib.ts +46 -0
- package/scripts/framework-menu-builders-phase5-contract.ts +43 -0
- package/scripts/framework-menu-builders-phase5-handoff-lib.ts +38 -0
- package/scripts/framework-menu-builders-phase5-status-lib.ts +24 -0
- package/scripts/framework-menu-builders-phase5.ts +12 -0
- package/scripts/framework-menu-builders-shared-lib.ts +3 -0
- package/scripts/framework-menu-builders.ts +19 -0
- package/scripts/framework-menu-gate-lib.ts +53 -0
- package/scripts/framework-menu-prompt-types.ts +12 -0
- package/scripts/framework-menu-prompts-adapter.ts +50 -0
- package/scripts/framework-menu-prompts-consumer-ci-lib.ts +36 -0
- package/scripts/framework-menu-prompts-consumer-contract.ts +46 -0
- package/scripts/framework-menu-prompts-consumer-startup-triage-lib.ts +69 -0
- package/scripts/framework-menu-prompts-consumer-support-bundle-lib.ts +20 -0
- package/scripts/framework-menu-prompts-consumer-support-ticket-lib.ts +27 -0
- package/scripts/framework-menu-prompts-consumer-unblock-status-lib.ts +33 -0
- package/scripts/framework-menu-prompts-consumer-workflow-lint-lib.ts +27 -0
- package/scripts/framework-menu-prompts-consumer.ts +26 -0
- package/scripts/framework-menu-prompts-phase5-blockers-lib.ts +24 -0
- package/scripts/framework-menu-prompts-phase5-closure-lib.ts +17 -0
- package/scripts/framework-menu-prompts-phase5-closure-live-lib.ts +51 -0
- package/scripts/framework-menu-prompts-phase5-closure-mock-lib.ts +23 -0
- package/scripts/framework-menu-prompts-phase5-closure-shared-lib.ts +24 -0
- package/scripts/framework-menu-prompts-phase5-contract.ts +48 -0
- package/scripts/framework-menu-prompts-phase5-handoff-lib.ts +54 -0
- package/scripts/framework-menu-prompts-phase5-mock-ab-lib.ts +36 -0
- package/scripts/framework-menu-prompts-phase5-status-lib.ts +31 -0
- package/scripts/framework-menu-prompts-phase5.ts +16 -0
- package/scripts/framework-menu-prompts.ts +32 -0
- package/scripts/framework-menu-runner-common.ts +13 -0
- package/scripts/framework-menu-runner-constants.ts +3 -0
- package/scripts/framework-menu-runner-evidence-lib.ts +14 -0
- package/scripts/framework-menu-runner-git-lib.ts +13 -0
- package/scripts/framework-menu-runner-path-lib.ts +12 -0
- package/scripts/framework-menu-runner-process-lib.ts +27 -0
- package/scripts/framework-menu-runners-adapter-contract.ts +13 -0
- package/scripts/framework-menu-runners-adapter-readiness-lib.ts +20 -0
- package/scripts/framework-menu-runners-adapter-real-session-lib.ts +20 -0
- package/scripts/framework-menu-runners-adapter-session-lib.ts +19 -0
- package/scripts/framework-menu-runners-adapter.ts +9 -0
- package/scripts/framework-menu-runners-consumer-artifacts-lib.ts +11 -0
- package/scripts/framework-menu-runners-consumer-auth-lib.ts +11 -0
- package/scripts/framework-menu-runners-consumer-contract.ts +55 -0
- package/scripts/framework-menu-runners-consumer-exec-lib.ts +13 -0
- package/scripts/framework-menu-runners-consumer-mock-ab-lib.ts +24 -0
- package/scripts/framework-menu-runners-consumer-startup-triage-lib.ts +24 -0
- package/scripts/framework-menu-runners-consumer-support-bundle-lib.ts +11 -0
- package/scripts/framework-menu-runners-consumer-support-ticket-lib.ts +20 -0
- package/scripts/framework-menu-runners-consumer-unblock-lib.ts +22 -0
- package/scripts/framework-menu-runners-consumer-workflow-lib.ts +18 -0
- package/scripts/framework-menu-runners-consumer.ts +21 -0
- package/scripts/framework-menu-runners-phase5-blockers-lib.ts +18 -0
- package/scripts/framework-menu-runners-phase5-closure-lib.ts +25 -0
- package/scripts/framework-menu-runners-phase5-contract.ts +39 -0
- package/scripts/framework-menu-runners-phase5-exec-lib.ts +25 -0
- package/scripts/framework-menu-runners-phase5-handoff-lib.ts +25 -0
- package/scripts/framework-menu-runners-phase5-status-lib.ts +20 -0
- package/scripts/framework-menu-runners-phase5.ts +12 -0
- package/scripts/framework-menu-runners-validation-cleanup-lib.ts +31 -0
- package/scripts/framework-menu-runners-validation-docs-lib.ts +20 -0
- package/scripts/framework-menu-runners-validation-skills-lib.ts +11 -0
- package/scripts/framework-menu-runners-validation.ts +4 -0
- package/scripts/framework-menu-runners.ts +37 -0
- package/scripts/framework-menu-skills-lib.ts +26 -0
- package/scripts/framework-menu.cli.ts +3 -0
- package/scripts/framework-menu.ts +67 -0
- package/scripts/lint-consumer-workflows.ts +29 -0
- package/scripts/mark-phase5-escalation-submitted.sh +49 -0
- package/scripts/mark-phase8-followup-posted-now.sh +33 -0
- package/scripts/mark-phase8-followup-replied-now.sh +52 -0
- package/scripts/mark-phase8-support-followup-state.sh +89 -0
- package/scripts/mock-consumer-ab-blockers-lib.ts +36 -0
- package/scripts/mock-consumer-ab-cli-arg-setters-lib.ts +46 -0
- package/scripts/mock-consumer-ab-cli-defaults-lib.ts +19 -0
- package/scripts/mock-consumer-ab-cli-lib.ts +46 -0
- package/scripts/mock-consumer-ab-contract.ts +30 -0
- package/scripts/mock-consumer-ab-evidence-lib.ts +50 -0
- package/scripts/mock-consumer-ab-markdown-assertions-lib.ts +24 -0
- package/scripts/mock-consumer-ab-markdown-blockers-lib.ts +9 -0
- package/scripts/mock-consumer-ab-markdown-contract.ts +16 -0
- package/scripts/mock-consumer-ab-markdown-header-inputs-lib.ts +21 -0
- package/scripts/mock-consumer-ab-markdown-lib.ts +24 -0
- package/scripts/mock-consumer-ab-markdown-next-actions-lib.ts +22 -0
- package/scripts/mock-consumer-ab-markdown-sections-lib.ts +21 -0
- package/scripts/mock-consumer-ab-report-lib.ts +12 -0
- package/scripts/mock-consumer-ab-runner-lib.ts +51 -0
- package/scripts/mock-consumer-smoke-contract.ts +14 -0
- package/scripts/mock-consumer-smoke-lib.ts +3 -0
- package/scripts/mock-consumer-smoke-summary-lib.ts +59 -0
- package/scripts/mock-consumer-smoke-verdict-lib.ts +27 -0
- package/scripts/mock-consumer-startup-triage-arg-flags-lib.ts +13 -0
- package/scripts/mock-consumer-startup-triage-arg-values-lib.ts +35 -0
- package/scripts/mock-consumer-startup-triage-cli-contract.ts +7 -0
- package/scripts/mock-consumer-startup-triage-cli-lib.ts +56 -0
- package/scripts/mock-consumer-startup-triage-lib.ts +2 -0
- package/scripts/mock-consumer-startup-triage-markdown-lib.ts +57 -0
- package/scripts/mock-consumer-startup-unblock-markdown-lib.ts +38 -0
- package/scripts/package-install-smoke-command-lib.ts +67 -0
- package/scripts/package-install-smoke-consumer-git-lib.ts +10 -0
- package/scripts/package-install-smoke-consumer-git-payload-lib.ts +45 -0
- package/scripts/package-install-smoke-consumer-git-repo-lib.ts +49 -0
- package/scripts/package-install-smoke-consumer-npm-lib.ts +47 -0
- package/scripts/package-install-smoke-consumer-repo-setup-lib.ts +31 -0
- package/scripts/package-install-smoke-contract.ts +6 -0
- package/scripts/package-install-smoke-execution-lib.ts +73 -0
- package/scripts/package-install-smoke-execution-steps-lib.ts +46 -0
- package/scripts/package-install-smoke-execution-summary-lib.ts +51 -0
- package/scripts/package-install-smoke-file-lib.ts +33 -0
- package/scripts/package-install-smoke-fixtures-content-lib.ts +57 -0
- package/scripts/package-install-smoke-fixtures-lib.ts +41 -0
- package/scripts/package-install-smoke-fixtures-write-lib.ts +14 -0
- package/scripts/package-install-smoke-gate-lib.ts +64 -0
- package/scripts/package-install-smoke-lib.ts +3 -0
- package/scripts/package-install-smoke-lifecycle-lib.ts +91 -0
- package/scripts/package-install-smoke-mode-lib.ts +31 -0
- package/scripts/package-install-smoke-repo-setup-lib.ts +2 -0
- package/scripts/package-install-smoke-runner-common.ts +12 -0
- package/scripts/package-install-smoke-tarball-lib.ts +34 -0
- package/scripts/package-install-smoke-workspace-contract.ts +11 -0
- package/scripts/package-install-smoke-workspace-factory-lib.ts +38 -0
- package/scripts/package-install-smoke-workspace-lib.ts +7 -0
- package/scripts/package-install-smoke-workspace-report-lib.ts +44 -0
- package/scripts/package-install-smoke.ts +7 -0
- package/scripts/package-manifest-lib.ts +44 -0
- package/scripts/phase5-blockers-contract.ts +36 -0
- package/scripts/phase5-blockers-detected-blockers-lib.ts +35 -0
- package/scripts/phase5-blockers-markdown-header-inputs-signals-lib.ts +48 -0
- package/scripts/phase5-blockers-markdown-lib.ts +51 -0
- package/scripts/phase5-blockers-markdown-list-utils-lib.ts +13 -0
- package/scripts/phase5-blockers-markdown-next-actions-blocked-lib.ts +46 -0
- package/scripts/phase5-blockers-markdown-next-actions-lib.ts +29 -0
- package/scripts/phase5-blockers-markdown-next-actions-ready-lib.ts +13 -0
- package/scripts/phase5-blockers-markdown-sections-lib.ts +7 -0
- package/scripts/phase5-blockers-markdown-static-sections-lib.ts +26 -0
- package/scripts/phase5-blockers-missing-inputs-lib.ts +16 -0
- package/scripts/phase5-blockers-parser-adapter-lib.ts +44 -0
- package/scripts/phase5-blockers-parser-consumer-lib.ts +32 -0
- package/scripts/phase5-blockers-parser-lib.ts +2 -0
- package/scripts/phase5-blockers-readiness-arg-flags-lib.ts +13 -0
- package/scripts/phase5-blockers-readiness-arg-values-lib.ts +27 -0
- package/scripts/phase5-blockers-readiness-cli-contract.ts +6 -0
- package/scripts/phase5-blockers-readiness-cli-lib.ts +55 -0
- package/scripts/phase5-blockers-readiness-input-lib.ts +17 -0
- package/scripts/phase5-blockers-readiness-lib.ts +8 -0
- package/scripts/phase5-blockers-summary-lib.ts +48 -0
- package/scripts/phase5-execution-closure-commands-lib.ts +32 -0
- package/scripts/phase5-execution-closure-lib.ts +2 -0
- package/scripts/phase5-execution-closure-outputs-lib.ts +25 -0
- package/scripts/phase5-execution-closure-plan-adapter-commands-lib.ts +41 -0
- package/scripts/phase5-execution-closure-plan-adapter-lib.ts +25 -0
- package/scripts/phase5-execution-closure-plan-consumer-lib.ts +5 -0
- package/scripts/phase5-execution-closure-plan-consumer-preflight-lib.ts +58 -0
- package/scripts/phase5-execution-closure-plan-consumer-triage-lib.ts +62 -0
- package/scripts/phase5-execution-closure-plan-contract.ts +42 -0
- package/scripts/phase5-execution-closure-plan-lib.ts +7 -0
- package/scripts/phase5-execution-closure-plan-phase5-args-lib.ts +52 -0
- package/scripts/phase5-execution-closure-plan-phase5-lib.ts +37 -0
- package/scripts/phase5-execution-closure-plan-validation-lib.ts +15 -0
- package/scripts/phase5-execution-closure-report-contract.ts +22 -0
- package/scripts/phase5-execution-closure-report-executions-lib.ts +35 -0
- package/scripts/phase5-execution-closure-report-header-lib.ts +38 -0
- package/scripts/phase5-execution-closure-report-lib.ts +31 -0
- package/scripts/phase5-execution-closure-report-next-actions-lib.ts +19 -0
- package/scripts/phase5-execution-closure-report-sections-lib.ts +51 -0
- package/scripts/phase5-execution-closure-runner-arg-flags-lib.ts +32 -0
- package/scripts/phase5-execution-closure-runner-arg-handlers-lib.ts +33 -0
- package/scripts/phase5-execution-closure-runner-arg-value-handlers-lib.ts +62 -0
- package/scripts/phase5-execution-closure-runner-arg-values-lib.ts +39 -0
- package/scripts/phase5-execution-closure-runner-contract.ts +31 -0
- package/scripts/phase5-execution-closure-runner-exec-command-lib.ts +20 -0
- package/scripts/phase5-execution-closure-runner-exec-error-lib.ts +32 -0
- package/scripts/phase5-execution-closure-runner-exec-lib.ts +35 -0
- package/scripts/phase5-execution-closure-runner-lib.ts +8 -0
- package/scripts/phase5-execution-closure-runner-mappers-lib.ts +30 -0
- package/scripts/phase5-execution-closure-runner-options-normalizer-lib.ts +19 -0
- package/scripts/phase5-execution-closure-runner-parse-lib.ts +23 -0
- package/scripts/phase5-execution-closure-runner-plan-lib.ts +14 -0
- package/scripts/phase5-execution-closure-runner-report-writer-lib.ts +12 -0
- package/scripts/phase5-execution-closure-status-arg-flags-lib.ts +13 -0
- package/scripts/phase5-execution-closure-status-arg-values-lib.ts +35 -0
- package/scripts/phase5-execution-closure-status-blockers-lib.ts +47 -0
- package/scripts/phase5-execution-closure-status-cli-contract.ts +24 -0
- package/scripts/phase5-execution-closure-status-cli-input-lib.ts +17 -0
- package/scripts/phase5-execution-closure-status-cli-lib.ts +10 -0
- package/scripts/phase5-execution-closure-status-cli-parse-lib.ts +59 -0
- package/scripts/phase5-execution-closure-status-contract.ts +48 -0
- package/scripts/phase5-execution-closure-status-lib.ts +8 -0
- package/scripts/phase5-execution-closure-status-markdown-lib.ts +22 -0
- package/scripts/phase5-execution-closure-status-markdown-list-lib.ts +16 -0
- package/scripts/phase5-execution-closure-status-markdown-next-actions-lib.ts +24 -0
- package/scripts/phase5-execution-closure-status-markdown-sections-lib.ts +7 -0
- package/scripts/phase5-execution-closure-status-markdown-static-sections-lib.ts +58 -0
- package/scripts/phase5-execution-closure-status-missing-inputs-lib.ts +19 -0
- package/scripts/phase5-execution-closure-status-parser-lib.ts +4 -0
- package/scripts/phase5-execution-closure-status-summary-helpers-lib.ts +6 -0
- package/scripts/phase5-execution-closure-status-summary-lib.ts +34 -0
- package/scripts/phase5-execution-closure-status-verdict-lib.ts +11 -0
- package/scripts/phase5-external-handoff-contract.ts +51 -0
- package/scripts/phase5-external-handoff-inputs-artifacts-lib.ts +45 -0
- package/scripts/phase5-external-handoff-lib.ts +3 -0
- package/scripts/phase5-external-handoff-markdown-core-sections-lib.ts +70 -0
- package/scripts/phase5-external-handoff-markdown-header-lib.ts +15 -0
- package/scripts/phase5-external-handoff-markdown-lib.ts +44 -0
- package/scripts/phase5-external-handoff-markdown-list-lib.ts +16 -0
- package/scripts/phase5-external-handoff-markdown-list-sections-lib.ts +54 -0
- package/scripts/phase5-external-handoff-markdown-next-actions-lib.ts +27 -0
- package/scripts/phase5-external-handoff-markdown-sections-append-lib.ts +69 -0
- package/scripts/phase5-external-handoff-markdown-sections-lib.ts +12 -0
- package/scripts/phase5-external-handoff-summary-helpers-lib.ts +9 -0
- package/scripts/phase5-external-handoff-summary-lib.ts +46 -0
- package/scripts/phase5-external-handoff-verdict-evaluators-lib.ts +67 -0
- package/scripts/prepare-adapter-external-ide-replay-closeout-auto.sh +100 -0
- package/scripts/prepare-phase5-escalation-submission.sh +21 -0
- package/scripts/refresh-phase5-latest-escalation.sh +94 -0
- package/scripts/run-phase5-execution-closure.ts +58 -0
- package/scripts/run-phase5-post-support-refresh.sh +25 -0
- package/scripts/run-phase8-after-billing-reactivation.sh +31 -0
- package/scripts/run-phase8-autopilot.sh +42 -0
- package/scripts/run-phase8-close-ready.sh +38 -0
- package/scripts/run-phase8-doctor.sh +61 -0
- package/scripts/run-phase8-next-step.sh +39 -0
- package/scripts/run-phase8-status-pack.sh +35 -0
- package/scripts/run-phase8-tick.sh +35 -0
- package/scripts/sync-codex-skills.sh +40 -0
- package/scripts/sync-phase5-latest-docs.sh +119 -0
- package/scripts/validation-docs-hygiene-lib.ts +46 -0
- package/skills.lock.json +178 -0
- package/skills.sources.json +33 -0
- package/tsconfig.json +39 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { AiEvidenceV2_1 } from '../evidence/schema';
|
|
2
|
+
export const sortRulesets = (rulesets: AiEvidenceV2_1['rulesets']): AiEvidenceV2_1['rulesets'] => {
|
|
3
|
+
return [...rulesets].sort((left, right) => {
|
|
4
|
+
const byPlatform = left.platform.localeCompare(right.platform);
|
|
5
|
+
if (byPlatform !== 0) {
|
|
6
|
+
return byPlatform;
|
|
7
|
+
}
|
|
8
|
+
const byBundle = left.bundle.localeCompare(right.bundle);
|
|
9
|
+
if (byBundle !== 0) {
|
|
10
|
+
return byBundle;
|
|
11
|
+
}
|
|
12
|
+
return left.hash.localeCompare(right.hash);
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const sortPlatforms = (platforms: AiEvidenceV2_1['platforms']) => {
|
|
17
|
+
return Object.entries(platforms)
|
|
18
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
19
|
+
.map(([platform, state]) => ({
|
|
20
|
+
platform,
|
|
21
|
+
detected: state.detected,
|
|
22
|
+
confidence: state.confidence,
|
|
23
|
+
}));
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const severityOrder = ['CRITICAL', 'ERROR', 'WARN', 'INFO'] as const;
|
|
27
|
+
export const severityRank: Record<string, number> = {
|
|
28
|
+
CRITICAL: 0,
|
|
29
|
+
ERROR: 1,
|
|
30
|
+
WARN: 2,
|
|
31
|
+
INFO: 3,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const toSeverityCounts = (
|
|
35
|
+
findings: AiEvidenceV2_1['snapshot']['findings']
|
|
36
|
+
): Record<string, number> => {
|
|
37
|
+
const counts = new Map<string, number>();
|
|
38
|
+
for (const finding of findings) {
|
|
39
|
+
const key = finding.severity.toUpperCase();
|
|
40
|
+
counts.set(key, (counts.get(key) ?? 0) + 1);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const orderedEntries = [...counts.entries()].sort(([left], [right]) => {
|
|
44
|
+
const leftIndex = severityOrder.indexOf(left as (typeof severityOrder)[number]);
|
|
45
|
+
const rightIndex = severityOrder.indexOf(right as (typeof severityOrder)[number]);
|
|
46
|
+
const normalizedLeft = leftIndex === -1 ? Number.MAX_SAFE_INTEGER : leftIndex;
|
|
47
|
+
const normalizedRight = rightIndex === -1 ? Number.MAX_SAFE_INTEGER : rightIndex;
|
|
48
|
+
if (normalizedLeft !== normalizedRight) {
|
|
49
|
+
return normalizedLeft - normalizedRight;
|
|
50
|
+
}
|
|
51
|
+
return left.localeCompare(right);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
return Object.fromEntries(orderedEntries);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const toRulesetsByPlatform = (rulesets: AiEvidenceV2_1['rulesets']): Record<string, number> => {
|
|
58
|
+
const counts = new Map<string, number>();
|
|
59
|
+
for (const ruleset of rulesets) {
|
|
60
|
+
counts.set(ruleset.platform, (counts.get(ruleset.platform) ?? 0) + 1);
|
|
61
|
+
}
|
|
62
|
+
return Object.fromEntries([...counts.entries()].sort(([left], [right]) => left.localeCompare(right)));
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const toRulesetsFingerprint = (rulesets: AiEvidenceV2_1['rulesets']): string => {
|
|
66
|
+
return sortRulesets(rulesets)
|
|
67
|
+
.map((ruleset) => ruleset.hash)
|
|
68
|
+
.join('|');
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export const toRulesetsBundlesCount = (rulesets: AiEvidenceV2_1['rulesets']): number => {
|
|
72
|
+
const bundles = new Set<string>();
|
|
73
|
+
for (const ruleset of rulesets) {
|
|
74
|
+
bundles.add(ruleset.bundle);
|
|
75
|
+
}
|
|
76
|
+
return bundles.size;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export const toRulesetsPlatformsCount = (rulesets: AiEvidenceV2_1['rulesets']): number => {
|
|
80
|
+
const platforms = new Set<string>();
|
|
81
|
+
for (const ruleset of rulesets) {
|
|
82
|
+
platforms.add(ruleset.platform);
|
|
83
|
+
}
|
|
84
|
+
return platforms.size;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const toRulesetsHashesCount = (rulesets: AiEvidenceV2_1['rulesets']): number => {
|
|
88
|
+
const hashes = new Set<string>();
|
|
89
|
+
for (const ruleset of rulesets) {
|
|
90
|
+
hashes.add(ruleset.hash);
|
|
91
|
+
}
|
|
92
|
+
return hashes.size;
|
|
93
|
+
};
|
|
94
|
+
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { AiEvidenceV2_1 } from '../evidence/schema';
|
|
2
|
+
import { severityRank } from './evidenceFacetsBase';
|
|
3
|
+
import { inferPlatformFromFilePath } from './evidenceFacetsSuppressed';
|
|
4
|
+
export const toFindingsFilesCount = (findings: AiEvidenceV2_1['snapshot']['findings']): number => {
|
|
5
|
+
const files = new Set<string>();
|
|
6
|
+
for (const finding of findings) {
|
|
7
|
+
files.add(finding.file);
|
|
8
|
+
}
|
|
9
|
+
return files.size;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const toFindingsRulesCount = (findings: AiEvidenceV2_1['snapshot']['findings']): number => {
|
|
13
|
+
const rules = new Set<string>();
|
|
14
|
+
for (const finding of findings) {
|
|
15
|
+
rules.add(finding.ruleId);
|
|
16
|
+
}
|
|
17
|
+
return rules.size;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const toFindingsWithLinesCount = (findings: AiEvidenceV2_1['snapshot']['findings']): number => {
|
|
21
|
+
let count = 0;
|
|
22
|
+
for (const finding of findings) {
|
|
23
|
+
if (finding.lines && Array.isArray(finding.lines) && finding.lines.length > 0) {
|
|
24
|
+
count += 1;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return count;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const toPlatformConfidenceCounts = (
|
|
31
|
+
platforms: AiEvidenceV2_1['platforms']
|
|
32
|
+
): Record<string, number> => {
|
|
33
|
+
const counts = new Map<string, number>();
|
|
34
|
+
for (const entry of Object.values(platforms)) {
|
|
35
|
+
counts.set(entry.confidence, (counts.get(entry.confidence) ?? 0) + 1);
|
|
36
|
+
}
|
|
37
|
+
return Object.fromEntries([...counts.entries()].sort(([left], [right]) => left.localeCompare(right)));
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export const toFindingsByPlatform = (
|
|
41
|
+
findings: AiEvidenceV2_1['snapshot']['findings']
|
|
42
|
+
): Record<string, number> => {
|
|
43
|
+
const counts = new Map<string, number>();
|
|
44
|
+
for (const finding of findings) {
|
|
45
|
+
const platform = inferPlatformFromFilePath(finding.file);
|
|
46
|
+
counts.set(platform, (counts.get(platform) ?? 0) + 1);
|
|
47
|
+
}
|
|
48
|
+
return Object.fromEntries([...counts.entries()].sort(([left], [right]) => left.localeCompare(right)));
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export const toLedgerByPlatform = (ledger: AiEvidenceV2_1['ledger']): Record<string, number> => {
|
|
52
|
+
const counts = new Map<string, number>();
|
|
53
|
+
for (const entry of ledger) {
|
|
54
|
+
const platform = inferPlatformFromFilePath(entry.file);
|
|
55
|
+
counts.set(platform, (counts.get(platform) ?? 0) + 1);
|
|
56
|
+
}
|
|
57
|
+
return Object.fromEntries([...counts.entries()].sort(([left], [right]) => left.localeCompare(right)));
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const toLedgerFilesCount = (ledger: AiEvidenceV2_1['ledger']): number => {
|
|
61
|
+
const files = new Set<string>();
|
|
62
|
+
for (const entry of ledger) {
|
|
63
|
+
files.add(entry.file);
|
|
64
|
+
}
|
|
65
|
+
return files.size;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export const toLedgerRulesCount = (ledger: AiEvidenceV2_1['ledger']): number => {
|
|
69
|
+
const rules = new Set<string>();
|
|
70
|
+
for (const entry of ledger) {
|
|
71
|
+
rules.add(entry.ruleId);
|
|
72
|
+
}
|
|
73
|
+
return rules.size;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const toHighestSeverity = (
|
|
77
|
+
findings: AiEvidenceV2_1['snapshot']['findings']
|
|
78
|
+
): string | null => {
|
|
79
|
+
let highest: string | null = null;
|
|
80
|
+
for (const finding of findings) {
|
|
81
|
+
const severity = finding.severity.toUpperCase();
|
|
82
|
+
if (highest === null) {
|
|
83
|
+
highest = severity;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const currentRank = severityRank[severity] ?? Number.MAX_SAFE_INTEGER;
|
|
87
|
+
const highestRank = severityRank[highest] ?? Number.MAX_SAFE_INTEGER;
|
|
88
|
+
if (currentRank < highestRank) {
|
|
89
|
+
highest = severity;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return highest;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export const toBlockingFindingsCount = (findings: AiEvidenceV2_1['snapshot']['findings']): number => {
|
|
96
|
+
let count = 0;
|
|
97
|
+
for (const finding of findings) {
|
|
98
|
+
const rank = severityRank[finding.severity.toUpperCase()] ?? Number.MAX_SAFE_INTEGER;
|
|
99
|
+
if (rank <= severityRank.ERROR) {
|
|
100
|
+
count += 1;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return count;
|
|
104
|
+
};
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import type { AiEvidenceV2_1 } from '../evidence/schema';
|
|
2
|
+
import {
|
|
3
|
+
toSuppressedNonReplacementPlatformsCount,
|
|
4
|
+
toSuppressedReplacementPlatformsCount,
|
|
5
|
+
toSuppressedWithoutReplacementPlatformsCount,
|
|
6
|
+
} from './evidenceFacetsSuppressedRelations';
|
|
7
|
+
|
|
8
|
+
const toRoundedRatioPct = (numerator: number, denominator: number): number => {
|
|
9
|
+
if (denominator === 0) {
|
|
10
|
+
return 0;
|
|
11
|
+
}
|
|
12
|
+
return Math.round((numerator / denominator) * 100);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const toSuppressedReplacementRulesCount = (evidence: AiEvidenceV2_1): number => {
|
|
16
|
+
const replacements = new Set<string>();
|
|
17
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
18
|
+
replacements.add(entry.replacedByRuleId);
|
|
19
|
+
}
|
|
20
|
+
return replacements.size;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const toSuppressedRulesCount = (evidence: AiEvidenceV2_1): number => {
|
|
24
|
+
const rules = new Set<string>();
|
|
25
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
26
|
+
rules.add(entry.ruleId);
|
|
27
|
+
}
|
|
28
|
+
return rules.size;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const toSuppressedReplacementRulesRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
32
|
+
const replacementRules = toSuppressedReplacementRulesCount(evidence);
|
|
33
|
+
const suppressedRules = toSuppressedRulesCount(evidence);
|
|
34
|
+
return toRoundedRatioPct(replacementRules, suppressedRules);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const toSuppressedNonReplacementRulesCount = (evidence: AiEvidenceV2_1): number => {
|
|
38
|
+
const rules = new Set<string>();
|
|
39
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
40
|
+
if (entry.replacementRuleId === null) {
|
|
41
|
+
rules.add(entry.ruleId);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return rules.size;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const toSuppressedNonReplacementRulesRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
48
|
+
const nonReplacementRules = toSuppressedNonReplacementRulesCount(evidence);
|
|
49
|
+
const suppressedRules = toSuppressedRulesCount(evidence);
|
|
50
|
+
return toRoundedRatioPct(nonReplacementRules, suppressedRules);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const inferPlatformFromFilePath = (
|
|
54
|
+
filePath: string
|
|
55
|
+
): 'ios' | 'backend' | 'frontend' | 'android' | 'generic' => {
|
|
56
|
+
const file = filePath.toLowerCase();
|
|
57
|
+
if (file.startsWith('apps/ios/') || file.endsWith('.swift')) {
|
|
58
|
+
return 'ios';
|
|
59
|
+
}
|
|
60
|
+
if (file.startsWith('apps/backend/')) {
|
|
61
|
+
return 'backend';
|
|
62
|
+
}
|
|
63
|
+
if (file.startsWith('apps/frontend/')) {
|
|
64
|
+
return 'frontend';
|
|
65
|
+
}
|
|
66
|
+
if (file.startsWith('apps/android/') || file.endsWith('.kt') || file.endsWith('.kts')) {
|
|
67
|
+
return 'android';
|
|
68
|
+
}
|
|
69
|
+
return 'generic';
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const toSuppressedPlatformsCount = (evidence: AiEvidenceV2_1): number => {
|
|
73
|
+
const platforms = new Set<string>();
|
|
74
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
75
|
+
platforms.add(inferPlatformFromFilePath(entry.file));
|
|
76
|
+
}
|
|
77
|
+
return platforms.size;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export const toSuppressedFilesCount = (evidence: AiEvidenceV2_1): number => {
|
|
81
|
+
const files = new Set<string>();
|
|
82
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
83
|
+
files.add(entry.file);
|
|
84
|
+
}
|
|
85
|
+
return files.size;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export const toSuppressedReasonsCount = (evidence: AiEvidenceV2_1): number => {
|
|
89
|
+
const reasons = new Set<string>();
|
|
90
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
91
|
+
reasons.add(entry.reason);
|
|
92
|
+
}
|
|
93
|
+
return reasons.size;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export const toSuppressedWithReplacementCount = (evidence: AiEvidenceV2_1): number => {
|
|
97
|
+
let count = 0;
|
|
98
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
99
|
+
if (entry.replacementRuleId !== null) {
|
|
100
|
+
count += 1;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return count;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export const toSuppressedWithReplacementFilesCount = (evidence: AiEvidenceV2_1): number => {
|
|
107
|
+
const files = new Set<string>();
|
|
108
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
109
|
+
if (entry.replacementRuleId !== null || entry.replacedByRuleId.length > 0) {
|
|
110
|
+
files.add(entry.file);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return files.size;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export const toSuppressedWithReplacementPlatformsCount = (evidence: AiEvidenceV2_1): number => {
|
|
117
|
+
const platforms = new Set<string>();
|
|
118
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
119
|
+
if (entry.replacementRuleId !== null || entry.replacedByRuleId.length > 0) {
|
|
120
|
+
platforms.add(entry.platform ?? '');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return platforms.size;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export const toSuppressedWithoutReplacementFilesCount = (evidence: AiEvidenceV2_1): number => {
|
|
127
|
+
const files = new Set<string>();
|
|
128
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
129
|
+
if (entry.replacementRuleId === null && entry.replacedByRuleId.length === 0) {
|
|
130
|
+
files.add(entry.file);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return files.size;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export const toSuppressedNonReplacementFilesCount = (evidence: AiEvidenceV2_1): number => {
|
|
137
|
+
const files = new Set<string>();
|
|
138
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
139
|
+
if (entry.replacementRuleId === null) {
|
|
140
|
+
files.add(entry.file);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return files.size;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
export const toSuppressedWithReplacementFilesRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
147
|
+
const totalFiles = toSuppressedFilesCount(evidence);
|
|
148
|
+
return toRoundedRatioPct(toSuppressedWithReplacementFilesCount(evidence), totalFiles);
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
export const toSuppressedReplacementFilesRatioPct = (evidence: AiEvidenceV2_1): number =>
|
|
152
|
+
toSuppressedWithReplacementFilesRatioPct(evidence);
|
|
153
|
+
|
|
154
|
+
export const toSuppressedWithoutReplacementFilesRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
155
|
+
const totalFiles = toSuppressedFilesCount(evidence);
|
|
156
|
+
return toRoundedRatioPct(toSuppressedWithoutReplacementFilesCount(evidence), totalFiles);
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
export const toSuppressedNonReplacementFilesRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
160
|
+
const totalFiles = toSuppressedFilesCount(evidence);
|
|
161
|
+
return toRoundedRatioPct(toSuppressedNonReplacementFilesCount(evidence), totalFiles);
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
export const toSuppressedWithReplacementPlatformsRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
165
|
+
const totalPlatforms = toSuppressedPlatformsCount(evidence);
|
|
166
|
+
return toRoundedRatioPct(toSuppressedWithReplacementPlatformsCount(evidence), totalPlatforms);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export const toSuppressedWithoutReplacementPlatformsRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
170
|
+
const totalPlatforms = toSuppressedPlatformsCount(evidence);
|
|
171
|
+
return toRoundedRatioPct(toSuppressedWithoutReplacementPlatformsCount(evidence), totalPlatforms);
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export const toSuppressedNonReplacementPlatformsRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
175
|
+
const totalPlatforms = toSuppressedPlatformsCount(evidence);
|
|
176
|
+
return toRoundedRatioPct(toSuppressedNonReplacementPlatformsCount(evidence), totalPlatforms);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
export const toSuppressedReplacementPlatformsRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
180
|
+
const totalPlatforms = toSuppressedPlatformsCount(evidence);
|
|
181
|
+
return toRoundedRatioPct(toSuppressedReplacementPlatformsCount(evidence), totalPlatforms);
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
export const toSuppressedWithReplacementRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
185
|
+
const total = evidence.consolidation?.suppressed?.length ?? 0;
|
|
186
|
+
return toRoundedRatioPct(toSuppressedWithReplacementCount(evidence), total);
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
export const toSuppressedFindingCoverageRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
190
|
+
const suppressedFindingsCount = evidence.consolidation?.suppressed?.length ?? 0;
|
|
191
|
+
const findingUniverseSize =
|
|
192
|
+
suppressedFindingsCount + evidence.snapshot.findings.length;
|
|
193
|
+
return toRoundedRatioPct(suppressedFindingsCount, findingUniverseSize);
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
export const toSuppressedWithoutReplacementCount = (evidence: AiEvidenceV2_1): number => {
|
|
197
|
+
let count = 0;
|
|
198
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
199
|
+
if (entry.replacementRuleId === null) {
|
|
200
|
+
count += 1;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return count;
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
export const toSuppressedNonReplacementRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
207
|
+
return toSuppressedWithoutReplacementRatioPct(evidence);
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export const toSuppressedWithoutReplacementRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
211
|
+
const total = evidence.consolidation?.suppressed?.length ?? 0;
|
|
212
|
+
return toRoundedRatioPct(toSuppressedWithoutReplacementCount(evidence), total);
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
export const toSuppressedReasonsCoverageRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
216
|
+
const suppressedFindingsCount = evidence.consolidation?.suppressed?.length ?? 0;
|
|
217
|
+
const reasonsCount = toSuppressedReasonsCount(evidence);
|
|
218
|
+
return toRoundedRatioPct(reasonsCount, suppressedFindingsCount);
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import type { AiEvidenceV2_1 } from '../evidence/schema';
|
|
2
|
+
|
|
3
|
+
const toSuppressedReasonsCountLocal = (evidence: AiEvidenceV2_1): number => {
|
|
4
|
+
const reasons = new Set<string>();
|
|
5
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
6
|
+
reasons.add(entry.reason);
|
|
7
|
+
}
|
|
8
|
+
return reasons.size;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const toSuppressedRuleFilePairsCount = (evidence: AiEvidenceV2_1): number => {
|
|
12
|
+
const pairs = new Set<string>();
|
|
13
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
14
|
+
pairs.add(`${entry.ruleId}:${entry.file}`);
|
|
15
|
+
}
|
|
16
|
+
return pairs.size;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const toSuppressedReasonsWithReplacementCount = (evidence: AiEvidenceV2_1): number => {
|
|
20
|
+
const reasons = new Set<string>();
|
|
21
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
22
|
+
if (entry.replacementRuleId !== null) {
|
|
23
|
+
reasons.add(entry.reason);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return reasons.size;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const toSuppressedReasonsWithReplacementRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
30
|
+
const reasonsWithReplacement = toSuppressedReasonsWithReplacementCount(evidence);
|
|
31
|
+
const reasonsCount = toSuppressedReasonsCountLocal(evidence);
|
|
32
|
+
if (reasonsCount === 0) {
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
return Math.round((reasonsWithReplacement / reasonsCount) * 100);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const toSuppressedReasonsWithoutReplacementCount = (evidence: AiEvidenceV2_1): number => {
|
|
39
|
+
const reasons = new Set<string>();
|
|
40
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
41
|
+
if (entry.replacementRuleId === null) {
|
|
42
|
+
reasons.add(entry.reason);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return reasons.size;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const toSuppressedReasonsWithoutReplacementRatioPct = (evidence: AiEvidenceV2_1): number => {
|
|
49
|
+
const reasonsWithoutReplacement = toSuppressedReasonsWithoutReplacementCount(evidence);
|
|
50
|
+
const reasonsCount = toSuppressedReasonsCountLocal(evidence);
|
|
51
|
+
if (reasonsCount === 0) {
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
return Math.round((reasonsWithoutReplacement / reasonsCount) * 100);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const toSuppressedPlatformRulePairsCount = (evidence: AiEvidenceV2_1): number => {
|
|
58
|
+
const pairs = new Set<string>();
|
|
59
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
60
|
+
pairs.add(`${entry.platform}:${entry.ruleId}`);
|
|
61
|
+
}
|
|
62
|
+
return pairs.size;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const toSuppressedPlatformFilePairsCount = (evidence: AiEvidenceV2_1): number => {
|
|
66
|
+
const pairs = new Set<string>();
|
|
67
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
68
|
+
pairs.add(`${entry.platform}:${entry.file}`);
|
|
69
|
+
}
|
|
70
|
+
return pairs.size;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const toSuppressedReplacementRuleFilePairsCount = (evidence: AiEvidenceV2_1): number => {
|
|
74
|
+
const pairs = new Set<string>();
|
|
75
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
76
|
+
if (entry.replacementRuleId !== null) {
|
|
77
|
+
pairs.add(`${entry.replacementRuleId}:${entry.file}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return pairs.size;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const toSuppressedReplacementRuleFilePairsRatioPct = (
|
|
84
|
+
evidence: AiEvidenceV2_1,
|
|
85
|
+
): number => {
|
|
86
|
+
const replacementRuleFilePairs = toSuppressedReplacementRuleFilePairsCount(evidence);
|
|
87
|
+
const totalRuleFilePairs = toSuppressedRuleFilePairsCount(evidence);
|
|
88
|
+
if (totalRuleFilePairs === 0) {
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
return Math.round((replacementRuleFilePairs / totalRuleFilePairs) * 100);
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const toSuppressedReplacementRulePlatformPairsCount = (evidence: AiEvidenceV2_1): number => {
|
|
95
|
+
const pairs = new Set<string>();
|
|
96
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
97
|
+
if (entry.replacementRuleId !== null) {
|
|
98
|
+
pairs.add(`${entry.replacementRuleId}:${entry.platform}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return pairs.size;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export const toSuppressedReplacementRulePlatformPairsRatioPct = (
|
|
105
|
+
evidence: AiEvidenceV2_1,
|
|
106
|
+
): number => {
|
|
107
|
+
const replacementRulePlatformPairs = toSuppressedReplacementRulePlatformPairsCount(evidence);
|
|
108
|
+
const totalRulePlatformPairs = toSuppressedPlatformRulePairsCount(evidence);
|
|
109
|
+
if (totalRulePlatformPairs === 0) {
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
return Math.round((replacementRulePlatformPairs / totalRulePlatformPairs) * 100);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
export const toSuppressedReplacementPlatformsCount = (evidence: AiEvidenceV2_1): number => {
|
|
116
|
+
const platforms = new Set<string>();
|
|
117
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
118
|
+
if (entry.replacementRuleId !== null) {
|
|
119
|
+
platforms.add(entry.platform ?? '');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return platforms.size;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export const toSuppressedNonReplacementPlatformsCount = (evidence: AiEvidenceV2_1): number => {
|
|
126
|
+
const platforms = new Set<string>();
|
|
127
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
128
|
+
if (entry.replacementRuleId === null) {
|
|
129
|
+
platforms.add(entry.platform ?? '');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return platforms.size;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
export const toSuppressedWithoutReplacementPlatformsCount = (evidence: AiEvidenceV2_1): number => {
|
|
136
|
+
const platforms = new Set<string>();
|
|
137
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
138
|
+
if ((entry.replacementRuleId === null || entry.replacementRuleId === undefined) && entry.replacedByRuleId.length === 0) {
|
|
139
|
+
platforms.add(entry.platform ?? '');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return platforms.size;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export const toSuppressedNonReplacementReasonFilePairsCount = (
|
|
146
|
+
evidence: AiEvidenceV2_1,
|
|
147
|
+
): number => {
|
|
148
|
+
const pairs = new Set<string>();
|
|
149
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
150
|
+
if (entry.replacementRuleId === null) {
|
|
151
|
+
pairs.add(`${entry.reason}:${entry.file}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return pairs.size;
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export const toSuppressedNonReplacementRuleFilePairsCount = (
|
|
158
|
+
evidence: AiEvidenceV2_1,
|
|
159
|
+
): number => {
|
|
160
|
+
const pairs = new Set<string>();
|
|
161
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
162
|
+
if (entry.replacementRuleId === null) {
|
|
163
|
+
pairs.add(`${entry.ruleId}:${entry.file}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return pairs.size;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export const toSuppressedNonReplacementRuleFilePairsRatioPct = (
|
|
170
|
+
evidence: AiEvidenceV2_1,
|
|
171
|
+
): number => {
|
|
172
|
+
const nonReplacementRuleFilePairs = toSuppressedNonReplacementRuleFilePairsCount(evidence);
|
|
173
|
+
const totalRuleFilePairs = toSuppressedRuleFilePairsCount(evidence);
|
|
174
|
+
if (totalRuleFilePairs === 0) {
|
|
175
|
+
return 0;
|
|
176
|
+
}
|
|
177
|
+
return Math.round((nonReplacementRuleFilePairs / totalRuleFilePairs) * 100);
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
export const toSuppressedNonReplacementRulePlatformPairsCount = (
|
|
181
|
+
evidence: AiEvidenceV2_1,
|
|
182
|
+
): number => {
|
|
183
|
+
const pairs = new Set<string>();
|
|
184
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
185
|
+
if (entry.replacementRuleId === null) {
|
|
186
|
+
pairs.add(`${entry.ruleId}:${entry.platform}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return pairs.size;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
export const toSuppressedNonReplacementRulePlatformPairsRatioPct = (
|
|
193
|
+
evidence: AiEvidenceV2_1,
|
|
194
|
+
): number => {
|
|
195
|
+
const nonReplacementRulePlatformPairs = toSuppressedNonReplacementRulePlatformPairsCount(evidence);
|
|
196
|
+
const totalRulePlatformPairs = toSuppressedPlatformRulePairsCount(evidence);
|
|
197
|
+
if (totalRulePlatformPairs === 0) {
|
|
198
|
+
return 0;
|
|
199
|
+
}
|
|
200
|
+
return Math.round((nonReplacementRulePlatformPairs / totalRulePlatformPairs) * 100);
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
export const toSuppressedNonReplacementReasonsCount = (
|
|
204
|
+
evidence: AiEvidenceV2_1,
|
|
205
|
+
): number => {
|
|
206
|
+
const reasons = new Set<string>();
|
|
207
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
208
|
+
if (entry.replacementRuleId === null) {
|
|
209
|
+
reasons.add(entry.reason);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return reasons.size;
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
export const toSuppressedReplacementReasonFilePairsCount = (
|
|
216
|
+
evidence: AiEvidenceV2_1,
|
|
217
|
+
): number => {
|
|
218
|
+
const pairs = new Set<string>();
|
|
219
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
220
|
+
if (entry.replacementRuleId !== null) {
|
|
221
|
+
pairs.add(`${entry.reason}:${entry.file}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return pairs.size;
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
export const toSuppressedReplacementRuleReasonPairsCount = (
|
|
228
|
+
evidence: AiEvidenceV2_1,
|
|
229
|
+
): number => {
|
|
230
|
+
const pairs = new Set<string>();
|
|
231
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
232
|
+
if (entry.replacementRuleId !== null) {
|
|
233
|
+
pairs.add(`${entry.replacementRuleId}:${entry.reason}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return pairs.size;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
export const toSuppressedReplacementRuleIdsCount = (
|
|
240
|
+
evidence: AiEvidenceV2_1,
|
|
241
|
+
): number => {
|
|
242
|
+
const ruleIds = new Set<string>();
|
|
243
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
244
|
+
const replacementRuleId = entry.replacementRuleId ?? entry.replacedByRuleId;
|
|
245
|
+
if (replacementRuleId.length > 0) {
|
|
246
|
+
ruleIds.add(replacementRuleId);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return ruleIds.size;
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
export const toSuppressedReplacementReasonsCount = (
|
|
253
|
+
evidence: AiEvidenceV2_1,
|
|
254
|
+
): number => {
|
|
255
|
+
const reasons = new Set<string>();
|
|
256
|
+
for (const entry of evidence.consolidation?.suppressed ?? []) {
|
|
257
|
+
if (entry.replacementRuleId !== null) {
|
|
258
|
+
reasons.add(entry.reason);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return reasons.size;
|
|
262
|
+
};
|
|
263
|
+
|