aiox-core 5.0.3 → 5.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.aiox-core/core/execution/predictive-pipeline.js +1283 -0
- package/.aiox-core/core/memory/decision-memory.js +564 -0
- package/.aiox-core/data/entity-registry.yaml +1068 -1028
- package/.aiox-core/data/registry-update-log.jsonl +2 -2
- package/.aiox-core/development/templates/service-template/README.md.hbs +158 -158
- package/.aiox-core/development/templates/service-template/__tests__/index.test.ts.hbs +237 -237
- package/.aiox-core/development/templates/service-template/client.ts.hbs +403 -403
- package/.aiox-core/development/templates/service-template/errors.ts.hbs +182 -182
- package/.aiox-core/development/templates/service-template/index.ts.hbs +120 -120
- package/.aiox-core/development/templates/service-template/package.json.hbs +87 -87
- package/.aiox-core/development/templates/service-template/types.ts.hbs +145 -145
- package/.aiox-core/development/templates/squad-template/LICENSE +21 -21
- package/.aiox-core/infrastructure/templates/aiox-sync.yaml.template +182 -182
- package/.aiox-core/infrastructure/templates/coderabbit.yaml.template +279 -279
- package/.aiox-core/infrastructure/templates/github-workflows/ci.yml.template +169 -169
- package/.aiox-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -330
- package/.aiox-core/infrastructure/templates/github-workflows/release.yml.template +196 -196
- package/.aiox-core/infrastructure/templates/gitignore/gitignore-aiox-base.tmpl +63 -63
- package/.aiox-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -18
- package/.aiox-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -85
- package/.aiox-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -145
- package/.aiox-core/install-manifest.yaml +63 -55
- package/.aiox-core/local-config.yaml.template +71 -71
- package/.aiox-core/monitor/hooks/lib/__init__.py +1 -1
- package/.aiox-core/monitor/hooks/lib/enrich.py +58 -58
- package/.aiox-core/monitor/hooks/lib/send_event.py +47 -47
- package/.aiox-core/monitor/hooks/notification.py +29 -29
- package/.aiox-core/monitor/hooks/post_tool_use.py +45 -45
- package/.aiox-core/monitor/hooks/pre_compact.py +29 -29
- package/.aiox-core/monitor/hooks/pre_tool_use.py +40 -40
- package/.aiox-core/monitor/hooks/stop.py +29 -29
- package/.aiox-core/monitor/hooks/subagent_stop.py +29 -29
- package/.aiox-core/monitor/hooks/user_prompt_submit.py +38 -38
- package/.aiox-core/product/templates/adr.hbs +125 -125
- package/.aiox-core/product/templates/dbdr.hbs +241 -241
- package/.aiox-core/product/templates/epic.hbs +212 -212
- package/.aiox-core/product/templates/pmdr.hbs +186 -186
- package/.aiox-core/product/templates/prd-v2.0.hbs +216 -216
- package/.aiox-core/product/templates/prd.hbs +201 -201
- package/.aiox-core/product/templates/story.hbs +263 -263
- package/.aiox-core/product/templates/task.hbs +170 -170
- package/.aiox-core/product/templates/tmpl-comment-on-examples.sql +158 -158
- package/.aiox-core/product/templates/tmpl-migration-script.sql +91 -91
- package/.aiox-core/product/templates/tmpl-rls-granular-policies.sql +104 -104
- package/.aiox-core/product/templates/tmpl-rls-kiss-policy.sql +10 -10
- package/.aiox-core/product/templates/tmpl-rls-roles.sql +135 -135
- package/.aiox-core/product/templates/tmpl-rls-simple.sql +77 -77
- package/.aiox-core/product/templates/tmpl-rls-tenant.sql +152 -152
- package/.aiox-core/product/templates/tmpl-rollback-script.sql +77 -77
- package/.aiox-core/product/templates/tmpl-seed-data.sql +140 -140
- package/.aiox-core/product/templates/tmpl-smoke-test.sql +16 -16
- package/.aiox-core/product/templates/tmpl-staging-copy-merge.sql +139 -139
- package/.aiox-core/product/templates/tmpl-stored-proc.sql +140 -140
- package/.aiox-core/product/templates/tmpl-trigger.sql +152 -152
- package/.aiox-core/product/templates/tmpl-view-materialized.sql +133 -133
- package/.aiox-core/product/templates/tmpl-view.sql +177 -177
- package/.aiox-core/scripts/pm.sh +0 -0
- package/.claude/hooks/enforce-architecture-first.py +196 -196
- package/.claude/hooks/mind-clone-governance.py +192 -192
- package/.claude/hooks/read-protection.py +151 -151
- package/.claude/hooks/slug-validation.py +176 -176
- package/.claude/hooks/sql-governance.py +182 -182
- package/.claude/hooks/write-path-validation.py +194 -194
- package/LICENSE +33 -33
- package/bin/aiox-graph.js +0 -0
- package/bin/aiox-minimal.js +0 -0
- package/bin/aiox.js +0 -0
- package/package.json +1 -1
- package/packages/aiox-install/bin/aiox-install.js +0 -0
- package/packages/aiox-install/bin/edmcp.js +0 -0
- package/packages/aiox-pro-cli/bin/aiox-pro.js +0 -0
- package/packages/installer/src/wizard/pro-setup.js +28 -0
- package/pro/README.md +66 -66
- package/pro/feature-registry.yaml +225 -223
- package/pro/license/license-api.js +701 -679
- package/pro/package.json +39 -39
- package/pro/pro-config.yaml +63 -63
- package/pro/squads/README.md +24 -24
- package/pro/squads/design/HEADLINE.md +3 -3
- package/pro/squads/design/README.md +109 -109
- package/pro/squads/design/agents/brad-frost.md +1097 -1097
- package/pro/squads/design/agents/dan-mall.md +857 -857
- package/pro/squads/design/agents/dave-malouf.md +2272 -2272
- package/pro/squads/design/agents/design-chief.md +114 -114
- package/pro/squads/design/agents/ds-foundations-lead.md +194 -194
- package/pro/squads/design/agents/ds-token-architect.md +361 -361
- package/pro/squads/design/agents/nano-banana-generator.md +162 -162
- package/pro/squads/design/agents/storybook-expert.md +809 -809
- package/pro/squads/design/checklists/atomic-refactor-checklist.md +299 -299
- package/pro/squads/design/checklists/component-adaptation-checklist.md +81 -81
- package/pro/squads/design/checklists/design-fidelity-checklist.md +283 -283
- package/pro/squads/design/checklists/design-handoff-checklist.md +55 -55
- package/pro/squads/design/checklists/design-team-health-checklist.md +454 -454
- package/pro/squads/design/checklists/designops-maturity-checklist.md +518 -518
- package/pro/squads/design/checklists/ds-a11y-release-gate-checklist.md +45 -45
- package/pro/squads/design/checklists/ds-accessibility-wcag-checklist.md +147 -147
- package/pro/squads/design/checklists/ds-component-quality-checklist.md +150 -150
- package/pro/squads/design/checklists/ds-critical-eye-review-checklist.md +147 -147
- package/pro/squads/design/checklists/ds-migration-readiness-checklist.md +99 -99
- package/pro/squads/design/checklists/ds-pattern-audit-checklist.md +164 -164
- package/pro/squads/design/checklists/reading-accessibility-checklist.md +275 -275
- package/pro/squads/design/checklists/token-mapping-checklist.md +107 -107
- package/pro/squads/design/config/coding-standards.md +286 -286
- package/pro/squads/design/config/source-tree.md +59 -59
- package/pro/squads/design/config/tech-stack.md +48 -48
- package/pro/squads/design/config.yaml +204 -204
- package/pro/squads/design/data/agentic-design-systems-guide.md +46 -46
- package/pro/squads/design/data/agentic-ds-principles.md +100 -100
- package/pro/squads/design/data/atomic-design-principles.md +108 -108
- package/pro/squads/design/data/atomic-refactor-rules.md +582 -582
- package/pro/squads/design/data/base-component-specs.md +972 -972
- package/pro/squads/design/data/brad-frost-analysis-extract-implicit.yaml +270 -270
- package/pro/squads/design/data/brad-frost-analysis-find-0.8.yaml +176 -176
- package/pro/squads/design/data/brad-frost-analysis-qa-report.yaml +168 -168
- package/pro/squads/design/data/brad-frost-dna.yaml +713 -713
- package/pro/squads/design/data/capability-tools.yaml +124 -124
- package/pro/squads/design/data/component-adaptation-changelog.md +318 -318
- package/pro/squads/design/data/consolidation-algorithms.md +168 -168
- package/pro/squads/design/data/critical-eye-scoring-rules.yaml +240 -240
- package/pro/squads/design/data/design-token-best-practices.md +107 -107
- package/pro/squads/design/data/design-tokens-spec.yaml +418 -418
- package/pro/squads/design/data/ds-reference-architectures.md +93 -93
- package/pro/squads/design/data/f2-qa-report.md +168 -168
- package/pro/squads/design/data/f3-derived-components-changelog.md +100 -100
- package/pro/squads/design/data/f3-qa-report.md +208 -208
- package/pro/squads/design/data/figma-base-components-raw.md +101 -101
- package/pro/squads/design/data/figma-tokens-raw.md +1548 -1548
- package/pro/squads/design/data/fluent2-design-principles.md +114 -114
- package/pro/squads/design/data/high-retention-reading-guide.md +349 -349
- package/pro/squads/design/data/integration-patterns.md +207 -207
- package/pro/squads/design/data/internal-quality-chain.yaml +48 -48
- package/pro/squads/design/data/motion-tokens-guide.md +202 -202
- package/pro/squads/design/data/roi-calculation-guide.md +142 -142
- package/pro/squads/design/data/token-mapping-reference.md +213 -213
- package/pro/squads/design/data/w3c-dtcg-spec-reference.md +149 -149
- package/pro/squads/design/data/wcag-compliance-guide.md +267 -267
- package/pro/squads/design/docs/AUDIT_REPORT.md +97 -97
- package/pro/squads/design/docs/DS-CURATION-PIPELINE-PROPOSAL.md +577 -577
- package/pro/squads/design/docs/UPGRADE_PLAN.md +618 -618
- package/pro/squads/design/docs/brad-frost-research-validation.md +372 -372
- package/pro/squads/design/docs/dave-malouf-research-validation.md +391 -391
- package/pro/squads/design/docs/tool-discovery-report.md +87 -87
- package/pro/squads/design/docs/tool-integration-plan.md +44 -44
- package/pro/squads/design/protocols/ai-first-governance.md +56 -56
- package/pro/squads/design/protocols/governance-execution-boundary.md +59 -59
- package/pro/squads/design/protocols/handoff.md +60 -60
- package/pro/squads/design/rules/.claude-rules.md +88 -88
- package/pro/squads/design/scripts/design-system/curate_colors.cjs +447 -447
- package/pro/squads/design/scripts/design-system/curate_components.cjs +217 -217
- package/pro/squads/design/scripts/design-system/curate_radius.cjs +190 -190
- package/pro/squads/design/scripts/design-system/curate_shadows.cjs +208 -208
- package/pro/squads/design/scripts/design-system/curate_spacing.cjs +243 -243
- package/pro/squads/design/scripts/design-system/curate_typography.cjs +404 -404
- package/pro/squads/design/scripts/design-system/design-system-metadata.test.js +49 -49
- package/pro/squads/design/scripts/design-system/design_manifest_lib.cjs +142 -142
- package/pro/squads/design/scripts/design-system/fetch_page_images.cjs +195 -195
- package/pro/squads/design/scripts/design-system/generate_components_metadata.cjs +114 -114
- package/pro/squads/design/scripts/design-system/generate_curation_report.cjs +258 -258
- package/pro/squads/design/scripts/design-system/generate_tokens.cjs +342 -342
- package/pro/squads/design/scripts/design-system/sync_design_manifest.cjs +27 -27
- package/pro/squads/design/scripts/design-system/test_mcp_tools.cjs +232 -232
- package/pro/squads/design/scripts/design-system/validate_components_metadata.cjs +96 -96
- package/pro/squads/design/scripts/design-system/validate_curation.cjs +226 -226
- package/pro/squads/design/scripts/design-system/validate_design_manifest_drift.cjs +72 -72
- package/pro/squads/design/scripts/design-system/validate_mcp_skeleton.cjs +38 -38
- package/pro/squads/design/scripts/design-system/validate_registry.cjs +186 -186
- package/pro/squads/design/scripts/design-system/validate_task_checklist_bindings.cjs +78 -78
- package/pro/squads/design/scripts/dissect-artifact.cjs +806 -806
- package/pro/squads/design/scripts/validate-a11y-integration.cjs +40 -40
- package/pro/squads/design/scripts/validate-design-squad.py +411 -411
- package/pro/squads/design/squad.yaml +714 -714
- package/pro/squads/design/tasks/a11y-audit.md +340 -340
- package/pro/squads/design/tasks/aria-audit.md +525 -525
- package/pro/squads/design/tasks/atomic-refactor-execute.md +391 -391
- package/pro/squads/design/tasks/atomic-refactor-plan.md +262 -262
- package/pro/squads/design/tasks/audit-reading-experience.md +350 -350
- package/pro/squads/design/tasks/audit-tailwind-config.md +101 -101
- package/pro/squads/design/tasks/bootstrap-shadcn-library.md +96 -96
- package/pro/squads/design/tasks/bundle-audit.md +245 -245
- package/pro/squads/design/tasks/contrast-matrix.md +373 -373
- package/pro/squads/design/tasks/create-doc.md +135 -135
- package/pro/squads/design/tasks/dead-code-detection.md +329 -329
- package/pro/squads/design/tasks/design-compare.md +414 -414
- package/pro/squads/design/tasks/design-process-optimization.md +407 -407
- package/pro/squads/design/tasks/design-review-orchestration.md +99 -99
- package/pro/squads/design/tasks/design-team-scaling.md +407 -407
- package/pro/squads/design/tasks/design-tooling-audit.md +404 -404
- package/pro/squads/design/tasks/design-triage.md +89 -89
- package/pro/squads/design/tasks/designops-maturity-assessment.md +364 -364
- package/pro/squads/design/tasks/designops-metrics-setup.md +465 -465
- package/pro/squads/design/tasks/ds-agentic-audit.md +100 -100
- package/pro/squads/design/tasks/ds-agentic-setup.md +103 -103
- package/pro/squads/design/tasks/ds-audit-codebase.md +273 -273
- package/pro/squads/design/tasks/ds-build-component.md +349 -349
- package/pro/squads/design/tasks/ds-build-mcp-server.md +84 -84
- package/pro/squads/design/tasks/ds-calculate-roi.md +282 -282
- package/pro/squads/design/tasks/ds-compose-molecule.md +106 -106
- package/pro/squads/design/tasks/ds-consolidate-patterns.md +253 -253
- package/pro/squads/design/tasks/ds-context-contract.md +194 -194
- package/pro/squads/design/tasks/ds-critical-eye-compare.md +130 -130
- package/pro/squads/design/tasks/ds-critical-eye-decide.md +139 -139
- package/pro/squads/design/tasks/ds-critical-eye-inventory.md +111 -111
- package/pro/squads/design/tasks/ds-critical-eye-report.md +101 -101
- package/pro/squads/design/tasks/ds-critical-eye-score.md +109 -109
- package/pro/squads/design/tasks/ds-designops.md +99 -99
- package/pro/squads/design/tasks/ds-extend-pattern.md +91 -91
- package/pro/squads/design/tasks/ds-extract-tokens.md +312 -312
- package/pro/squads/design/tasks/ds-figma-pipeline.md +95 -95
- package/pro/squads/design/tasks/ds-fluent-audit.md +105 -105
- package/pro/squads/design/tasks/ds-fluent-build.md +110 -110
- package/pro/squads/design/tasks/ds-generate-ai-metadata.md +81 -81
- package/pro/squads/design/tasks/ds-generate-cursor-rules.md +74 -74
- package/pro/squads/design/tasks/ds-generate-documentation.md +101 -101
- package/pro/squads/design/tasks/ds-generate-migration-strategy.md +331 -331
- package/pro/squads/design/tasks/ds-generate-shock-report.md +323 -323
- package/pro/squads/design/tasks/ds-govern-a11y-compliance.md +93 -93
- package/pro/squads/design/tasks/ds-governance.md +187 -187
- package/pro/squads/design/tasks/ds-health-metrics.md +278 -278
- package/pro/squads/design/tasks/ds-integrate-squad.md +130 -130
- package/pro/squads/design/tasks/ds-integrate-workspace.md +100 -100
- package/pro/squads/design/tasks/ds-legacy-modernization.md +302 -302
- package/pro/squads/design/tasks/ds-mcp-status.md +65 -65
- package/pro/squads/design/tasks/ds-motion-audit.md +118 -118
- package/pro/squads/design/tasks/ds-multi-framework.md +96 -96
- package/pro/squads/design/tasks/ds-parallelization-gate.md +246 -246
- package/pro/squads/design/tasks/ds-query.md +90 -90
- package/pro/squads/design/tasks/ds-rebuild-artifact.md +369 -369
- package/pro/squads/design/tasks/ds-reverse-engineer.md +194 -194
- package/pro/squads/design/tasks/ds-scan-artifact.md +131 -131
- package/pro/squads/design/tasks/ds-setup-design-system.md +297 -297
- package/pro/squads/design/tasks/ds-sync-registry.md +287 -287
- package/pro/squads/design/tasks/ds-theme-multi-brand.md +90 -90
- package/pro/squads/design/tasks/ds-token-modes.md +108 -108
- package/pro/squads/design/tasks/ds-token-w3c-extract.md +105 -105
- package/pro/squads/design/tasks/ds-validate-ai-readiness.md +69 -69
- package/pro/squads/design/tasks/ds-visual-regression.md +130 -130
- package/pro/squads/design/tasks/execute-checklist.md +141 -141
- package/pro/squads/design/tasks/export-design-tokens-dtcg.md +97 -97
- package/pro/squads/design/tasks/f1-apply-foundations.md +154 -154
- package/pro/squads/design/tasks/f1-ingest-figma-tokens.md +130 -130
- package/pro/squads/design/tasks/f1-map-tokens-to-shadcn.md +145 -145
- package/pro/squads/design/tasks/f1-qa-foundations.md +95 -95
- package/pro/squads/design/tasks/f2-adapt-shadcn-components.md +155 -155
- package/pro/squads/design/tasks/f2-ingest-base-components.md +148 -148
- package/pro/squads/design/tasks/f2-qa-base-components.md +98 -98
- package/pro/squads/design/tasks/f3-derive-components.md +145 -145
- package/pro/squads/design/tasks/f3-qa-derived-components.md +101 -101
- package/pro/squads/design/tasks/focus-order-audit.md +450 -450
- package/pro/squads/design/tasks/sb-brownfield-migrate.md +367 -367
- package/pro/squads/design/tasks/sb-brownfield-scan.md +318 -318
- package/pro/squads/design/tasks/sb-configure.md +230 -230
- package/pro/squads/design/tasks/sb-expand-shadcn.md +213 -213
- package/pro/squads/design/tasks/sb-generate-all-stories.md +288 -288
- package/pro/squads/design/tasks/sb-install.md +152 -152
- package/pro/squads/design/tasks/sb-sync-workspace.md +239 -239
- package/pro/squads/design/tasks/sb-verify.md +203 -203
- package/pro/squads/design/tasks/tailwind-upgrade.md +117 -117
- package/pro/squads/design/tasks/token-usage-analytics.md +262 -262
- package/pro/squads/design/tasks/ux-rewrite-sixth-grade.md +82 -82
- package/pro/squads/design/tasks/validate-design-fidelity.md +222 -222
- package/pro/squads/design/templates/agent-template.yaml +46 -46
- package/pro/squads/design/templates/clone-mind-template.md +352 -352
- package/pro/squads/design/templates/component-prompt-injection-tmpl.md +236 -236
- package/pro/squads/design/templates/component-visual-spec-tmpl.md +378 -378
- package/pro/squads/design/templates/critical-eye-cycle-report-tmpl.md +165 -165
- package/pro/squads/design/templates/design-fidelity-report-tmpl.md +155 -155
- package/pro/squads/design/templates/ds-ai-component-metadata-schema-tmpl.json +138 -138
- package/pro/squads/design/templates/ds-artifact-analysis.md +70 -70
- package/pro/squads/design/templates/ds-health-report-tmpl.md +236 -236
- package/pro/squads/design/templates/ds-migration-strategy-tmpl.md +524 -524
- package/pro/squads/design/templates/ds-state-persistence-tmpl.yaml +194 -194
- package/pro/squads/design/templates/ds-tokens-schema-tmpl.yaml +139 -139
- package/pro/squads/design/templates/migration-strategy-tmpl.md +524 -524
- package/pro/squads/design/templates/reading-design-tokens.css +26 -26
- package/pro/squads/design/templates/state-persistence-tmpl.yaml +219 -219
- package/pro/squads/design/templates/tokens-schema-tmpl.yaml +305 -305
- package/pro/squads/design/workflows/agentic-readiness.yaml +83 -83
- package/pro/squads/design/workflows/audit-only.yaml +198 -198
- package/pro/squads/design/workflows/brownfield-complete.yaml +257 -257
- package/pro/squads/design/workflows/critical-eye.yaml +184 -184
- package/pro/squads/design/workflows/dtcg-tokens-governance.yaml +64 -64
- package/pro/squads/design/workflows/foundations-pipeline.yaml +192 -192
- package/pro/squads/design/workflows/greenfield-new.yaml +192 -192
- package/pro/squads/design/workflows/motion-quality.yaml +65 -65
- package/pro/squads/design/workflows/self-healing-workflow.yaml +237 -237
- package/pro/squads/design/workflows/storybook-brownfield-migration.yaml +400 -400
- package/pro/squads/design/workflows/storybook-full-setup.yaml +280 -280
- package/pro/squads/mmos-squad/minds/alex_hormozi/artifacts/ARQUITETURA_COGNITIVA_DE_ALEX_HORMOZI_EXTRA/303/207/303/203O_COMPLETA.md +215 -0
- package/pro/squads/mmos-squad/minds/alex_hormozi/artifacts/A_Rotina_de_Alta_Performance_de_Alex_Hormozi_Arquitetura,_Motiva/303/247/303/265es_e_Replica/303/247/303/243o.md +309 -0
- package/pro/squads/mmos-squad/minds/alex_hormozi/artifacts/O_sistema_completo_de_cria/303/247/303/243o_de_conte/303/272do_de_Alex_Hormozi.md +416 -0
- package/pro/squads/mmos-squad/minds/alex_hormozi/artifacts/Processo_Cria/303/247/303/243o_Conte/303/272do_Hormozi.md +0 -0
- package/pro/squads/mmos-squad/minds/brad_frost/.backup/2026-01-13/artifacts/DECIS/303/225ES_ESTRAT/303/211GICAS_DE_DESIGN_SYSTEMS_(2022_2025).md +1038 -0
- package/pro/squads/mmos-squad/minds/brad_frost/.backup/2026-01-13/artifacts/FRAMEWORK_COMPLETO_DE_IMPLEMENTA/303/207/303/203O_ATOMIC_DESIGN.md +797 -0
- package/pro/squads/mmos-squad/minds/brad_frost/.backup/2026-01-13/artifacts/O_Cemit/303/251rio_de_Design_Systems.md +447 -0
- package/pro/squads/mmos-squad/minds/brad_frost/.backup/2026-01-13/artifacts/PRINC/303/215PIOS_DE_RACIOC/303/215NIO.md +190 -0
- package/pro/squads/mmos-squad/minds/brad_frost/artifacts/DECIS/303/225ES_ESTRAT/303/211GICAS_DE_DESIGN_SYSTEMS_(2022_2025).md +1038 -0
- package/pro/squads/mmos-squad/minds/brad_frost/artifacts/FRAMEWORK_COMPLETO_DE_IMPLEMENTA/303/207/303/203O_ATOMIC_DESIGN.md +797 -0
- package/pro/squads/mmos-squad/minds/brad_frost/artifacts/O_Cemit/303/251rio_de_Design_Systems.md +447 -0
- package/pro/squads/mmos-squad/minds/brad_frost/artifacts/PRINC/303/215PIOS_DE_RACIOC/303/215NIO.md +190 -0
- package/pro/squads/mmos-squad/minds/elon_musk/artifacts/AN/303/201LISE_PSICOM/303/211TRICA_PROFUNDA_ELON_MUSK.md +291 -0
- package/pro/squads/mmos-squad/minds/elon_musk/artifacts/ASSINATURA_LINGU/303/215STICA_ELON_MUSK.md +485 -0
- package/pro/squads/mmos-squad/minds/elon_musk/artifacts/A_Arquitetura_Mental_de_Elon_Musk_Uma_An/303/241lise_Sistem/303/241tica_dos_Frameworks_de_Pensamento.md +907 -0
- package/pro/squads/mmos-squad/minds/elon_musk/artifacts/Dossi/303/252_Estrat/303/251gico_A_Arquitetura_Psicol/303/263gica_de_Elon_Musk.md +252 -0
- package/pro/squads/mmos-squad/minds/elon_musk/artifacts/Os_Padr/303/265es_de_Leitura_de_Elon_Musk_e_Sua_Influ/303/252ncia_Sistem/303/241tica.md +287 -0
- package/pro/squads/mmos-squad/minds/elon_musk/artifacts/Uma_an/303/241lise_psicol/303/263gica_abrangente.md +187 -0
- package/pro/squads/mmos-squad/minds/eugene_schwartz/artifacts/AN/303/201LISE_PSICOM/303/211TRICA_PROFUNDA_EUGENE_M._SCHWARTZ.md +790 -0
- package/pro/squads/mmos-squad/minds/eugene_schwartz/artifacts/An/303/241lise_Completa_Eugene_Schwartz_Arquitetura_Cognitiva_DEEP.md +210 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/5H_EXTRA/303/207/303/203O_COGNITIVA_COMPLETA_PEDRO_VAL/303/211RIO_LOPEZ.md +226 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/AN/303/201LISE_COMPARATIVA_REVISADA_PEDRO_VAL/303/211RIO_LOPEZ.md +246 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/AN/303/201LISE_LINGU/303/215STICA_CARIOCA_PEDRO_VAL/303/211RIO_LOPEZ.md +274 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/AN/303/201LISE_PSICOM/303/211TRICA_DEFINITIVA_PEDRO_VAL/303/211RIO_LOPEZ.md +821 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/AN/303/201LISE_PSICOM/303/211TRICA_PROFUNDA_PEDRO_VAL/303/211RIO.md +1844 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/C/303/201LCULO_DE_RARIDADE_ESTAT/303/215STICA_PEDRO_VAL/303/211RIO_LOPEZ.md +154 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/EXTRA/303/207/303/203O_PEDRO_VAL/303/211RIO.md +237 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/MAPEAMENTO_LINGU/303/215STICO_PROFUNDO.md +161 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/META_AXIOMAS_DE_PEDRO_VAL/303/211RIO.md +256 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/SISTEMA_IMUNOL/303/223GICO_COGNITIVO_PEDRO_VAL/303/211RIO_LOPEZ.md +586 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/SISTEMA_IMUNOL/303/223GICO_COGNITIVO_V2_/342/200/224_CLONE_IA.md +452 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/TABELA_COMPARATIVA_AN/303/201LISE_COMPLETA_DOS_CLONES_IA.md +102 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/WHATSAPP_PADR/303/225ES_LINGU/303/215STICOS_PEDRO_VAL/303/211RIO_LOPEZ.md +286 -0
- package/pro/squads/mmos-squad/minds/pedro_valerio/sources/artifacts_v1.6/heur/303/255sticas_de_decis/303/243o_e_algoritmos_mentais_/303/272nicos.md +268 -0
- package/pro/squads/mmos-squad/minds/ray_kurzweil/sources/books/PROTOCOLO_COMPLETO_DE_INTERROGA/303/207/303/203O_-_NAVAL_RAVIKANT.md +3624 -0
- package/pro/squads/mmos-squad/minds/steve_jobs/artifacts/FRAMEWORK_COMPLETO_DE_IMPLEMENTA/303/207/303/203O_JOBS.md +488 -0
- package/pro/squads/mmos-squad/minds/steve_jobs/artifacts/Framework_Cabe/303/247a_Steve.md +257 -0
- package/pro/squads/mmos-squad/minds/steve_jobs/artifacts/Relat/303/263rio_Abrangente_sobre_Steve_Jobs_para_Cria/303/247/303/243o_de_Clone_de_IA.md +370 -0
- package/pro/squads/mmos-squad/minds/steve_jobs/artifacts/Steve_Jobs_An/303/241lise_Psicol/303/263gica_Profunda_e_Valida/303/247/303/243o_Comportamental.md +65 -0
- package/pro/squads/squad-creator-pro/HEADLINE.md +3 -3
- package/pro/squads/squad-creator-pro/agents/oalanicolas.md +438 -438
- package/pro/squads/squad-creator-pro/agents/squad-chief.md +1651 -1651
- package/pro/squads/squad-creator-pro/agents/thiago_finch.md +976 -976
- package/pro/squads/squad-creator-pro/assessments/axioma-assessment-wf-create-squad.yaml +325 -325
- package/pro/squads/squad-creator-pro/checklists/create-agent-checklist.md +184 -184
- package/pro/squads/squad-creator-pro/checklists/create-squad-checklist.md +219 -219
- package/pro/squads/squad-creator-pro/checklists/create-workflow-checklist.md +224 -224
- package/pro/squads/squad-creator-pro/checklists/mental-model-integration-checklist.md +95 -95
- package/pro/squads/squad-creator-pro/checklists/squad-overview-checklist.md +393 -393
- package/pro/squads/squad-creator-pro/config/model-routing.yaml +693 -693
- package/pro/squads/squad-creator-pro/config/scoring-rubric.yaml +199 -199
- package/pro/squads/squad-creator-pro/config.yaml +35 -35
- package/pro/squads/squad-creator-pro/data/internal-infrastructure-library.yaml +99 -99
- package/pro/squads/squad-creator-pro/data/mental-model-task-matrix.yaml +692 -692
- package/pro/squads/squad-creator-pro/docs/ADR-001-model-tier-qualification.md +344 -344
- package/pro/squads/squad-creator-pro/docs/AGENT-COLLABORATION.md +609 -609
- package/pro/squads/squad-creator-pro/docs/MIGRATION-PLAN-AGENT-CONFORMITY.md +861 -861
- package/pro/squads/squad-creator-pro/docs/MODEL-TIER-QUALIFICATION.md +337 -337
- package/pro/squads/squad-creator-pro/docs/optimize-v4-proposal.md +354 -354
- package/pro/squads/squad-creator-pro/docs/task-optimization-framework.md +229 -229
- package/pro/squads/squad-creator-pro/minds/oalanicolas/heuristics/AN_KE_010.md +240 -240
- package/pro/squads/squad-creator-pro/protocols/ai-first-governance.md +63 -63
- package/pro/squads/squad-creator-pro/scripts/assess-sources.sh +443 -443
- package/pro/squads/squad-creator-pro/scripts/clone-review.sh +394 -394
- package/pro/squads/squad-creator-pro/scripts/create-agent-preflight.py +243 -243
- package/pro/squads/squad-creator-pro/scripts/cross-provider/compare-results.js +281 -281
- package/pro/squads/squad-creator-pro/scripts/cross-provider/cross-provider-runner.js +462 -462
- package/pro/squads/squad-creator-pro/scripts/fidelity-score.sh +519 -519
- package/pro/squads/squad-creator-pro/scripts/generate-squad-guide.js +558 -558
- package/pro/squads/squad-creator-pro/scripts/lib/config-loader.js +151 -151
- package/pro/squads/squad-creator-pro/scripts/model-tier-validator.cjs +369 -369
- package/pro/squads/squad-creator-pro/scripts/model-usage-logger.cjs +245 -245
- package/pro/squads/squad-creator-pro/scripts/modernization-score.sh +308 -308
- package/pro/squads/squad-creator-pro/scripts/scaffold-squad.cjs +281 -281
- package/pro/squads/squad-creator-pro/scripts/security_scanner.py +378 -378
- package/pro/squads/squad-creator-pro/scripts/squad-context-loader.cjs +205 -205
- package/pro/squads/squad-creator-pro/scripts/squad-state-manager.cjs +451 -451
- package/pro/squads/squad-creator-pro/scripts/squad-workflow-runner.cjs +471 -471
- package/pro/squads/squad-creator-pro/scripts/squad_utils.py +261 -261
- package/pro/squads/squad-creator-pro/scripts/tests/run_bash_tests.sh +29 -29
- package/pro/squads/squad-creator-pro/scripts/tests/test_assess_sources.sh +216 -216
- package/pro/squads/squad-creator-pro/scripts/tests/test_clone_review.sh +239 -239
- package/pro/squads/squad-creator-pro/scripts/tests/test_coherence_validator.py +212 -212
- package/pro/squads/squad-creator-pro/scripts/tests/test_fidelity_score.sh +298 -298
- package/pro/squads/squad-creator-pro/scripts/tests/test_modernization_score.sh +211 -211
- package/pro/squads/squad-creator-pro/scripts/tests/test_security_scanner.py +354 -354
- package/pro/squads/squad-creator-pro/scripts/tests/test_validate_clone.sh +252 -252
- package/pro/squads/squad-creator-pro/squad.yaml +36 -36
- package/pro/squads/squad-creator-pro/tasks/an-compare-outputs.md +354 -354
- package/pro/squads/squad-creator-pro/tasks/create-squad.md +933 -933
- package/pro/squads/squad-creator-pro/tasks/detect-squad-context.md +81 -81
- package/pro/squads/squad-creator-pro/tasks/lookup-model.md +78 -78
- package/pro/squads/squad-creator-pro/tasks/next-squad.md +487 -487
- package/pro/squads/squad-creator-pro/tasks/optimize-workflow.md +851 -851
- package/pro/squads/squad-creator-pro/tasks/parallel-discovery.md +58 -58
- package/pro/squads/squad-creator-pro/tasks/pv-axioma-assessment-wf-clone-mind.yaml +256 -256
- package/pro/squads/squad-creator-pro/tasks/qualify-task.md +265 -265
- package/pro/squads/squad-creator-pro/tasks/reexecute-squad-phase.md +64 -64
- package/pro/squads/squad-creator-pro/tasks/smoke-test-model-routing.md +167 -167
- package/pro/squads/squad-creator-pro/tasks/squad-overview.md +683 -683
- package/pro/squads/squad-creator-pro/tasks/validate-final-artifacts.md +80 -80
- package/pro/squads/squad-creator-pro/templates/orchestrator-tmpl.md +74 -74
- package/pro/squads/squad-creator-pro/test-cases/BATCH-PROGRESS.md +268 -268
- package/pro/squads/squad-creator-pro/test-cases/QUALIFICATION-DASHBOARD.yaml +13 -13
- package/pro/squads/squad-creator-pro/test-cases/_template.yaml +147 -147
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/ASSESSMENT-SUMMARY.md +275 -275
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/ASSESSMENT_SUMMARY.md +140 -140
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/CHECKPOINT_MATRIX.md +202 -202
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/EXECUTION-REPORT.md +413 -413
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/EXECUTION_NOTES.md +358 -358
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/README-v2.2.2.md +299 -299
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/README.md +320 -320
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/TEST-REPORT-v2.1.md +351 -351
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/VERIFICATION-CHECKLIST.txt +247 -247
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/formal-qualification-report.yaml +389 -389
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/haiku-output.yaml +366 -366
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/haiku-v2.1-output.yaml +452 -452
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/haiku-v2.2.1-output.yaml +281 -281
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/haiku-v2.2.2-output.yaml +332 -332
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/opus-baseline.yaml +517 -517
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/qualification-report.yaml +213 -213
- package/pro/squads/squad-creator-pro/test-cases/an-assess-sources/test-case.yaml +69 -69
- package/pro/squads/squad-creator-pro/test-cases/an-clone-review/haiku-round-1.yaml +213 -213
- package/pro/squads/squad-creator-pro/test-cases/an-clone-review/opus-baseline.yaml +566 -566
- package/pro/squads/squad-creator-pro/test-cases/an-clone-review/qualification-report.yaml +82 -82
- package/pro/squads/squad-creator-pro/test-cases/an-design-clone/test-case.yaml +102 -102
- package/pro/squads/squad-creator-pro/test-cases/an-extract-dna/test-case.yaml +105 -105
- package/pro/squads/squad-creator-pro/test-cases/an-fidelity-score/haiku-round-1.yaml +262 -262
- package/pro/squads/squad-creator-pro/test-cases/an-fidelity-score/opus-baseline.yaml +266 -266
- package/pro/squads/squad-creator-pro/test-cases/an-fidelity-score/qualification-report.yaml +94 -94
- package/pro/squads/squad-creator-pro/test-cases/an-validate-clone/haiku-round-1.yaml +282 -282
- package/pro/squads/squad-creator-pro/test-cases/an-validate-clone/opus-baseline.yaml +470 -470
- package/pro/squads/squad-creator-pro/test-cases/an-validate-clone/qualification-report.yaml +106 -106
- package/pro/squads/squad-creator-pro/test-cases/collect-sources/test-case.yaml +105 -105
- package/pro/squads/squad-creator-pro/test-cases/create-task/test-case.yaml +104 -104
- package/pro/squads/squad-creator-pro/test-cases/cross-provider/DASHBOARD.yaml +11 -11
- package/pro/squads/squad-creator-pro/test-cases/pv-audit/test-case.yaml +106 -106
- package/pro/squads/squad-creator-pro/test-cases/pv-axioma-assessment/haiku-output.yaml +209 -209
- package/pro/squads/squad-creator-pro/test-cases/pv-axioma-assessment/opus-baseline.yaml +96 -96
- package/pro/squads/squad-creator-pro/test-cases/pv-axioma-assessment/sonnet-output.yaml +30 -30
- package/pro/squads/squad-creator-pro/test-cases/pv-axioma-assessment/test-case.yaml +129 -129
- package/pro/squads/squad-creator-pro/test-cases/pv-modernization-score/comparison-round-1.yaml +242 -242
- package/pro/squads/squad-creator-pro/test-cases/pv-modernization-score/haiku-round-1.yaml +393 -393
- package/pro/squads/squad-creator-pro/test-cases/pv-modernization-score/opus-baseline.yaml +488 -488
- package/pro/squads/squad-creator-pro/test-cases/pv-modernization-score/qualification-report.yaml +74 -74
- package/pro/squads/squad-creator-pro/test-cases/qa-after-creation/haiku-round-1.yaml +292 -292
- package/pro/squads/squad-creator-pro/test-cases/qa-after-creation/opus-baseline.yaml +603 -603
- package/pro/squads/squad-creator-pro/test-cases/qa-after-creation/qualification-report.yaml +97 -97
- package/pro/squads/squad-creator-pro/test-cases/smoke-test-model-routing/test-case.yaml +100 -100
- package/pro/squads/squad-creator-pro/test-cases/upgrade-squad/test-case.yaml +106 -106
- package/pro/squads/squad-creator-pro/test-cases/validate-squad/comparison-round-1.yaml +223 -223
- package/pro/squads/squad-creator-pro/test-cases/validate-squad/haiku-round-1-MINE.yaml +36 -36
- package/pro/squads/squad-creator-pro/test-cases/validate-squad/haiku-round-1.yaml +193 -193
- package/pro/squads/squad-creator-pro/test-cases/validate-squad/haiku-round-2.yaml +303 -303
- package/pro/squads/squad-creator-pro/test-cases/validate-squad/haiku-round-3-v4-task.yaml +149 -149
- package/pro/squads/squad-creator-pro/test-cases/validate-squad/opus-baseline.yaml +529 -529
- package/pro/squads/squad-creator-pro/test-cases/validate-squad/opus-round-3-v4-task.yaml +132 -132
- package/pro/squads/squad-creator-pro/test-cases/validate-squad/qualification-report.yaml +104 -104
- package/pro/squads/squad-creator-pro/test-cases/wf-clone-mind/haiku-output-v2-calibrated.yaml +200 -200
- package/pro/squads/squad-creator-pro/test-cases/wf-clone-mind/haiku-output.yaml +183 -183
- package/pro/squads/squad-creator-pro/test-cases/wf-clone-mind/opus-baseline.yaml +112 -112
- package/pro/squads/squad-creator-pro/workflows/create-squad.yaml +348 -348
- package/pro/squads/squad-creator-pro/workflows/modules/module-discovery.yaml +16 -16
- package/pro/squads/squad-creator-pro/workflows/modules/module-integration.yaml +16 -16
- package/pro/squads/squad-creator-pro/workflows/modules/module-quality-gates.yaml +15 -15
- package/pro/squads/squad-creator-pro/workflows/wf-brownfield-upgrade-squad.yaml +46 -46
- package/pro/squads/squad-creator-pro/workflows/wf-context-aware-create-squad.yaml +47 -47
- package/pro/squads/squad-creator-pro/workflows/wf-create-squad.yaml +1619 -1619
- package/pro/squads/squad-creator-pro/workflows/wf-cross-provider-qualification.yaml +711 -711
- package/pro/squads/squad-creator-pro/workflows/wf-model-tier-qualification.yaml +800 -800
- package/pro/squads/squad-creator-pro/workflows/wf-optimize-squad.yaml +684 -684
- package/scripts/check-markdown-links.py +352 -352
- package/scripts/dashboard-parallel-dev.sh +0 -0
- package/scripts/dashboard-parallel-phase3.sh +0 -0
- package/scripts/dashboard-parallel-phase4.sh +0 -0
- package/scripts/install-monitor-hooks.sh +0 -0
- package/.claude/hooks/code-intel-pretool.cjs +0 -107
- package/docs/guides/aios-workflows/README.md +0 -247
- package/docs/guides/aios-workflows/bob-orchestrator-workflow.md +0 -1536
- package/scripts/glue/README.md +0 -355
- package/scripts/glue/compose-agent-prompt.cjs +0 -362
|
@@ -1,261 +1,261 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Squad Utilities - Shared functions for squad management scripts.
|
|
4
|
-
|
|
5
|
-
Contains deterministic logic for:
|
|
6
|
-
- Maturity calculation (DRAFT → DEVELOPING → OPERATIONAL)
|
|
7
|
-
- Usage signal detection
|
|
8
|
-
- Consistency rules for maturity/validated fields
|
|
9
|
-
|
|
10
|
-
CRITICAL RULE - Maturity/Validated Consistency:
|
|
11
|
-
- validated=True MUST mean maturity=OPERATIONAL
|
|
12
|
-
- validated=False EXPLICIT (via validated_explicit=True) BLOCKS auto-promotion
|
|
13
|
-
- validated=False DEFAULT allows auto-promotion based on evidence
|
|
14
|
-
|
|
15
|
-
Usage:
|
|
16
|
-
from squad_utils import calculate_maturity, detect_squad_usage, MATURITY_*
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
from pathlib import Path
|
|
20
|
-
from typing import Dict, Any, Optional
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
# =============================================================================
|
|
24
|
-
# MATURITY CONSTANTS (ALWAYS at top of file)
|
|
25
|
-
# =============================================================================
|
|
26
|
-
|
|
27
|
-
MATURITY_DRAFT = "DRAFT" # Missing essential components (tasks=0 or tasks<3 and workflows=0)
|
|
28
|
-
MATURITY_DEVELOPING = "DEVELOPING" # Has components but no validated usage
|
|
29
|
-
MATURITY_OPERATIONAL = "OPERATIONAL" # Validated usage detected (outputs exist or manually validated)
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
# =============================================================================
|
|
33
|
-
# USAGE DETECTION
|
|
34
|
-
# =============================================================================
|
|
35
|
-
|
|
36
|
-
def detect_squad_usage(squad_name: str, project_root: Path) -> Dict[str, Any]:
|
|
37
|
-
"""
|
|
38
|
-
Detect signals of real squad usage (AI-first, no forms).
|
|
39
|
-
|
|
40
|
-
Signals checked:
|
|
41
|
-
1. outputs/{squad}/ - outputs generated by squad
|
|
42
|
-
2. squads/{squad}/artifacts/ - artifacts inside squad folder
|
|
43
|
-
3. squads/{squad}/.validation/ - validation evidence
|
|
44
|
-
|
|
45
|
-
Args:
|
|
46
|
-
squad_name: Name of the squad to check
|
|
47
|
-
project_root: Path to project root (parent of squads/)
|
|
48
|
-
|
|
49
|
-
Returns:
|
|
50
|
-
Dict with detection results:
|
|
51
|
-
- outputs_found: int - number of output files
|
|
52
|
-
- artifacts_found: int - number of artifact files
|
|
53
|
-
- validation_exists: bool - whether .validation/ folder exists
|
|
54
|
-
- total_evidence: int - outputs + artifacts count
|
|
55
|
-
"""
|
|
56
|
-
signals = {
|
|
57
|
-
"outputs_found": 0,
|
|
58
|
-
"artifacts_found": 0,
|
|
59
|
-
"validation_exists": False,
|
|
60
|
-
"total_evidence": 0,
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
# 1. Check outputs/{squad}/
|
|
64
|
-
outputs_path = project_root / "outputs" / squad_name
|
|
65
|
-
if outputs_path.exists():
|
|
66
|
-
try:
|
|
67
|
-
files = [f for f in outputs_path.rglob("*") if f.is_file()]
|
|
68
|
-
signals["outputs_found"] = len(files)
|
|
69
|
-
except (OSError, IOError) as e:
|
|
70
|
-
# Log but don't fail
|
|
71
|
-
pass
|
|
72
|
-
|
|
73
|
-
# 2. Check squads/{squad}/artifacts/
|
|
74
|
-
artifacts_path = project_root / "squads" / squad_name / "artifacts"
|
|
75
|
-
if artifacts_path.exists():
|
|
76
|
-
try:
|
|
77
|
-
files = [f for f in artifacts_path.rglob("*") if f.is_file()]
|
|
78
|
-
signals["artifacts_found"] = len(files)
|
|
79
|
-
except (OSError, IOError) as e:
|
|
80
|
-
# Log but don't fail
|
|
81
|
-
pass
|
|
82
|
-
|
|
83
|
-
# 3. Check squads/{squad}/.validation/
|
|
84
|
-
validation_path = project_root / "squads" / squad_name / ".validation"
|
|
85
|
-
if validation_path.exists():
|
|
86
|
-
signals["validation_exists"] = True
|
|
87
|
-
|
|
88
|
-
signals["total_evidence"] = signals["outputs_found"] + signals["artifacts_found"]
|
|
89
|
-
|
|
90
|
-
return signals
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
# =============================================================================
|
|
94
|
-
# MATURITY CALCULATION
|
|
95
|
-
# =============================================================================
|
|
96
|
-
|
|
97
|
-
def calculate_maturity(
|
|
98
|
-
counts: Dict[str, int],
|
|
99
|
-
usage_signals: Optional[Dict[str, Any]] = None,
|
|
100
|
-
existing_validated: bool = False,
|
|
101
|
-
validated_explicit: bool = False
|
|
102
|
-
) -> str:
|
|
103
|
-
"""
|
|
104
|
-
Calculate squad maturity level (deterministic).
|
|
105
|
-
|
|
106
|
-
Levels:
|
|
107
|
-
- DRAFT: Missing essential components (tasks=0 or tasks<3 and workflows=0)
|
|
108
|
-
- DEVELOPING: Has components but no validated usage
|
|
109
|
-
- OPERATIONAL: Validated usage (outputs detected OR manually validated in registry)
|
|
110
|
-
|
|
111
|
-
CRITICAL CONSISTENCY RULE:
|
|
112
|
-
- If validated_explicit=True AND existing_validated=False, do NOT auto-promote to OPERATIONAL
|
|
113
|
-
- This prevents the bug where maturity=OPERATIONAL but validated=false
|
|
114
|
-
|
|
115
|
-
Args:
|
|
116
|
-
counts: Component counts dict with 'tasks' and 'workflows' keys
|
|
117
|
-
usage_signals: Results from detect_squad_usage(), optional
|
|
118
|
-
existing_validated: True if registry has validated=true for this squad
|
|
119
|
-
validated_explicit: True if validated was EXPLICITLY set (not just default)
|
|
120
|
-
When True and existing_validated=False, blocks auto-promotion
|
|
121
|
-
|
|
122
|
-
Returns:
|
|
123
|
-
Maturity level string: DRAFT, DEVELOPING, or OPERATIONAL
|
|
124
|
-
"""
|
|
125
|
-
tasks = counts.get("tasks", 0) if counts else 0
|
|
126
|
-
workflows = counts.get("workflows", 0) if counts else 0
|
|
127
|
-
|
|
128
|
-
# DRAFT: Missing essential components
|
|
129
|
-
if tasks == 0:
|
|
130
|
-
return MATURITY_DRAFT
|
|
131
|
-
if tasks < 3 and workflows == 0:
|
|
132
|
-
return MATURITY_DRAFT
|
|
133
|
-
|
|
134
|
-
# OPERATIONAL: Human validated (always trust explicit human validation)
|
|
135
|
-
if existing_validated:
|
|
136
|
-
return MATURITY_OPERATIONAL
|
|
137
|
-
|
|
138
|
-
# CRITICAL: If human EXPLICITLY set validated=false, respect it
|
|
139
|
-
# Do NOT auto-promote based on evidence
|
|
140
|
-
if validated_explicit:
|
|
141
|
-
return MATURITY_DEVELOPING
|
|
142
|
-
|
|
143
|
-
# Auto-detection: promote to OPERATIONAL if enough evidence
|
|
144
|
-
if usage_signals:
|
|
145
|
-
if usage_signals.get("total_evidence", 0) >= 3:
|
|
146
|
-
return MATURITY_OPERATIONAL
|
|
147
|
-
|
|
148
|
-
if usage_signals.get("validation_exists", False):
|
|
149
|
-
return MATURITY_OPERATIONAL
|
|
150
|
-
|
|
151
|
-
# DEVELOPING: Has components but not validated
|
|
152
|
-
return MATURITY_DEVELOPING
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
def is_maturity_validated_consistent(maturity: str, validated: bool) -> bool:
|
|
156
|
-
"""
|
|
157
|
-
Check if maturity and validated fields are consistent.
|
|
158
|
-
|
|
159
|
-
Rules:
|
|
160
|
-
- If validated=True, maturity MUST be OPERATIONAL
|
|
161
|
-
- If maturity=OPERATIONAL, validated SHOULD be True (warning if false)
|
|
162
|
-
- Other combinations are valid
|
|
163
|
-
|
|
164
|
-
Args:
|
|
165
|
-
maturity: Current maturity level
|
|
166
|
-
validated: Current validated flag
|
|
167
|
-
|
|
168
|
-
Returns:
|
|
169
|
-
True if consistent, False if inconsistent
|
|
170
|
-
"""
|
|
171
|
-
# If validated=True but not OPERATIONAL, that's a problem
|
|
172
|
-
if validated and maturity != MATURITY_OPERATIONAL:
|
|
173
|
-
return False
|
|
174
|
-
|
|
175
|
-
# Note: maturity=OPERATIONAL with validated=False is allowed
|
|
176
|
-
# (can happen during auto-detection before human validation)
|
|
177
|
-
# But we return True with a softer check
|
|
178
|
-
|
|
179
|
-
return True
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
def resolve_maturity_validated(
|
|
183
|
-
counts: Dict[str, int],
|
|
184
|
-
usage_signals: Optional[Dict[str, Any]],
|
|
185
|
-
existing_validated: bool,
|
|
186
|
-
validated_explicit: bool
|
|
187
|
-
) -> Dict[str, Any]:
|
|
188
|
-
"""
|
|
189
|
-
Calculate maturity AND validated together to ensure consistency.
|
|
190
|
-
|
|
191
|
-
This is the RECOMMENDED function to use instead of calculate_maturity()
|
|
192
|
-
when you need both fields, as it guarantees they will be consistent.
|
|
193
|
-
|
|
194
|
-
Args:
|
|
195
|
-
counts: Component counts dict
|
|
196
|
-
usage_signals: Results from detect_squad_usage()
|
|
197
|
-
existing_validated: Current validated value from registry
|
|
198
|
-
validated_explicit: Whether validated was explicitly set
|
|
199
|
-
|
|
200
|
-
Returns:
|
|
201
|
-
Dict with:
|
|
202
|
-
- maturity: str - calculated maturity level
|
|
203
|
-
- validated: bool - consistent validated flag
|
|
204
|
-
- auto_promoted: bool - True if maturity was auto-promoted from evidence
|
|
205
|
-
"""
|
|
206
|
-
maturity = calculate_maturity(
|
|
207
|
-
counts=counts,
|
|
208
|
-
usage_signals=usage_signals,
|
|
209
|
-
existing_validated=existing_validated,
|
|
210
|
-
validated_explicit=validated_explicit
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
# Determine validated flag
|
|
214
|
-
if existing_validated:
|
|
215
|
-
# Human said it's validated, keep it
|
|
216
|
-
validated = True
|
|
217
|
-
auto_promoted = False
|
|
218
|
-
elif validated_explicit:
|
|
219
|
-
# Human explicitly said NOT validated, respect it
|
|
220
|
-
validated = False
|
|
221
|
-
auto_promoted = False
|
|
222
|
-
else:
|
|
223
|
-
# Auto-detection mode
|
|
224
|
-
validated = (maturity == MATURITY_OPERATIONAL)
|
|
225
|
-
auto_promoted = validated
|
|
226
|
-
|
|
227
|
-
return {
|
|
228
|
-
"maturity": maturity,
|
|
229
|
-
"validated": validated,
|
|
230
|
-
"auto_promoted": auto_promoted
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
# =============================================================================
|
|
235
|
-
# HELPER FUNCTIONS
|
|
236
|
-
# =============================================================================
|
|
237
|
-
|
|
238
|
-
def get_project_root_from_squads_path(squads_path: Path) -> Path:
|
|
239
|
-
"""
|
|
240
|
-
Get project root from squads/ directory path.
|
|
241
|
-
|
|
242
|
-
Args:
|
|
243
|
-
squads_path: Path to squads/ directory
|
|
244
|
-
|
|
245
|
-
Returns:
|
|
246
|
-
Path to project root (parent of squads/)
|
|
247
|
-
"""
|
|
248
|
-
return squads_path.parent
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
def get_project_root_from_squad_path(squad_path: Path) -> Path:
|
|
252
|
-
"""
|
|
253
|
-
Get project root from a specific squad's directory path.
|
|
254
|
-
|
|
255
|
-
Args:
|
|
256
|
-
squad_path: Path to squads/{squad-name}/ directory
|
|
257
|
-
|
|
258
|
-
Returns:
|
|
259
|
-
Path to project root (grandparent of squad path)
|
|
260
|
-
"""
|
|
261
|
-
return squad_path.parent.parent
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Squad Utilities - Shared functions for squad management scripts.
|
|
4
|
+
|
|
5
|
+
Contains deterministic logic for:
|
|
6
|
+
- Maturity calculation (DRAFT → DEVELOPING → OPERATIONAL)
|
|
7
|
+
- Usage signal detection
|
|
8
|
+
- Consistency rules for maturity/validated fields
|
|
9
|
+
|
|
10
|
+
CRITICAL RULE - Maturity/Validated Consistency:
|
|
11
|
+
- validated=True MUST mean maturity=OPERATIONAL
|
|
12
|
+
- validated=False EXPLICIT (via validated_explicit=True) BLOCKS auto-promotion
|
|
13
|
+
- validated=False DEFAULT allows auto-promotion based on evidence
|
|
14
|
+
|
|
15
|
+
Usage:
|
|
16
|
+
from squad_utils import calculate_maturity, detect_squad_usage, MATURITY_*
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
from typing import Dict, Any, Optional
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# =============================================================================
|
|
24
|
+
# MATURITY CONSTANTS (ALWAYS at top of file)
|
|
25
|
+
# =============================================================================
|
|
26
|
+
|
|
27
|
+
MATURITY_DRAFT = "DRAFT" # Missing essential components (tasks=0 or tasks<3 and workflows=0)
|
|
28
|
+
MATURITY_DEVELOPING = "DEVELOPING" # Has components but no validated usage
|
|
29
|
+
MATURITY_OPERATIONAL = "OPERATIONAL" # Validated usage detected (outputs exist or manually validated)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# =============================================================================
|
|
33
|
+
# USAGE DETECTION
|
|
34
|
+
# =============================================================================
|
|
35
|
+
|
|
36
|
+
def detect_squad_usage(squad_name: str, project_root: Path) -> Dict[str, Any]:
|
|
37
|
+
"""
|
|
38
|
+
Detect signals of real squad usage (AI-first, no forms).
|
|
39
|
+
|
|
40
|
+
Signals checked:
|
|
41
|
+
1. outputs/{squad}/ - outputs generated by squad
|
|
42
|
+
2. squads/{squad}/artifacts/ - artifacts inside squad folder
|
|
43
|
+
3. squads/{squad}/.validation/ - validation evidence
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
squad_name: Name of the squad to check
|
|
47
|
+
project_root: Path to project root (parent of squads/)
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
Dict with detection results:
|
|
51
|
+
- outputs_found: int - number of output files
|
|
52
|
+
- artifacts_found: int - number of artifact files
|
|
53
|
+
- validation_exists: bool - whether .validation/ folder exists
|
|
54
|
+
- total_evidence: int - outputs + artifacts count
|
|
55
|
+
"""
|
|
56
|
+
signals = {
|
|
57
|
+
"outputs_found": 0,
|
|
58
|
+
"artifacts_found": 0,
|
|
59
|
+
"validation_exists": False,
|
|
60
|
+
"total_evidence": 0,
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
# 1. Check outputs/{squad}/
|
|
64
|
+
outputs_path = project_root / "outputs" / squad_name
|
|
65
|
+
if outputs_path.exists():
|
|
66
|
+
try:
|
|
67
|
+
files = [f for f in outputs_path.rglob("*") if f.is_file()]
|
|
68
|
+
signals["outputs_found"] = len(files)
|
|
69
|
+
except (OSError, IOError) as e:
|
|
70
|
+
# Log but don't fail
|
|
71
|
+
pass
|
|
72
|
+
|
|
73
|
+
# 2. Check squads/{squad}/artifacts/
|
|
74
|
+
artifacts_path = project_root / "squads" / squad_name / "artifacts"
|
|
75
|
+
if artifacts_path.exists():
|
|
76
|
+
try:
|
|
77
|
+
files = [f for f in artifacts_path.rglob("*") if f.is_file()]
|
|
78
|
+
signals["artifacts_found"] = len(files)
|
|
79
|
+
except (OSError, IOError) as e:
|
|
80
|
+
# Log but don't fail
|
|
81
|
+
pass
|
|
82
|
+
|
|
83
|
+
# 3. Check squads/{squad}/.validation/
|
|
84
|
+
validation_path = project_root / "squads" / squad_name / ".validation"
|
|
85
|
+
if validation_path.exists():
|
|
86
|
+
signals["validation_exists"] = True
|
|
87
|
+
|
|
88
|
+
signals["total_evidence"] = signals["outputs_found"] + signals["artifacts_found"]
|
|
89
|
+
|
|
90
|
+
return signals
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
# =============================================================================
|
|
94
|
+
# MATURITY CALCULATION
|
|
95
|
+
# =============================================================================
|
|
96
|
+
|
|
97
|
+
def calculate_maturity(
|
|
98
|
+
counts: Dict[str, int],
|
|
99
|
+
usage_signals: Optional[Dict[str, Any]] = None,
|
|
100
|
+
existing_validated: bool = False,
|
|
101
|
+
validated_explicit: bool = False
|
|
102
|
+
) -> str:
|
|
103
|
+
"""
|
|
104
|
+
Calculate squad maturity level (deterministic).
|
|
105
|
+
|
|
106
|
+
Levels:
|
|
107
|
+
- DRAFT: Missing essential components (tasks=0 or tasks<3 and workflows=0)
|
|
108
|
+
- DEVELOPING: Has components but no validated usage
|
|
109
|
+
- OPERATIONAL: Validated usage (outputs detected OR manually validated in registry)
|
|
110
|
+
|
|
111
|
+
CRITICAL CONSISTENCY RULE:
|
|
112
|
+
- If validated_explicit=True AND existing_validated=False, do NOT auto-promote to OPERATIONAL
|
|
113
|
+
- This prevents the bug where maturity=OPERATIONAL but validated=false
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
counts: Component counts dict with 'tasks' and 'workflows' keys
|
|
117
|
+
usage_signals: Results from detect_squad_usage(), optional
|
|
118
|
+
existing_validated: True if registry has validated=true for this squad
|
|
119
|
+
validated_explicit: True if validated was EXPLICITLY set (not just default)
|
|
120
|
+
When True and existing_validated=False, blocks auto-promotion
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
Maturity level string: DRAFT, DEVELOPING, or OPERATIONAL
|
|
124
|
+
"""
|
|
125
|
+
tasks = counts.get("tasks", 0) if counts else 0
|
|
126
|
+
workflows = counts.get("workflows", 0) if counts else 0
|
|
127
|
+
|
|
128
|
+
# DRAFT: Missing essential components
|
|
129
|
+
if tasks == 0:
|
|
130
|
+
return MATURITY_DRAFT
|
|
131
|
+
if tasks < 3 and workflows == 0:
|
|
132
|
+
return MATURITY_DRAFT
|
|
133
|
+
|
|
134
|
+
# OPERATIONAL: Human validated (always trust explicit human validation)
|
|
135
|
+
if existing_validated:
|
|
136
|
+
return MATURITY_OPERATIONAL
|
|
137
|
+
|
|
138
|
+
# CRITICAL: If human EXPLICITLY set validated=false, respect it
|
|
139
|
+
# Do NOT auto-promote based on evidence
|
|
140
|
+
if validated_explicit:
|
|
141
|
+
return MATURITY_DEVELOPING
|
|
142
|
+
|
|
143
|
+
# Auto-detection: promote to OPERATIONAL if enough evidence
|
|
144
|
+
if usage_signals:
|
|
145
|
+
if usage_signals.get("total_evidence", 0) >= 3:
|
|
146
|
+
return MATURITY_OPERATIONAL
|
|
147
|
+
|
|
148
|
+
if usage_signals.get("validation_exists", False):
|
|
149
|
+
return MATURITY_OPERATIONAL
|
|
150
|
+
|
|
151
|
+
# DEVELOPING: Has components but not validated
|
|
152
|
+
return MATURITY_DEVELOPING
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def is_maturity_validated_consistent(maturity: str, validated: bool) -> bool:
|
|
156
|
+
"""
|
|
157
|
+
Check if maturity and validated fields are consistent.
|
|
158
|
+
|
|
159
|
+
Rules:
|
|
160
|
+
- If validated=True, maturity MUST be OPERATIONAL
|
|
161
|
+
- If maturity=OPERATIONAL, validated SHOULD be True (warning if false)
|
|
162
|
+
- Other combinations are valid
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
maturity: Current maturity level
|
|
166
|
+
validated: Current validated flag
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
True if consistent, False if inconsistent
|
|
170
|
+
"""
|
|
171
|
+
# If validated=True but not OPERATIONAL, that's a problem
|
|
172
|
+
if validated and maturity != MATURITY_OPERATIONAL:
|
|
173
|
+
return False
|
|
174
|
+
|
|
175
|
+
# Note: maturity=OPERATIONAL with validated=False is allowed
|
|
176
|
+
# (can happen during auto-detection before human validation)
|
|
177
|
+
# But we return True with a softer check
|
|
178
|
+
|
|
179
|
+
return True
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def resolve_maturity_validated(
|
|
183
|
+
counts: Dict[str, int],
|
|
184
|
+
usage_signals: Optional[Dict[str, Any]],
|
|
185
|
+
existing_validated: bool,
|
|
186
|
+
validated_explicit: bool
|
|
187
|
+
) -> Dict[str, Any]:
|
|
188
|
+
"""
|
|
189
|
+
Calculate maturity AND validated together to ensure consistency.
|
|
190
|
+
|
|
191
|
+
This is the RECOMMENDED function to use instead of calculate_maturity()
|
|
192
|
+
when you need both fields, as it guarantees they will be consistent.
|
|
193
|
+
|
|
194
|
+
Args:
|
|
195
|
+
counts: Component counts dict
|
|
196
|
+
usage_signals: Results from detect_squad_usage()
|
|
197
|
+
existing_validated: Current validated value from registry
|
|
198
|
+
validated_explicit: Whether validated was explicitly set
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
Dict with:
|
|
202
|
+
- maturity: str - calculated maturity level
|
|
203
|
+
- validated: bool - consistent validated flag
|
|
204
|
+
- auto_promoted: bool - True if maturity was auto-promoted from evidence
|
|
205
|
+
"""
|
|
206
|
+
maturity = calculate_maturity(
|
|
207
|
+
counts=counts,
|
|
208
|
+
usage_signals=usage_signals,
|
|
209
|
+
existing_validated=existing_validated,
|
|
210
|
+
validated_explicit=validated_explicit
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
# Determine validated flag
|
|
214
|
+
if existing_validated:
|
|
215
|
+
# Human said it's validated, keep it
|
|
216
|
+
validated = True
|
|
217
|
+
auto_promoted = False
|
|
218
|
+
elif validated_explicit:
|
|
219
|
+
# Human explicitly said NOT validated, respect it
|
|
220
|
+
validated = False
|
|
221
|
+
auto_promoted = False
|
|
222
|
+
else:
|
|
223
|
+
# Auto-detection mode
|
|
224
|
+
validated = (maturity == MATURITY_OPERATIONAL)
|
|
225
|
+
auto_promoted = validated
|
|
226
|
+
|
|
227
|
+
return {
|
|
228
|
+
"maturity": maturity,
|
|
229
|
+
"validated": validated,
|
|
230
|
+
"auto_promoted": auto_promoted
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
# =============================================================================
|
|
235
|
+
# HELPER FUNCTIONS
|
|
236
|
+
# =============================================================================
|
|
237
|
+
|
|
238
|
+
def get_project_root_from_squads_path(squads_path: Path) -> Path:
|
|
239
|
+
"""
|
|
240
|
+
Get project root from squads/ directory path.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
squads_path: Path to squads/ directory
|
|
244
|
+
|
|
245
|
+
Returns:
|
|
246
|
+
Path to project root (parent of squads/)
|
|
247
|
+
"""
|
|
248
|
+
return squads_path.parent
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def get_project_root_from_squad_path(squad_path: Path) -> Path:
|
|
252
|
+
"""
|
|
253
|
+
Get project root from a specific squad's directory path.
|
|
254
|
+
|
|
255
|
+
Args:
|
|
256
|
+
squad_path: Path to squads/{squad-name}/ directory
|
|
257
|
+
|
|
258
|
+
Returns:
|
|
259
|
+
Path to project root (grandparent of squad path)
|
|
260
|
+
"""
|
|
261
|
+
return squad_path.parent.parent
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Run all bash script tests
|
|
3
|
-
# Usage: bash squads/squad-creator-pro/scripts/tests/run_bash_tests.sh
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
TOTAL_PASS=0
|
|
7
|
-
TOTAL_FAIL=0
|
|
8
|
-
|
|
9
|
-
echo "╔══════════════════════════════════════════════════════════════╗"
|
|
10
|
-
echo "║ BASH SCRIPT TESTS — Squad Creator ║"
|
|
11
|
-
echo "╚══════════════════════════════════════════════════════════════╝"
|
|
12
|
-
echo ""
|
|
13
|
-
|
|
14
|
-
for test_file in "$SCRIPT_DIR"/test_*.sh; do
|
|
15
|
-
[[ "$(basename "$test_file")" == "$(basename "$0")" ]] && continue
|
|
16
|
-
echo "Running: $(basename "$test_file")"
|
|
17
|
-
if bash "$test_file"; then
|
|
18
|
-
TOTAL_PASS=$((TOTAL_PASS + 1))
|
|
19
|
-
else
|
|
20
|
-
TOTAL_FAIL=$((TOTAL_FAIL + 1))
|
|
21
|
-
fi
|
|
22
|
-
echo ""
|
|
23
|
-
done
|
|
24
|
-
|
|
25
|
-
echo "════════════════════════════════════════════════════════════════"
|
|
26
|
-
echo "SUITES: $TOTAL_PASS passed | $TOTAL_FAIL failed"
|
|
27
|
-
echo "════════════════════════════════════════════════════════════════"
|
|
28
|
-
|
|
29
|
-
[[ $TOTAL_FAIL -eq 0 ]] && exit 0 || exit 1
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Run all bash script tests
|
|
3
|
+
# Usage: bash squads/squad-creator-pro/scripts/tests/run_bash_tests.sh
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
TOTAL_PASS=0
|
|
7
|
+
TOTAL_FAIL=0
|
|
8
|
+
|
|
9
|
+
echo "╔══════════════════════════════════════════════════════════════╗"
|
|
10
|
+
echo "║ BASH SCRIPT TESTS — Squad Creator ║"
|
|
11
|
+
echo "╚══════════════════════════════════════════════════════════════╝"
|
|
12
|
+
echo ""
|
|
13
|
+
|
|
14
|
+
for test_file in "$SCRIPT_DIR"/test_*.sh; do
|
|
15
|
+
[[ "$(basename "$test_file")" == "$(basename "$0")" ]] && continue
|
|
16
|
+
echo "Running: $(basename "$test_file")"
|
|
17
|
+
if bash "$test_file"; then
|
|
18
|
+
TOTAL_PASS=$((TOTAL_PASS + 1))
|
|
19
|
+
else
|
|
20
|
+
TOTAL_FAIL=$((TOTAL_FAIL + 1))
|
|
21
|
+
fi
|
|
22
|
+
echo ""
|
|
23
|
+
done
|
|
24
|
+
|
|
25
|
+
echo "════════════════════════════════════════════════════════════════"
|
|
26
|
+
echo "SUITES: $TOTAL_PASS passed | $TOTAL_FAIL failed"
|
|
27
|
+
echo "════════════════════════════════════════════════════════════════"
|
|
28
|
+
|
|
29
|
+
[[ $TOTAL_FAIL -eq 0 ]] && exit 0 || exit 1
|