@takuma-hirai/hirai-method 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/.stale-harness-state/last-check +0 -0
- package/.claude/CommonRules.md +121 -0
- package/.claude/agents/01-core-development/api-designer.md +237 -0
- package/.claude/agents/01-core-development/backend-developer.md +222 -0
- package/.claude/agents/01-core-development/design-bridge.md +127 -0
- package/.claude/agents/01-core-development/electron-pro.md +240 -0
- package/.claude/agents/01-core-development/frontend-developer.md +133 -0
- package/.claude/agents/01-core-development/fullstack-developer.md +235 -0
- package/.claude/agents/01-core-development/graphql-architect.md +238 -0
- package/.claude/agents/01-core-development/microservices-architect.md +239 -0
- package/.claude/agents/01-core-development/mobile-developer.md +283 -0
- package/.claude/agents/01-core-development/ui-designer.md +174 -0
- package/.claude/agents/01-core-development/websocket-engineer.md +150 -0
- package/.claude/agents/03-infrastructure/azure-infra-engineer.md +53 -0
- package/.claude/agents/03-infrastructure/cloud-architect.md +277 -0
- package/.claude/agents/03-infrastructure/database-administrator.md +287 -0
- package/.claude/agents/03-infrastructure/deployment-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/devops-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/devops-incident-responder.md +287 -0
- package/.claude/agents/03-infrastructure/docker-expert.md +278 -0
- package/.claude/agents/03-infrastructure/incident-responder.md +287 -0
- package/.claude/agents/03-infrastructure/kubernetes-specialist.md +287 -0
- package/.claude/agents/03-infrastructure/network-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/platform-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/security-engineer.md +277 -0
- package/.claude/agents/03-infrastructure/sre-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/terraform-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/terragrunt-expert.md +307 -0
- package/.claude/agents/03-infrastructure/windows-infra-admin.md +52 -0
- package/.claude/agents/04-quality-security/accessibility-tester.md +277 -0
- package/.claude/agents/04-quality-security/ad-security-reviewer.md +56 -0
- package/.claude/agents/04-quality-security/ai-writing-auditor.md +77 -0
- package/.claude/agents/04-quality-security/architect-reviewer.md +287 -0
- package/.claude/agents/04-quality-security/chaos-engineer.md +277 -0
- package/.claude/agents/04-quality-security/code-reviewer.md +287 -0
- package/.claude/agents/04-quality-security/compliance-auditor.md +277 -0
- package/.claude/agents/04-quality-security/debugger.md +287 -0
- package/.claude/agents/04-quality-security/error-detective.md +287 -0
- package/.claude/agents/04-quality-security/penetration-tester.md +287 -0
- package/.claude/agents/04-quality-security/performance-engineer.md +287 -0
- package/.claude/agents/04-quality-security/powershell-security-hardening.md +54 -0
- package/.claude/agents/04-quality-security/qa-expert.md +287 -0
- package/.claude/agents/04-quality-security/security-auditor.md +287 -0
- package/.claude/agents/04-quality-security/test-automator.md +287 -0
- package/.claude/agents/04-quality-security/ui-ux-tester.md +234 -0
- package/.claude/agents/06-developer-experience/build-engineer.md +286 -0
- package/.claude/agents/06-developer-experience/cli-developer.md +286 -0
- package/.claude/agents/06-developer-experience/dependency-manager.md +286 -0
- package/.claude/agents/06-developer-experience/documentation-engineer.md +276 -0
- package/.claude/agents/06-developer-experience/dx-optimizer.md +286 -0
- package/.claude/agents/06-developer-experience/git-workflow-manager.md +286 -0
- package/.claude/agents/06-developer-experience/legacy-modernizer.md +286 -0
- package/.claude/agents/06-developer-experience/mcp-developer.md +275 -0
- package/.claude/agents/06-developer-experience/powershell-module-architect.md +58 -0
- package/.claude/agents/06-developer-experience/powershell-ui-architect.md +135 -0
- package/.claude/agents/06-developer-experience/readme-generator.md +238 -0
- package/.claude/agents/06-developer-experience/refactoring-specialist.md +286 -0
- package/.claude/agents/06-developer-experience/slack-expert.md +232 -0
- package/.claude/agents/06-developer-experience/tooling-engineer.md +286 -0
- package/.claude/agents/09-meta-orchestration/agent-installer.md +97 -0
- package/.claude/agents/09-meta-orchestration/agent-organizer.md +287 -0
- package/.claude/agents/09-meta-orchestration/codebase-orchestrator.md +249 -0
- package/.claude/agents/09-meta-orchestration/context-manager.md +287 -0
- package/.claude/agents/09-meta-orchestration/error-coordinator.md +287 -0
- package/.claude/agents/09-meta-orchestration/it-ops-orchestrator.md +60 -0
- package/.claude/agents/09-meta-orchestration/knowledge-synthesizer.md +287 -0
- package/.claude/agents/09-meta-orchestration/multi-agent-coordinator.md +287 -0
- package/.claude/agents/09-meta-orchestration/performance-monitor.md +287 -0
- package/.claude/agents/09-meta-orchestration/task-distributor.md +287 -0
- package/.claude/agents/09-meta-orchestration/workflow-orchestrator.md +287 -0
- package/.claude/agents/10-research-analysis/competitive-analyst.md +287 -0
- package/.claude/agents/10-research-analysis/data-researcher.md +287 -0
- package/.claude/agents/10-research-analysis/market-researcher.md +287 -0
- package/.claude/agents/10-research-analysis/project-idea-validator.md +269 -0
- package/.claude/agents/10-research-analysis/research-analyst.md +287 -0
- package/.claude/agents/10-research-analysis/scientific-literature-researcher.md +151 -0
- package/.claude/agents/10-research-analysis/search-specialist.md +287 -0
- package/.claude/agents/10-research-analysis/trend-analyst.md +287 -0
- package/.claude/archive/README.md +47 -0
- package/.claude/archive/agents/02-language-specialists/angular-architect.md +287 -0
- package/.claude/archive/agents/02-language-specialists/cpp-pro.md +277 -0
- package/.claude/archive/agents/02-language-specialists/csharp-developer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/django-developer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/dotnet-core-expert.md +287 -0
- package/.claude/archive/agents/02-language-specialists/dotnet-framework-4.8-expert.md +306 -0
- package/.claude/archive/agents/02-language-specialists/elixir-expert.md +311 -0
- package/.claude/archive/agents/02-language-specialists/expo-react-native-expert.md +268 -0
- package/.claude/archive/agents/02-language-specialists/fastapi-developer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/flutter-expert.md +287 -0
- package/.claude/archive/agents/02-language-specialists/golang-pro.md +277 -0
- package/.claude/archive/agents/02-language-specialists/java-architect.md +287 -0
- package/.claude/archive/agents/02-language-specialists/javascript-pro.md +277 -0
- package/.claude/archive/agents/02-language-specialists/kotlin-specialist.md +287 -0
- package/.claude/archive/agents/02-language-specialists/laravel-specialist.md +287 -0
- package/.claude/archive/agents/02-language-specialists/nextjs-developer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/node-specialist.md +124 -0
- package/.claude/archive/agents/02-language-specialists/php-pro.md +287 -0
- package/.claude/archive/agents/02-language-specialists/powershell-5.1-expert.md +59 -0
- package/.claude/archive/agents/02-language-specialists/powershell-7-expert.md +57 -0
- package/.claude/archive/agents/02-language-specialists/python-pro.md +277 -0
- package/.claude/archive/agents/02-language-specialists/rails-expert.md +358 -0
- package/.claude/archive/agents/02-language-specialists/react-specialist.md +287 -0
- package/.claude/archive/agents/02-language-specialists/rust-engineer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/spring-boot-engineer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/sql-pro.md +287 -0
- package/.claude/archive/agents/02-language-specialists/swift-expert.md +287 -0
- package/.claude/archive/agents/02-language-specialists/symfony-specialist.md +354 -0
- package/.claude/archive/agents/02-language-specialists/typescript-pro.md +277 -0
- package/.claude/archive/agents/02-language-specialists/vue-expert.md +287 -0
- package/.claude/archive/agents/05-data-ai/ai-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/data-analyst.md +277 -0
- package/.claude/archive/agents/05-data-ai/data-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/data-scientist.md +287 -0
- package/.claude/archive/agents/05-data-ai/database-optimizer.md +287 -0
- package/.claude/archive/agents/05-data-ai/llm-architect.md +287 -0
- package/.claude/archive/agents/05-data-ai/machine-learning-engineer.md +277 -0
- package/.claude/archive/agents/05-data-ai/ml-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/mlops-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/nlp-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/postgres-pro.md +287 -0
- package/.claude/archive/agents/05-data-ai/prompt-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/reinforcement-learning-engineer.md +277 -0
- package/.claude/archive/agents/07-specialized-domains/api-documenter.md +277 -0
- package/.claude/archive/agents/07-specialized-domains/blockchain-developer.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/embedded-systems.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/fintech-engineer.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/game-developer.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/healthcare-admin.md +199 -0
- package/.claude/archive/agents/07-specialized-domains/iot-engineer.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/m365-admin.md +48 -0
- package/.claude/archive/agents/07-specialized-domains/mobile-app-developer.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/payment-integration.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/quant-analyst.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/risk-manager.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/seo-specialist.md +184 -0
- package/.claude/archive/agents/08-business-product/business-analyst.md +287 -0
- package/.claude/archive/agents/08-business-product/content-marketer.md +287 -0
- package/.claude/archive/agents/08-business-product/customer-success-manager.md +287 -0
- package/.claude/archive/agents/08-business-product/legal-advisor.md +287 -0
- package/.claude/archive/agents/08-business-product/license-engineer.md +295 -0
- package/.claude/archive/agents/08-business-product/product-manager.md +287 -0
- package/.claude/archive/agents/08-business-product/project-manager.md +287 -0
- package/.claude/archive/agents/08-business-product/sales-engineer.md +287 -0
- package/.claude/archive/agents/08-business-product/scrum-master.md +287 -0
- package/.claude/archive/agents/08-business-product/technical-writer.md +287 -0
- package/.claude/archive/agents/08-business-product/ux-researcher.md +287 -0
- package/.claude/archive/agents/08-business-product/wordpress-master.md +316 -0
- package/.claude/archive/skills/competitive-ads-extractor/SKILL.md +293 -0
- package/.claude/archive/skills/developer-growth-analysis/SKILL.md +322 -0
- package/.claude/archive/skills/document-docx/LICENSE.txt +30 -0
- package/.claude/archive/skills/document-docx/SKILL.md +197 -0
- package/.claude/archive/skills/document-docx/docx-js.md +350 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/pack.py +159 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/unpack.py +29 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validate.py +69 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validation/__init__.py +15 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validation/base.py +951 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validation/docx.py +274 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validation/pptx.py +315 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validation/redlining.py +279 -0
- package/.claude/archive/skills/document-docx/ooxml.md +610 -0
- package/.claude/archive/skills/document-docx/scripts/__init__.py +1 -0
- package/.claude/archive/skills/document-docx/scripts/document.py +1276 -0
- package/.claude/archive/skills/document-docx/scripts/templates/comments.xml +3 -0
- package/.claude/archive/skills/document-docx/scripts/templates/commentsExtended.xml +3 -0
- package/.claude/archive/skills/document-docx/scripts/templates/commentsExtensible.xml +3 -0
- package/.claude/archive/skills/document-docx/scripts/templates/commentsIds.xml +3 -0
- package/.claude/archive/skills/document-docx/scripts/templates/people.xml +3 -0
- package/.claude/archive/skills/document-docx/scripts/utilities.py +374 -0
- package/.claude/archive/skills/document-pdf/LICENSE.txt +30 -0
- package/.claude/archive/skills/document-pdf/SKILL.md +294 -0
- package/.claude/archive/skills/document-pdf/forms.md +205 -0
- package/.claude/archive/skills/document-pdf/reference.md +612 -0
- package/.claude/archive/skills/document-pdf/scripts/check_bounding_boxes.py +70 -0
- package/.claude/archive/skills/document-pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/.claude/archive/skills/document-pdf/scripts/check_fillable_fields.py +12 -0
- package/.claude/archive/skills/document-pdf/scripts/convert_pdf_to_images.py +35 -0
- package/.claude/archive/skills/document-pdf/scripts/create_validation_image.py +41 -0
- package/.claude/archive/skills/document-pdf/scripts/extract_form_field_info.py +152 -0
- package/.claude/archive/skills/document-pdf/scripts/fill_fillable_fields.py +114 -0
- package/.claude/archive/skills/document-pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/.claude/archive/skills/document-pptx/LICENSE.txt +30 -0
- package/.claude/archive/skills/document-pptx/SKILL.md +484 -0
- package/.claude/archive/skills/document-pptx/html2pptx.md +625 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/pack.py +159 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/unpack.py +29 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validate.py +69 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/base.py +951 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/docx.py +274 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/.claude/archive/skills/document-pptx/ooxml.md +427 -0
- package/.claude/archive/skills/document-pptx/scripts/html2pptx.js +979 -0
- package/.claude/archive/skills/document-pptx/scripts/inventory.py +1020 -0
- package/.claude/archive/skills/document-pptx/scripts/rearrange.py +231 -0
- package/.claude/archive/skills/document-pptx/scripts/replace.py +385 -0
- package/.claude/archive/skills/document-pptx/scripts/thumbnail.py +450 -0
- package/.claude/archive/skills/document-xlsx/LICENSE.txt +30 -0
- package/.claude/archive/skills/document-xlsx/SKILL.md +289 -0
- package/.claude/archive/skills/document-xlsx/recalc.py +178 -0
- package/.claude/archive/skills/image-enhancer/SKILL.md +99 -0
- package/.claude/archive/skills/meeting-insights-analyzer/SKILL.md +327 -0
- package/.claude/archive/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/.claude/archive/skills/slack-gif-creator/SKILL.md +646 -0
- package/.claude/archive/skills/slack-gif-creator/core/color_palettes.py +302 -0
- package/.claude/archive/skills/slack-gif-creator/core/easing.py +230 -0
- package/.claude/archive/skills/slack-gif-creator/core/frame_composer.py +469 -0
- package/.claude/archive/skills/slack-gif-creator/core/gif_builder.py +246 -0
- package/.claude/archive/skills/slack-gif-creator/core/typography.py +357 -0
- package/.claude/archive/skills/slack-gif-creator/core/validators.py +264 -0
- package/.claude/archive/skills/slack-gif-creator/core/visual_effects.py +494 -0
- package/.claude/archive/skills/slack-gif-creator/requirements.txt +4 -0
- package/.claude/archive/skills/slack-gif-creator/templates/bounce.py +106 -0
- package/.claude/archive/skills/slack-gif-creator/templates/explode.py +331 -0
- package/.claude/archive/skills/slack-gif-creator/templates/fade.py +329 -0
- package/.claude/archive/skills/slack-gif-creator/templates/flip.py +291 -0
- package/.claude/archive/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
- package/.claude/archive/skills/slack-gif-creator/templates/morph.py +329 -0
- package/.claude/archive/skills/slack-gif-creator/templates/move.py +293 -0
- package/.claude/archive/skills/slack-gif-creator/templates/pulse.py +268 -0
- package/.claude/archive/skills/slack-gif-creator/templates/shake.py +127 -0
- package/.claude/archive/skills/slack-gif-creator/templates/slide.py +291 -0
- package/.claude/archive/skills/slack-gif-creator/templates/spin.py +269 -0
- package/.claude/archive/skills/slack-gif-creator/templates/wiggle.py +300 -0
- package/.claude/archive/skills/slack-gif-creator/templates/zoom.py +312 -0
- package/.claude/archive/skills/twitter-algorithm-optimizer/SKILL.md +327 -0
- package/.claude/archive/skills/video-downloader/SKILL.md +99 -0
- package/.claude/archive/skills/video-downloader/scripts/download_video.py +145 -0
- package/.claude/bash-whitelist-requests/2026-05-28-grep-find-rg.md +68 -0
- package/.claude/bash-whitelist-requests/2026-06-01-readonly-filters.md +76 -0
- package/.claude/bash-whitelist.txt +124 -0
- package/.claude/commands/agent-introspect.md +89 -0
- package/.claude/commands/apply-rules.md +363 -0
- package/.claude/commands/approve-design.md +219 -0
- package/.claude/commands/approve-org-money.md +267 -0
- package/.claude/commands/build.md +234 -0
- package/.claude/commands/commit.md +97 -0
- package/.claude/commands/context-fetch.md +113 -0
- package/.claude/commands/create-tool.md +496 -0
- package/.claude/commands/design-review.md +138 -0
- package/.claude/commands/design.md +807 -0
- package/.claude/commands/discharge-byproduct.md +208 -0
- package/.claude/commands/doc-review.md +165 -0
- package/.claude/commands/document-pair.md +76 -0
- package/.claude/commands/error-triage.md +435 -0
- package/.claude/commands/eval.md +70 -0
- package/.claude/commands/evolve.md +49 -0
- package/.claude/commands/finish-task.md +105 -0
- package/.claude/commands/gan-build.md +91 -0
- package/.claude/commands/gan-design.md +82 -0
- package/.claude/commands/gate-bypass.md +77 -0
- package/.claude/commands/gate-clear.md +45 -0
- package/.claude/commands/gate-status.md +46 -0
- package/.claude/commands/harness-audit.md +151 -0
- package/.claude/commands/hearing.md +138 -0
- package/.claude/commands/impact-check.md +486 -0
- package/.claude/commands/init-tasks.md +49 -0
- package/.claude/commands/instinct-export.md +47 -0
- package/.claude/commands/instinct-import.md +41 -0
- package/.claude/commands/instinct-status.md +43 -0
- package/.claude/commands/investigate.md +547 -0
- package/.claude/commands/learn.md +55 -0
- package/.claude/commands/lint-rules.md +400 -0
- package/.claude/commands/mode.md +58 -0
- package/.claude/commands/modify-feature.md +209 -0
- package/.claude/commands/module-review.md +149 -0
- package/.claude/commands/move-section.md +67 -0
- package/.claude/commands/new-draft.md +67 -0
- package/.claude/commands/new-feature.md +286 -0
- package/.claude/commands/new-task.md +156 -0
- package/.claude/commands/notification.md +107 -0
- package/.claude/commands/pm-start.md +119 -0
- package/.claude/commands/projects.md +32 -0
- package/.claude/commands/promote.md +43 -0
- package/.claude/commands/rasis-report.md +1323 -0
- package/.claude/commands/release-note.md +130 -0
- package/.claude/commands/reply-watch.md +149 -0
- package/.claude/commands/requirement.md +352 -0
- package/.claude/commands/resume-state.md +187 -0
- package/.claude/commands/reviewpr.md +118 -0
- package/.claude/commands/save-state.md +100 -0
- package/.claude/commands/sentry-pr.md +157 -0
- package/.claude/commands/start-task.md +87 -0
- package/.claude/commands/system-review.md +147 -0
- package/.claude/commands/task-bypass.md +70 -0
- package/.claude/commands/task-estimate.md +100 -0
- package/.claude/commands/template-apply.md +89 -0
- package/.claude/commands/test-design.md +116 -0
- package/.claude/commands/transfer-mismatch.md +317 -0
- package/.claude/commands/verify.md +51 -0
- package/.claude/evals/grader-loop-mode-autonomy.sh +165 -0
- package/.claude/evals/grader-system-reminder-attention.sh +99 -0
- package/.claude/evals/loop-mode-autonomy.md +121 -0
- package/.claude/evals/loop-mode-autonomy.results.template.md +133 -0
- package/.claude/evals/system-reminder-attention.md +123 -0
- package/.claude/evals/system-reminder-attention.results.template.md +93 -0
- package/.claude/evals/system-reminder-attention.runner.md +353 -0
- package/.claude/harness-config.local.yml +48 -0
- package/.claude/harness-config.yml +534 -0
- package/.claude/hooks/agent-marker-clear.sh +43 -0
- package/.claude/hooks/agent-marker-set.sh +40 -0
- package/.claude/hooks/agent-router-suggest.sh +123 -0
- package/.claude/hooks/autonomous-action-guard.sh +242 -0
- package/.claude/hooks/byproduct-discharge-guard.sh +128 -0
- package/.claude/hooks/check-md-mermaid.sh +144 -0
- package/.claude/hooks/check-required-env.sh +95 -0
- package/.claude/hooks/check-serena-mcp.sh +123 -0
- package/.claude/hooks/confidence-gate.sh +139 -0
- package/.claude/hooks/context-budget.sh +233 -0
- package/.claude/hooks/delegation-guard.sh +99 -0
- package/.claude/hooks/dispatcher-manifest.tsv +38 -0
- package/.claude/hooks/draft-flow-guard.sh +304 -0
- package/.claude/hooks/failure-loop-detect.sh +139 -0
- package/.claude/hooks/gateguard.sh +209 -0
- package/.claude/hooks/improvement-proposal.sh +112 -0
- package/.claude/hooks/init-tasks-on-start.sh +34 -0
- package/.claude/hooks/lib/bypass-logger.sh +82 -0
- package/.claude/hooks/lib/confidence-gate/bypass.sh +48 -0
- package/.claude/hooks/lib/confidence-gate/extract.sh +99 -0
- package/.claude/hooks/lib/confidence-gate/major-agent-filter.sh +59 -0
- package/.claude/hooks/lib/confidence-gate/messages.sh +53 -0
- package/.claude/hooks/lib/config-loader.sh +784 -0
- package/.claude/hooks/lib/delegation-guard/bash-whitelist.sh +323 -0
- package/.claude/hooks/lib/delegation-guard/git-deny.sh +188 -0
- package/.claude/hooks/lib/delegation-guard/protected-paths.sh +105 -0
- package/.claude/hooks/lib/delegation-guard/subagent-detect.sh +40 -0
- package/.claude/hooks/lib/dispatcher-core.sh +454 -0
- package/.claude/hooks/lib/improvement-proposal/aggregate.py +466 -0
- package/.claude/hooks/lib/improvement-proposal/cache.sh +78 -0
- package/.claude/hooks/lib/mode-loader.sh +80 -0
- package/.claude/hooks/lib/next-actions-parser.sh +153 -0
- package/.claude/hooks/lib/project-root.sh +60 -0
- package/.claude/hooks/list-md-plan-first-reminder.sh +143 -0
- package/.claude/hooks/loop-auto-progress-reminder.sh +108 -0
- package/.claude/hooks/loop-confirmation-detector.sh +241 -0
- package/.claude/hooks/mode-asana-prompt.sh +61 -0
- package/.claude/hooks/mode-enforce.sh +57 -0
- package/.claude/hooks/mode-session-start.sh +93 -0
- package/.claude/hooks/next-actions-surface.sh +136 -0
- package/.claude/hooks/notification-dispatcher.sh +9 -0
- package/.claude/hooks/notify.sh +27 -0
- package/.claude/hooks/parallel-subagent-reminder.sh +469 -0
- package/.claude/hooks/post-tool-use-dispatcher.sh +9 -0
- package/.claude/hooks/pre-tool-use-dispatcher.sh +9 -0
- package/.claude/hooks/reviewer-count-guard.sh +313 -0
- package/.claude/hooks/session-help-surface.sh +192 -0
- package/.claude/hooks/session-start-dispatcher.sh +9 -0
- package/.claude/hooks/session-start-wrapper.sh +156 -0
- package/.claude/hooks/stale-harness-detect.sh +422 -0
- package/.claude/hooks/stop-dispatcher.sh +9 -0
- package/.claude/hooks/stop.sh +25 -0
- package/.claude/hooks/subagent-stop-dispatcher.sh +9 -0
- package/.claude/hooks/task-rule-guard.sh +317 -0
- package/.claude/hooks/tests/run-tests.sh +23 -0
- package/.claude/hooks/tests/test-agent-marker-warn.sh +86 -0
- package/.claude/hooks/tests/test-check-required-env.sh +138 -0
- package/.claude/hooks/tests/test-confidence-gate.sh +170 -0
- package/.claude/hooks/tests/test-config-env-override.sh +220 -0
- package/.claude/hooks/tests/test-gate-disable.sh +118 -0
- package/.claude/hooks/tests/test-improvement-proposal.sh +284 -0
- package/.claude/hooks/tool-call-slip-detector.sh +188 -0
- package/.claude/hooks/user-prompt-submit-dispatcher.sh +9 -0
- package/.claude/hooks/why-x5-reminder.sh +45 -0
- package/.claude/hooks/why-x5-violation-detect.sh +152 -0
- package/.claude/hooks/workflow-guard.sh +263 -0
- package/.claude/mode.yml +28 -0
- package/.claude/project-rules/development-process.md +8 -0
- package/.claude/project-rules/git-workflow.md +8 -0
- package/.claude/project-rules/modes.md +8 -0
- package/.claude/project-rules/self-improvement.md +8 -0
- package/.claude/project-rules/task-management.md +8 -0
- package/.claude/project-rules/why-x5-output.md +8 -0
- package/.claude/project-rules/workflow.md +8 -0
- package/.claude/rules/development-process.md +293 -0
- package/.claude/rules/git-workflow.md +71 -0
- package/.claude/rules/modes.md +189 -0
- package/.claude/rules/self-improvement.md +76 -0
- package/.claude/rules/task-management.md +261 -0
- package/.claude/rules/why-x5-output.md +97 -0
- package/.claude/rules/workflow.md +157 -0
- package/.claude/rules-details/README.md +67 -0
- package/.claude/rules-details/development-process/confidence-gate.md +22 -0
- package/.claude/rules-details/development-process/cross-repo-write.md +35 -0
- package/.claude/rules-details/development-process/delegation-requirements.md +158 -0
- package/.claude/rules-details/development-process/harness-sync.md +21 -0
- package/.claude/rules-details/development-process/origin.md +13 -0
- package/.claude/rules-details/development-process/parallelization-origin.md +22 -0
- package/.claude/rules-details/development-process/research-reuse.md +22 -0
- package/.claude/rules-details/development-process/staging-strategy.md +47 -0
- package/.claude/rules-details/modes/artifacts.md +34 -0
- package/.claude/rules-details/modes/compliance-items.md +120 -0
- package/.claude/rules-details/modes/five-layer-enforcement.md +46 -0
- package/.claude/rules-details/modes/mode-hooks.md +51 -0
- package/.claude/rules-details/modes/origin.md +17 -0
- package/.claude/rules-details/self-improvement/l4-mechanics.md +36 -0
- package/.claude/rules-details/self-improvement/origin.md +8 -0
- package/.claude/rules-details/self-improvement/related-skills.md +35 -0
- package/.claude/rules-details/self-improvement/when-to-use-layers.md +39 -0
- package/.claude/rules-details/task-management/hook-enforcement.md +25 -0
- package/.claude/rules-details/task-management/mandatory-reading.md +20 -0
- package/.claude/rules-details/task-management/origin.md +12 -0
- package/.claude/rules-details/task-management/parking-lot.md +26 -0
- package/.claude/rules-details/task-management/plan-first.md +44 -0
- package/.claude/rules-details/task-management/six-articles.md +68 -0
- package/.claude/rules-details/task-management/task-migration.md +16 -0
- package/.claude/rules-details/task-management/ui-detection.md +11 -0
- package/.claude/rules-details/why-x5-output/examples.md +41 -0
- package/.claude/rules-details/why-x5-output/feedback-memory.md +14 -0
- package/.claude/rules-details/why-x5-output/origin.md +10 -0
- package/.claude/rules-details/why-x5-output/v1-v10-history.md +19 -0
- package/.claude/rules-details/workflow/10-stage.md +43 -0
- package/.claude/rules-details/workflow/14-stage.md +52 -0
- package/.claude/rules-details/workflow/byproduct-discharge.md +39 -0
- package/.claude/rules-details/workflow/draft-flow-guard.md +31 -0
- package/.claude/rules-details/workflow/fan-out.md +70 -0
- package/.claude/rules-details/workflow/mece-20.md +36 -0
- package/.claude/rules-details/workflow/origin.md +14 -0
- package/.claude/rules-details/workflow/refactoring.md +48 -0
- package/.claude/rules-details/workflow/related-skills.md +22 -0
- package/.claude/rules-details/workflow/reviewer-prompt.md +100 -0
- package/.claude/rules-details/workflow/session-persistence.md +46 -0
- package/.claude/rules-details/workflow/workflow-guard.md +36 -0
- package/.claude/scripts/__pycache__/harness-audit.cpython-313.pyc +0 -0
- package/.claude/scripts/agent-stocktake.py +421 -0
- package/.claude/scripts/check-md-mermaid.mjs +138 -0
- package/.claude/scripts/generate-settings.sh +0 -0
- package/.claude/scripts/harness-audit.py +1547 -0
- package/.claude/scripts/hc-config.sh +2265 -0
- package/.claude/scripts/init-tasks.sh +117 -0
- package/.claude/scripts/lib/enforcement-matrix-parse.sh +81 -0
- package/.claude/scripts/lib/hc-config-metadata.sh +190 -0
- package/.claude/scripts/lib/hc-config-web-server.js +1528 -0
- package/.claude/scripts/lib/hc-config-web-ui/app.js +1054 -0
- package/.claude/scripts/lib/hc-config-web-ui/index.html +130 -0
- package/.claude/scripts/lib/hc-config-web-ui/style.css +522 -0
- package/.claude/scripts/new-task-helper.sh +432 -0
- package/.claude/scripts/observe-repair.sh +437 -0
- package/.claude/scripts/observe-rotate.sh +311 -0
- package/.claude/scripts/statusline.sh +239 -0
- package/.claude/settings.generated.preview.json +211 -0
- package/.claude/settings.json +215 -0
- package/.claude/settings.local.example.json +20 -0
- package/.claude/settings.local.json +36 -0
- package/.claude/skills/agent-introspection-debugging/SKILL.md +123 -0
- package/.claude/skills/agent-router/README.md +137 -0
- package/.claude/skills/agent-router/SKILL.md +74 -0
- package/.claude/skills/agent-router/dispatch-table.yml +352 -0
- package/.claude/skills/agent-router/router.py +1086 -0
- package/.claude/skills/agent-router/samples/representative_prompts.txt +24 -0
- package/.claude/skills/agent-router/tests/__init__.py +0 -0
- package/.claude/skills/agent-router/tests/test_router.py +762 -0
- package/.claude/skills/artifacts-builder/LICENSE.txt +202 -0
- package/.claude/skills/artifacts-builder/SKILL.md +74 -0
- package/.claude/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/.claude/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/.claude/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/.claude/skills/brand-guidelines/LICENSE.txt +202 -0
- package/.claude/skills/brand-guidelines/SKILL.md +73 -0
- package/.claude/skills/canvas-design/LICENSE.txt +202 -0
- package/.claude/skills/canvas-design/SKILL.md +130 -0
- package/.claude/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/.claude/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/.claude/skills/changelog-generator/SKILL.md +104 -0
- package/.claude/skills/check-md-mermaid/SKILL.md +62 -0
- package/.claude/skills/connect/SKILL.md +156 -0
- package/.claude/skills/connect-apps/SKILL.md +80 -0
- package/.claude/skills/content-research-writer/SKILL.md +538 -0
- package/.claude/skills/continuous-agent-loop/SKILL.md +187 -0
- package/.claude/skills/continuous-learning-v2/SKILL.md +238 -0
- package/.claude/skills/continuous-learning-v2/config.json +35 -0
- package/.claude/skills/continuous-learning-v2/hooks/observe.sh +333 -0
- package/.claude/skills/continuous-learning-v2/instinct-cli.py +406 -0
- package/.claude/skills/domain-name-brainstormer/SKILL.md +212 -0
- package/.claude/skills/eval-harness/SKILL.md +100 -0
- package/.claude/skills/eval-harness/swe-bench/README.md +80 -0
- package/.claude/skills/eval-harness/swe-bench/config.yml +29 -0
- package/.claude/skills/eval-harness/swe-bench/docker/Dockerfile +25 -0
- package/.claude/skills/eval-harness/swe-bench/docker/docker-compose.yml +18 -0
- package/.claude/skills/eval-harness/swe-bench/results/dry-run-2026-05-04.json +137 -0
- package/.claude/skills/eval-harness/swe-bench/results/dry-run-comparison-2026-05-04.md +112 -0
- package/.claude/skills/eval-harness/swe-bench/results/dry-run-improved-2026-05-04.json +165 -0
- package/.claude/skills/eval-harness/swe-bench/results/raw/astropy__astropy-12907.patch +12 -0
- package/.claude/skills/eval-harness/swe-bench/results/raw/astropy__astropy-12907.txt +322 -0
- package/.claude/skills/eval-harness/swe-bench/results/raw/astropy__astropy-12907.whole-file.txt +322 -0
- package/.claude/skills/eval-harness/swe-bench/runner.py +845 -0
- package/.claude/skills/eval-harness/swe-bench/scoring.py +298 -0
- package/.claude/skills/eval-harness/swe-bench/tasks/fetch_tasks.py +81 -0
- package/.claude/skills/eval-harness/swe-bench/tasks/lite-50.json +702 -0
- package/.claude/skills/file-organizer/SKILL.md +433 -0
- package/.claude/skills/gan-style-harness/SKILL.md +111 -0
- package/.claude/skills/gateguard/.gateguard.yml +47 -0
- package/.claude/skills/gateguard/SKILL.md +99 -0
- package/.claude/skills/internal-comms/LICENSE.txt +202 -0
- package/.claude/skills/internal-comms/SKILL.md +32 -0
- package/.claude/skills/internal-comms/examples/3p-updates.md +47 -0
- package/.claude/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/.claude/skills/internal-comms/examples/faq-answers.md +30 -0
- package/.claude/skills/internal-comms/examples/general-comms.md +16 -0
- package/.claude/skills/invoice-organizer/SKILL.md +446 -0
- package/.claude/skills/karpathy-guidelines/SKILL.md +67 -0
- package/.claude/skills/langsmith-fetch/SKILL.md +485 -0
- package/.claude/skills/lead-research-assistant/SKILL.md +199 -0
- package/.claude/skills/mcp-builder/LICENSE.txt +202 -0
- package/.claude/skills/mcp-builder/SKILL.md +328 -0
- package/.claude/skills/mcp-builder/reference/evaluation.md +602 -0
- package/.claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/.claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
- package/.claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
- package/.claude/skills/mcp-builder/scripts/connections.py +151 -0
- package/.claude/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/.claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/.claude/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/.claude/skills/raffle-winner-picker/SKILL.md +159 -0
- package/.claude/skills/repo-map/README.md +125 -0
- package/.claude/skills/repo-map/SKILL.md +128 -0
- package/.claude/skills/repo-map/examples/sample-output.md +1194 -0
- package/.claude/skills/repo-map/repo-map.py +715 -0
- package/.claude/skills/salesforce-e2e-testing/SKILL.md +116 -0
- package/.claude/skills/salesforce-e2e-testing/catalog-template.md +161 -0
- package/.claude/skills/salesforce-e2e-testing/methodology.md +179 -0
- package/.claude/skills/salesforce-e2e-testing/observation-rules.md +280 -0
- package/.claude/skills/salesforce-e2e-testing/pattern-taxonomy.md +392 -0
- package/.claude/skills/salesforce-e2e-testing/procedure-template.md +376 -0
- package/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/.claude/skills/skill-creator/SKILL.md +209 -0
- package/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
- package/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/.claude/skills/skill-share/SKILL.md +80 -0
- package/.claude/skills/tailored-resume-generator/SKILL.md +345 -0
- package/.claude/skills/template-skill/SKILL.md +6 -0
- package/.claude/skills/theme-factory/LICENSE.txt +202 -0
- package/.claude/skills/theme-factory/SKILL.md +59 -0
- package/.claude/skills/theme-factory/theme-showcase.pdf +0 -0
- package/.claude/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/.claude/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/.claude/skills/theme-factory/themes/desert-rose.md +19 -0
- package/.claude/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/.claude/skills/theme-factory/themes/golden-hour.md +19 -0
- package/.claude/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/.claude/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/.claude/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/.claude/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/.claude/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/.claude/skills/verification-loop/SKILL.md +129 -0
- package/.claude/skills/webapp-testing/LICENSE.txt +202 -0
- package/.claude/skills/webapp-testing/SKILL.md +96 -0
- package/.claude/skills/webapp-testing/examples/console_logging.py +35 -0
- package/.claude/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/.claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/.claude/skills/webapp-testing/scripts/with_server.py +106 -0
- package/.claude/templates/docs/draft/_DRAFT_TEMPLATE.md +162 -0
- package/.claude/templates/docs/draft/_TEST_DESIGN_TEMPLATE.md +76 -0
- package/.claude/templates/docs/tasks/_TASK_TEMPLATE.md +276 -0
- package/.claude/templates/docs/tasks/list.md +80 -0
- package/.claude/templates/docs/tasks/parking-lot.md +82 -0
- package/.claude/templates/settings.user-level.json.template +306 -0
- package/.claude/tests/SMOKE-CLASSIFICATION.md +199 -0
- package/.claude/tests/action-space-count-smoke.sh +130 -0
- package/.claude/tests/agent-router-suggest-wiring-smoke.sh +188 -0
- package/.claude/tests/audit-followups-smoke.sh +158 -0
- package/.claude/tests/autonomous-action-guard-relaxation-smoke.sh +479 -0
- package/.claude/tests/autonomous-action-guard-smoke.sh +187 -0
- package/.claude/tests/check-serena-mcp-smoke.sh +156 -0
- package/.claude/tests/common-rules-import-smoke.sh +209 -0
- package/.claude/tests/confidence-gate-smoke.sh +220 -0
- package/.claude/tests/config-feature-toggles-smoke.sh +389 -0
- package/.claude/tests/context-budget-smoke.sh +222 -0
- package/.claude/tests/custom-pm-commands-smoke.sh +93 -0
- package/.claude/tests/delegation-guard-code-smoke.sh +244 -0
- package/.claude/tests/delegation-guard-deny-layers-smoke.sh +356 -0
- package/.claude/tests/delegation-guard-readonly-filter-smoke.sh +205 -0
- package/.claude/tests/delegation-guard-search-whitelist-smoke.sh +152 -0
- package/.claude/tests/delegation-guard-segment-smoke.sh +109 -0
- package/.claude/tests/dispatcher-blocker-invariance-smoke.sh +700 -0
- package/.claude/tests/dispatcher-core-smoke.sh +452 -0
- package/.claude/tests/dispatcher-merge-matrix-smoke.sh +825 -0
- package/.claude/tests/dispatcher-success-stdout-smoke.sh +290 -0
- package/.claude/tests/draft-flow-guard-approved-dir-smoke.sh +234 -0
- package/.claude/tests/draft-flow-guard-smoke.sh +194 -0
- package/.claude/tests/dual-mode-portability-smoke.sh +131 -0
- package/.claude/tests/effective-hook-matrix-smoke.sh +261 -0
- package/.claude/tests/enforcement-mismatch-smoke.sh +263 -0
- package/.claude/tests/fixtures/cascade-sample.jsonl +9 -0
- package/.claude/tests/fixtures/next-actions/case-clean.md +14 -0
- package/.claude/tests/fixtures/next-actions/case-with-red.md +16 -0
- package/.claude/tests/fixtures/next-actions/case-with-yellow-only.md +14 -0
- package/.claude/tests/fixtures/normal-broken-scatter.jsonl +5 -0
- package/.claude/tests/fixtures/task-71/blocker-baseline.tsv +24 -0
- package/.claude/tests/fixtures/task-71/settings-inventory.tsv +37 -0
- package/.claude/tests/fixtures/transcript-50pct.jsonl +2 -0
- package/.claude/tests/fixtures/transcript-60pct.jsonl +2 -0
- package/.claude/tests/fixtures/transcript-80pct.jsonl +2 -0
- package/.claude/tests/fixtures/transcript-95pct.jsonl +2 -0
- package/.claude/tests/fixtures/workflow-guard/case-2-mid.json +21 -0
- package/.claude/tests/fixtures/workflow-guard/case-3-blocked.json +33 -0
- package/.claude/tests/fixtures/workflow-guard/case-4-clean.json +27 -0
- package/.claude/tests/fixtures/workflow-guard/case-8-modify.json +23 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-1.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-2.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-3.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-4.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-5.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-6.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-7.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-8.json +1 -0
- package/.claude/tests/gateguard-smoke.sh +213 -0
- package/.claude/tests/git-deny-mainline-policy-smoke.sh +222 -0
- package/.claude/tests/harness-audit-c-batch-smoke.sh +270 -0
- package/.claude/tests/harness-audit-compare-smoke.sh +186 -0
- package/.claude/tests/harness-audit-pipeline-health-smoke.sh +326 -0
- package/.claude/tests/harness-config-local-smoke.sh +232 -0
- package/.claude/tests/hc-config-git-policy-smoke.sh +241 -0
- package/.claude/tests/hc-config-key-parity-smoke.sh +149 -0
- package/.claude/tests/hc-config-migration-smoke.sh +251 -0
- package/.claude/tests/hc-config-script-smoke.sh +1106 -0
- package/.claude/tests/hc-config-tui-smoke.sh +801 -0
- package/.claude/tests/hc-config-web-ui-smoke.sh +3224 -0
- package/.claude/tests/hook-cwd-robustness-smoke.sh +206 -0
- package/.claude/tests/hook-frequency-tweaks-smoke.sh +312 -0
- package/.claude/tests/improvement-proposal-cache-smoke.sh +238 -0
- package/.claude/tests/install-sh-overwrite-all-smoke.sh +274 -0
- package/.claude/tests/install-sh-regen-settings-smoke.sh +301 -0
- package/.claude/tests/install-sh-sync-drift-smoke.sh +285 -0
- package/.claude/tests/layer-b-context-isolation-smoke.sh +392 -0
- package/.claude/tests/list-md-plan-first-reminder-smoke.sh +313 -0
- package/.claude/tests/loop-auto-progress-smoke.sh +372 -0
- package/.claude/tests/loop-confirmation-detector-smoke.sh +674 -0
- package/.claude/tests/new-task-batch-update-smoke.sh +664 -0
- package/.claude/tests/next-actions-hooks-smoke.sh +283 -0
- package/.claude/tests/npx-cli-smoke.sh +696 -0
- package/.claude/tests/observe-flock-smoke.sh +223 -0
- package/.claude/tests/observe-jq-parse-smoke.sh +250 -0
- package/.claude/tests/observe-repair-smoke.sh +475 -0
- package/.claude/tests/observe-rotate-smoke.sh +428 -0
- package/.claude/tests/observe-subagent-stop-smoke.sh +476 -0
- package/.claude/tests/parallel-subagent-reminder-smoke.sh +918 -0
- package/.claude/tests/project-root-smoke.sh +140 -0
- package/.claude/tests/project-rules-protection-smoke.sh +199 -0
- package/.claude/tests/review-required-min-count-smoke.sh +286 -0
- package/.claude/tests/reviewer-count-guard-smoke.sh +490 -0
- package/.claude/tests/rule-architecture-smoke.sh +418 -0
- package/.claude/tests/rule-change-draft-flow-guard-smoke.sh +343 -0
- package/.claude/tests/run-all-smokes.sh +340 -0
- package/.claude/tests/session-help-surface-smoke.sh +224 -0
- package/.claude/tests/session-start-parallel-smoke.sh +165 -0
- package/.claude/tests/sessionstart-budget-smoke.sh +185 -0
- package/.claude/tests/sessionstart-footprint-smoke.sh +258 -0
- package/.claude/tests/settings-dispatcher-baseline-smoke.sh +709 -0
- package/.claude/tests/settings-generation-feature-pruning-smoke.sh +196 -0
- package/.claude/tests/stale-harness-detect-smoke.sh +974 -0
- package/.claude/tests/statusline-smoke.sh +180 -0
- package/.claude/tests/task-rule-guard-smoke.sh +656 -0
- package/.claude/tests/tool-call-slip-detector-smoke.sh +101 -0
- package/.claude/tests/wave-precheck-template-smoke.sh +159 -0
- package/.claude/tests/why-x5-violation-detect-smoke.sh +157 -0
- package/.claude/tests/workflow-guard-smoke.sh +266 -0
- package/CLAUDE.md +75 -0
- package/LICENSE +21 -0
- package/README.md +790 -0
- package/bin/cli.js +395 -0
- package/docs/INVENTORY.md +163 -0
- package/install.sh +769 -0
- package/package.json +25 -0
|
@@ -0,0 +1,801 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# .claude/tests/hc-config-tui-smoke.sh — task-48 (TUI 化 + metadata 表示) smoke test
|
|
3
|
+
#
|
|
4
|
+
# 目的:
|
|
5
|
+
# hc-config.sh TUI 化 + key metadata 表示 (task-48) の smoke test。
|
|
6
|
+
# - lib/hc-config-metadata.sh (description / effect / category)
|
|
7
|
+
# - hc-config.sh --list 説明列拡張 / --verbose / --show-default
|
|
8
|
+
# - 矢印キー TUI (TTY 必須、render seam を非 TTY で検証) + 非 TTY 番号選択 fallback
|
|
9
|
+
#
|
|
10
|
+
# iter1 review fixes (本 commit、6 reviewer CRIT/HIGH/MED 反映):
|
|
11
|
+
# C2 : Case 6 の env が pipe 先 bash に渡らない偽陽性を修正 (env を bash 側に置く)。
|
|
12
|
+
# H7 : 番号 menu 経由の [y/N]=N rollback 検証 case 追加 (yml 無変化 assert)。
|
|
13
|
+
# H8 : 空 yml の --list 挙動 (exit 0) 検証 case 追加。
|
|
14
|
+
# H9 : Case 5/6 を「非 TTY pipe で numeric menu が実出力される」振る舞い検証中心化、
|
|
15
|
+
# `[ -t 0 ]` 汎用 grep を除去しターゲットを絞る。
|
|
16
|
+
# H10 : Case 7 を「yml inline comment と metadata description の包含一致」(drift 検出) に変更。
|
|
17
|
+
# H11 : TUI render seam (_tui_render) を非 TTY で呼び選択行 `> <key>` 出力を検証する case 追加。
|
|
18
|
+
# 完全な ↑↓ pty simulate は Phase 2 defer (コメント明記)。
|
|
19
|
+
# H12 : Case 1 に description 最低文字数 / effect != description 先頭 substring / category 6 分類検証を追加。
|
|
20
|
+
# H13 : Case 1 に yml 実 key 数 == metadata key 総数 の双方向一致検証を追加。
|
|
21
|
+
# MED : Case 3/4 に代表 key の description 内容検証、--show-default の DEFAULT 列検証、
|
|
22
|
+
# --verbose --show-default 3 引数の無害性、ANSI escape 値の --list exit 0、
|
|
23
|
+
# FORCE_NUMERIC 判定の "1" 限定 を追加。
|
|
24
|
+
#
|
|
25
|
+
# 設計:
|
|
26
|
+
# - subshell 関数 ( set -uo pipefail; ... ) で各 case を隔離
|
|
27
|
+
# - PASS/FAIL カウンタ + 結果出力 + 全 PASS で exit 0
|
|
28
|
+
#
|
|
29
|
+
# 重要制約:
|
|
30
|
+
# - file-top に set -euo pipefail を書かない (feedback_set_e_in_sourced_libs 規範)
|
|
31
|
+
# - BSD/GNU bash 両対応 (macOS bash 3.2 + Linux bash 5.x)
|
|
32
|
+
# - 一時 yml は /tmp/ に作成、EXIT trap で cleanup
|
|
33
|
+
|
|
34
|
+
set -uo pipefail
|
|
35
|
+
|
|
36
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
37
|
+
REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
|
38
|
+
HC_CONFIG_SCRIPT="${REPO_ROOT}/.claude/scripts/hc-config.sh"
|
|
39
|
+
HC_CONFIG_YML="${REPO_ROOT}/.claude/harness-config.yml"
|
|
40
|
+
HC_CONFIG_METADATA_LIB="${REPO_ROOT}/.claude/scripts/lib/hc-config-metadata.sh"
|
|
41
|
+
|
|
42
|
+
# tmp dir (cleanup on exit)
|
|
43
|
+
TMP_DIR="$(mktemp -d "/tmp/hc-config-tui-smoke.XXXXXX")"
|
|
44
|
+
trap 'rm -rf "$TMP_DIR"' EXIT
|
|
45
|
+
|
|
46
|
+
PASS=0
|
|
47
|
+
FAIL=0
|
|
48
|
+
FAILED_CASES=""
|
|
49
|
+
|
|
50
|
+
# --- helpers ---
|
|
51
|
+
|
|
52
|
+
_record() {
|
|
53
|
+
local result="$1"
|
|
54
|
+
local case_id="$2"
|
|
55
|
+
local desc="$3"
|
|
56
|
+
if [ "$result" = "PASS" ]; then
|
|
57
|
+
printf ' PASS Case %s: %s\n' "$case_id" "$desc"
|
|
58
|
+
PASS=$((PASS + 1))
|
|
59
|
+
else
|
|
60
|
+
printf ' FAIL Case %s: %s\n' "$case_id" "$desc"
|
|
61
|
+
FAIL=$((FAIL + 1))
|
|
62
|
+
FAILED_CASES="${FAILED_CASES} ${case_id}"
|
|
63
|
+
fi
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# timeout fallback (BSD / macOS で `timeout` 不在の環境向け)
|
|
67
|
+
# iter1 注意: 旧 fallback は `"$@" &` で対象を background 化していたため、
|
|
68
|
+
# stdin pipe を食わせる case (番号 menu の編集 path 検証等) で stdin が detach され
|
|
69
|
+
# 入力が届かず偽 PASS / 偽 FAIL になっていた。
|
|
70
|
+
# perl の alarm + exec は stdin を保持したまま実時間 timeout を提供する
|
|
71
|
+
# (perl は macOS / Linux に標準搭載)。perl も無ければ無 timeout で実行 (script は
|
|
72
|
+
# `5`/`q`/EOF で自己終了するため stdin EOF で確実に止まる)。
|
|
73
|
+
if ! command -v timeout >/dev/null 2>&1; then
|
|
74
|
+
if command -v perl >/dev/null 2>&1; then
|
|
75
|
+
timeout() {
|
|
76
|
+
local sec="$1"; shift
|
|
77
|
+
# alarm shift で sec 秒後に SIGALRM、exec で対象に置換 (stdin/stdout 継承)
|
|
78
|
+
perl -e 'alarm shift; exec @ARGV or exit 127' "$sec" "$@"
|
|
79
|
+
}
|
|
80
|
+
else
|
|
81
|
+
timeout() {
|
|
82
|
+
# 無 timeout fallback: stdin を foreground で保持して実行
|
|
83
|
+
shift
|
|
84
|
+
"$@"
|
|
85
|
+
}
|
|
86
|
+
fi
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
# 全 key を harness-config.yml から抽出するヘルパー
|
|
90
|
+
# MED fix: hc-config.sh の _yml_list_keys と同一 regex に統一
|
|
91
|
+
# (^[a-z_][a-zA-Z0-9_]*: 行頭アンカー、インデント非許容)。
|
|
92
|
+
# format: KEY1 KEY2 KEY3 ... (改行区切り)
|
|
93
|
+
#
|
|
94
|
+
# task-69: HC_TUI_SMOKE_EXCLUDE_KEYS 撤廃。task-60 Step 5 iter 2 H5 で暫定 exclude していた
|
|
95
|
+
# `harness_version` / `stale_harness_markers` / `feature_stale_harness_detect_enabled` の 3 key は
|
|
96
|
+
# task-69 Step 2 で `lib/hc-config-metadata.sh` に正規登録 (新 category harness_meta) され、
|
|
97
|
+
# `feature_reviewer_count_guard_enabled` も feature_toggle に追加された。
|
|
98
|
+
# yml key 数 == metadata key 数 の双方向一致は Case 1 が動的に検証するため hardcode 不要。
|
|
99
|
+
# (task-69 Step 8: key 数は _get_all_config_keys で動的計算、fixed count は持たない)
|
|
100
|
+
_get_all_config_keys() {
|
|
101
|
+
grep -E '^[a-z_][a-zA-Z0-9_]*:' "${HC_CONFIG_YML}" \
|
|
102
|
+
| sed -E 's/:.*$//'
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
# task-69: exclude 撤廃に伴い filtered 版は素の _get_all_config_keys と同義 (後方互換 alias)。
|
|
106
|
+
_get_all_config_keys_filtered() {
|
|
107
|
+
_get_all_config_keys
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
# hc-config.sh の TUI 関数を非 TTY で呼ぶための sourceable 変種を生成 (H11 render seam 用)。
|
|
111
|
+
# 末尾の `main "$@"` 呼び出しのみ除去して source する (関数定義はそのまま、副作用なし)。
|
|
112
|
+
_make_sourceable_hcconfig() {
|
|
113
|
+
local out="$1"
|
|
114
|
+
# ta 注記: 末尾の `main "$@"` 呼び出し行のみ除去して source 可能にする (関数定義は温存)。
|
|
115
|
+
# grep pattern を空白許容 (`^[[:space:]]*main[[:space:]]+"\$@"[[:space:]]*$`) にして、
|
|
116
|
+
# 将来 hc-config.sh の末尾呼び出しがインデント / 末尾空白付きになっても確実に除去する。
|
|
117
|
+
grep -vE '^[[:space:]]*main[[:space:]]+"\$@"[[:space:]]*$' "${HC_CONFIG_SCRIPT}" > "$out"
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
# ============================================================
|
|
121
|
+
# Case 1: metadata 完全性 — 全 yml key に description + effect、双方向一致、最低品質
|
|
122
|
+
# (key 数は yml から動的取得、hardcode しない)
|
|
123
|
+
# ============================================================
|
|
124
|
+
# H12 + H13: description 最低文字数 / effect != description 先頭 substring /
|
|
125
|
+
# category 7 分類 (task-69) / yml key 数 == metadata key 総数。
|
|
126
|
+
_case_1() (
|
|
127
|
+
set -uo pipefail
|
|
128
|
+
|
|
129
|
+
if [ ! -f "${HC_CONFIG_METADATA_LIB}" ]; then
|
|
130
|
+
printf 'Case 1: lib/hc-config-metadata.sh not found\n' >&2
|
|
131
|
+
return 1
|
|
132
|
+
fi
|
|
133
|
+
# shellcheck disable=SC1090
|
|
134
|
+
source "${HC_CONFIG_METADATA_LIB}"
|
|
135
|
+
|
|
136
|
+
local all_keys
|
|
137
|
+
# task-60 Step 5 iter 2 H5 fix: Case 1 は filtered 版を使用 (exclude key を除外して評価)。
|
|
138
|
+
all_keys="$(_get_all_config_keys_filtered)"
|
|
139
|
+
local yml_count meta_count missing=0
|
|
140
|
+
yml_count=$(printf '%s\n' "$all_keys" | grep -c .)
|
|
141
|
+
|
|
142
|
+
# 有効 category 集合 (task-69 で harness_meta 追加 → 7 分類)
|
|
143
|
+
local valid_cats="保護パス ファイル配置 state_dir Gate/Confidence feature_toggle reviewer_control harness_meta"
|
|
144
|
+
|
|
145
|
+
while IFS= read -r key; do
|
|
146
|
+
[ -z "$key" ] && continue
|
|
147
|
+
local desc effect cat
|
|
148
|
+
desc="$(hc_metadata_description "$key" 2>/dev/null || true)"
|
|
149
|
+
effect="$(hc_metadata_effect "$key" 2>/dev/null || true)"
|
|
150
|
+
cat="$(hc_metadata_category "$key" 2>/dev/null || true)"
|
|
151
|
+
|
|
152
|
+
# description 存在 + 最低文字数 (>= 8、H12)
|
|
153
|
+
if [ -z "$desc" ]; then
|
|
154
|
+
printf 'Case 1: missing description for key: %s\n' "$key" >&2
|
|
155
|
+
missing=$((missing + 1))
|
|
156
|
+
elif [ "${#desc}" -lt 8 ]; then
|
|
157
|
+
printf 'Case 1: description too short (<8) for key: %s (%s)\n' "$key" "$desc" >&2
|
|
158
|
+
missing=$((missing + 1))
|
|
159
|
+
fi
|
|
160
|
+
# effect 存在
|
|
161
|
+
if [ -z "$effect" ]; then
|
|
162
|
+
printf 'Case 1: missing effect for key: %s\n' "$key" >&2
|
|
163
|
+
missing=$((missing + 1))
|
|
164
|
+
fi
|
|
165
|
+
# H12: effect が description の先頭 substring でない (CSV/TSV 誤 parse 検出)
|
|
166
|
+
# 誤 parse 時は effect が description の途中切れ断片になりがち。
|
|
167
|
+
if [ -n "$desc" ] && [ -n "$effect" ]; then
|
|
168
|
+
case "$desc" in
|
|
169
|
+
"${effect}"*)
|
|
170
|
+
printf 'Case 1: effect is a leading substring of description for %s (parse corruption?)\n' "$key" >&2
|
|
171
|
+
missing=$((missing + 1))
|
|
172
|
+
;;
|
|
173
|
+
esac
|
|
174
|
+
fi
|
|
175
|
+
# H12: category が 6 分類のいずれか
|
|
176
|
+
case " $valid_cats " in
|
|
177
|
+
*" $cat "*) : ;;
|
|
178
|
+
*)
|
|
179
|
+
printf 'Case 1: invalid/empty category for key: %s (got: %s)\n' "$key" "$cat" >&2
|
|
180
|
+
missing=$((missing + 1))
|
|
181
|
+
;;
|
|
182
|
+
esac
|
|
183
|
+
done <<< "$all_keys"
|
|
184
|
+
|
|
185
|
+
# H13: yml 実 key 数 == metadata key 総数 (双方向一致)
|
|
186
|
+
# task-78 Step 1: label_ja (5 列目) 追加で NF==5 になったため NF>=4 に緩和 (key 列の抽出に列数は不問)
|
|
187
|
+
meta_count=$(_hc_metadata_table | awk -F'\t' 'NF>=4 {print $1}' | grep -c .)
|
|
188
|
+
if [ "$yml_count" -ne "$meta_count" ]; then
|
|
189
|
+
printf 'Case 1: key count mismatch: yml=%d metadata=%d\n' "$yml_count" "$meta_count" >&2
|
|
190
|
+
# yml にあって metadata に無い key (および逆)
|
|
191
|
+
local meta_keys
|
|
192
|
+
meta_keys=$(_hc_metadata_table | awk -F'\t' 'NF>=4 {print $1}')
|
|
193
|
+
printf 'Case 1: in yml not in metadata:\n' >&2
|
|
194
|
+
comm -23 <(printf '%s\n' "$all_keys" | sort) <(printf '%s\n' "$meta_keys" | sort) >&2
|
|
195
|
+
printf 'Case 1: in metadata not in yml:\n' >&2
|
|
196
|
+
comm -13 <(printf '%s\n' "$all_keys" | sort) <(printf '%s\n' "$meta_keys" | sort) >&2
|
|
197
|
+
missing=$((missing + 1))
|
|
198
|
+
fi
|
|
199
|
+
|
|
200
|
+
[ "$missing" -eq 0 ]
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
# ============================================================
|
|
204
|
+
# Case 2: category グルーピング — 7 category 全 key 分類 (task-69)、未分類 key 0
|
|
205
|
+
# ============================================================
|
|
206
|
+
_case_2() (
|
|
207
|
+
set -uo pipefail
|
|
208
|
+
|
|
209
|
+
if [ ! -f "${HC_CONFIG_METADATA_LIB}" ]; then
|
|
210
|
+
printf 'Case 2: lib/hc-config-metadata.sh not found\n' >&2
|
|
211
|
+
return 1
|
|
212
|
+
fi
|
|
213
|
+
# shellcheck disable=SC1090
|
|
214
|
+
source "${HC_CONFIG_METADATA_LIB}"
|
|
215
|
+
|
|
216
|
+
local expected_categories="保護パス ファイル配置 state_dir Gate/Confidence feature_toggle reviewer_control harness_meta"
|
|
217
|
+
local missing_categories=0
|
|
218
|
+
|
|
219
|
+
for cat in $expected_categories; do
|
|
220
|
+
if ! hc_metadata_keys_by_category "$cat" 2>/dev/null | grep -q '.'; then
|
|
221
|
+
printf 'Case 2: category not found or empty: %s\n' "$cat" >&2
|
|
222
|
+
missing_categories=$((missing_categories + 1))
|
|
223
|
+
fi
|
|
224
|
+
done
|
|
225
|
+
|
|
226
|
+
local all_keys
|
|
227
|
+
# task-60 Step 5 iter 2 H5 fix: Case 2 は filtered 版を使用 (exclude key を除外して評価)。
|
|
228
|
+
all_keys="$(_get_all_config_keys_filtered)"
|
|
229
|
+
local unclassified=0
|
|
230
|
+
|
|
231
|
+
while IFS= read -r key; do
|
|
232
|
+
[ -z "$key" ] && continue
|
|
233
|
+
local cat
|
|
234
|
+
cat="$(hc_metadata_category "$key" 2>/dev/null || true)"
|
|
235
|
+
if [ -z "$cat" ]; then
|
|
236
|
+
printf 'Case 2: key has no category: %s\n' "$key" >&2
|
|
237
|
+
unclassified=$((unclassified + 1))
|
|
238
|
+
fi
|
|
239
|
+
done <<< "$all_keys"
|
|
240
|
+
|
|
241
|
+
[ "$missing_categories" -eq 0 ] && [ "$unclassified" -eq 0 ]
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
# ============================================================
|
|
245
|
+
# Case 3: --list 説明列拡張 — 説明列ヘッダー + 代表 key の description 内容
|
|
246
|
+
# ============================================================
|
|
247
|
+
# MED: header keyword だけでなく代表 key (confidence_threshold) の description が data 行に含まれる。
|
|
248
|
+
_case_3() (
|
|
249
|
+
set -uo pipefail
|
|
250
|
+
|
|
251
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
252
|
+
printf 'Case 3: hc-config.sh not executable\n' >&2
|
|
253
|
+
return 1
|
|
254
|
+
fi
|
|
255
|
+
|
|
256
|
+
local output exit_code
|
|
257
|
+
output="$(bash "${HC_CONFIG_SCRIPT}" --list 2>/dev/null)"
|
|
258
|
+
exit_code=$?
|
|
259
|
+
|
|
260
|
+
if [ $exit_code -ne 0 ]; then
|
|
261
|
+
printf 'Case 3: --list returned exit code %d\n' "$exit_code" >&2
|
|
262
|
+
return 1
|
|
263
|
+
fi
|
|
264
|
+
# 説明列ヘッダー
|
|
265
|
+
if ! printf '%s' "$output" | grep -q '説明'; then
|
|
266
|
+
printf 'Case 3: --list does not contain 説明 column header\n' >&2
|
|
267
|
+
return 1
|
|
268
|
+
fi
|
|
269
|
+
# MED: 代表 key confidence_threshold の description 主要語が data 行に含まれる
|
|
270
|
+
if ! printf '%s' "$output" | grep '^confidence_threshold' | grep -q 'Confidence Gate'; then
|
|
271
|
+
printf 'Case 3: confidence_threshold data row missing its description content\n' >&2
|
|
272
|
+
return 1
|
|
273
|
+
fi
|
|
274
|
+
return 0
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
# ============================================================
|
|
278
|
+
# Case 4: --list --verbose — 変更効果列 + 代表 key の effect 内容
|
|
279
|
+
# ============================================================
|
|
280
|
+
_case_4() (
|
|
281
|
+
set -uo pipefail
|
|
282
|
+
|
|
283
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
284
|
+
printf 'Case 4: hc-config.sh not executable\n' >&2
|
|
285
|
+
return 1
|
|
286
|
+
fi
|
|
287
|
+
|
|
288
|
+
local output exit_code
|
|
289
|
+
output="$(bash "${HC_CONFIG_SCRIPT}" --list --verbose 2>/dev/null)"
|
|
290
|
+
exit_code=$?
|
|
291
|
+
|
|
292
|
+
if [ $exit_code -ne 0 ]; then
|
|
293
|
+
printf 'Case 4: --list --verbose returned exit code %d\n' "$exit_code" >&2
|
|
294
|
+
return 1
|
|
295
|
+
fi
|
|
296
|
+
if ! printf '%s' "$output" | grep -q '変更効果'; then
|
|
297
|
+
printf 'Case 4: --list --verbose does not contain 変更効果 column header\n' >&2
|
|
298
|
+
return 1
|
|
299
|
+
fi
|
|
300
|
+
# MED: 代表 key の effect 主要語が出力に含まれる
|
|
301
|
+
if ! printf '%s' "$output" | grep -q '上げると subagent の completion confidence'; then
|
|
302
|
+
printf 'Case 4: confidence_threshold effect content missing in --verbose\n' >&2
|
|
303
|
+
return 1
|
|
304
|
+
fi
|
|
305
|
+
return 0
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
# ============================================================
|
|
309
|
+
# Case 5: 非 TTY pipe で numeric menu が実出力される (振る舞い検証、H9)
|
|
310
|
+
# ============================================================
|
|
311
|
+
# H9: symbol grep を _cmd_interactive_numeric にターゲット絞り + pipe 経由の実出力 (numeric menu) を検証。
|
|
312
|
+
# `[ -t 0 ]` 汎用 grep は除去。
|
|
313
|
+
_case_5() (
|
|
314
|
+
set -uo pipefail
|
|
315
|
+
|
|
316
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
317
|
+
printf 'Case 5: hc-config.sh not executable\n' >&2
|
|
318
|
+
return 1
|
|
319
|
+
fi
|
|
320
|
+
|
|
321
|
+
# 実装 seam: numeric fallback 関数が存在
|
|
322
|
+
if ! grep -q '_cmd_interactive_numeric' "${HC_CONFIG_SCRIPT}"; then
|
|
323
|
+
printf 'Case 5: _cmd_interactive_numeric not implemented\n' >&2
|
|
324
|
+
return 1
|
|
325
|
+
fi
|
|
326
|
+
|
|
327
|
+
# 振る舞い: 非 TTY pipe で numeric menu が実出力される
|
|
328
|
+
local output
|
|
329
|
+
output="$(printf 'q\n' | timeout 5 bash "${HC_CONFIG_SCRIPT}" 2>/dev/null || true)"
|
|
330
|
+
if ! printf '%s' "$output" | grep -q 'hc-config interactive menu'; then
|
|
331
|
+
printf 'Case 5: numeric menu not shown in non-TTY (pipe) context\n' >&2
|
|
332
|
+
return 1
|
|
333
|
+
fi
|
|
334
|
+
# H5: 非 TTY fallback 案内行も出る
|
|
335
|
+
if ! printf '%s' "$output" | grep -q '非 TTY 環境のため番号選択モード'; then
|
|
336
|
+
printf 'Case 5: non-TTY fallback notice missing\n' >&2
|
|
337
|
+
return 1
|
|
338
|
+
fi
|
|
339
|
+
return 0
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
# ============================================================
|
|
343
|
+
# Case 6: HC_HC_CONFIG_FORCE_NUMERIC=1 で強制番号選択 (env を bash 側に付与、C2)
|
|
344
|
+
# ============================================================
|
|
345
|
+
# C2 fix: 旧実装は env を pipe 元の printf に付与しており bash に渡らず偽陽性だった。
|
|
346
|
+
# env を pipe 先 bash 側に置く。
|
|
347
|
+
# 制約 (Case 6 コメント): 非 TTY pipe では FORCE_NUMERIC 無しでも numeric に降格するため、
|
|
348
|
+
# 「TTY 環境での FORCE_NUMERIC による強制降格」は expect/pty なしには自動検証不可。
|
|
349
|
+
# 本 case は (1) 実装シンボル存在 + (2) env を bash 側に渡して numeric menu が出る までを検証する。
|
|
350
|
+
_case_6() (
|
|
351
|
+
set -uo pipefail
|
|
352
|
+
|
|
353
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
354
|
+
printf 'Case 6: hc-config.sh not executable\n' >&2
|
|
355
|
+
return 1
|
|
356
|
+
fi
|
|
357
|
+
|
|
358
|
+
# 実装 seam: HC_HC_CONFIG_FORCE_NUMERIC が判定に使われている
|
|
359
|
+
if ! grep -q 'HC_HC_CONFIG_FORCE_NUMERIC' "${HC_CONFIG_SCRIPT}"; then
|
|
360
|
+
printf 'Case 6: HC_HC_CONFIG_FORCE_NUMERIC not implemented\n' >&2
|
|
361
|
+
return 1
|
|
362
|
+
fi
|
|
363
|
+
|
|
364
|
+
# C2: env を pipe 先 bash 側に置く (printf ではなく bash に付与)
|
|
365
|
+
local output
|
|
366
|
+
output="$(printf 'q\n' | HC_HC_CONFIG_FORCE_NUMERIC=1 timeout 5 bash "${HC_CONFIG_SCRIPT}" 2>/dev/null || true)"
|
|
367
|
+
if ! printf '%s' "$output" | grep -q 'hc-config interactive menu'; then
|
|
368
|
+
printf 'Case 6: HC_HC_CONFIG_FORCE_NUMERIC=1 did not produce numeric menu\n' >&2
|
|
369
|
+
return 1
|
|
370
|
+
fi
|
|
371
|
+
return 0
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
# ============================================================
|
|
375
|
+
# Case 7: metadata と yml inline comment の一致検証 (drift 検出、H10)
|
|
376
|
+
# ============================================================
|
|
377
|
+
# H10 fix: 旧 Case 7 は静的 hardcode への keyword match で tautology (動的抽出 regression 不検出)。
|
|
378
|
+
# inline comment を持つ key について「comment 主要語が metadata description に包含される」を検証。
|
|
379
|
+
_case_7() (
|
|
380
|
+
set -uo pipefail
|
|
381
|
+
|
|
382
|
+
if [ ! -f "${HC_CONFIG_METADATA_LIB}" ]; then
|
|
383
|
+
printf 'Case 7: lib/hc-config-metadata.sh not found\n' >&2
|
|
384
|
+
return 1
|
|
385
|
+
fi
|
|
386
|
+
# shellcheck disable=SC1090
|
|
387
|
+
source "${HC_CONFIG_METADATA_LIB}"
|
|
388
|
+
|
|
389
|
+
# inline comment を持つ代表 key (yml の `key: val # comment` から comment を抽出)。
|
|
390
|
+
# comment 主要語 (最初の token) が metadata description に含まれることを確認 (drift 検出)。
|
|
391
|
+
# ta 注記: check_keys は harness-config.yml で `# comment` を持つ key である前提。
|
|
392
|
+
# comment を持たない key を入れると comment 抽出が空になり「test key invalid」で FAIL する
|
|
393
|
+
# (本 case の主旨は drift 検出であり、comment 不在 key の検証ではないため意図的に除外)。
|
|
394
|
+
local check_keys="review_iteration_max feature_loop_mode_enforcement_enabled feature_draft_flow_guard_enabled"
|
|
395
|
+
local mismatch=0
|
|
396
|
+
local key
|
|
397
|
+
for key in $check_keys; do
|
|
398
|
+
local comment desc token
|
|
399
|
+
# yml から inline comment 抽出 (`# ` 以降)
|
|
400
|
+
comment="$(grep -E "^${key}:" "${HC_CONFIG_YML}" | head -n 1 | sed -n 's/.*#[[:space:]]*//p')"
|
|
401
|
+
if [ -z "$comment" ]; then
|
|
402
|
+
printf 'Case 7: no inline comment found for %s (test key invalid)\n' "$key" >&2
|
|
403
|
+
mismatch=$((mismatch + 1))
|
|
404
|
+
continue
|
|
405
|
+
fi
|
|
406
|
+
desc="$(hc_metadata_description "$key" 2>/dev/null || true)"
|
|
407
|
+
if [ -z "$desc" ]; then
|
|
408
|
+
printf 'Case 7: no metadata description for %s\n' "$key" >&2
|
|
409
|
+
mismatch=$((mismatch + 1))
|
|
410
|
+
continue
|
|
411
|
+
fi
|
|
412
|
+
# comment の主要語 (最初の語、whitespace/区切りまで) を取り、description が含むか確認。
|
|
413
|
+
# 記号で始まる comment (例 "loop-confirmation-detector + ...") は最初の単語を token とする。
|
|
414
|
+
token="$(printf '%s' "$comment" | awk '{print $1}')"
|
|
415
|
+
if [ -z "$token" ]; then
|
|
416
|
+
printf 'Case 7: empty token from comment for %s\n' "$key" >&2
|
|
417
|
+
mismatch=$((mismatch + 1))
|
|
418
|
+
continue
|
|
419
|
+
fi
|
|
420
|
+
if ! printf '%s' "$desc" | grep -qF "$token"; then
|
|
421
|
+
printf 'Case 7: drift detected — %s comment token "%s" not in metadata description\n' "$key" "$token" >&2
|
|
422
|
+
printf ' comment: %s\n desc : %s\n' "$comment" "$desc" >&2
|
|
423
|
+
mismatch=$((mismatch + 1))
|
|
424
|
+
fi
|
|
425
|
+
done
|
|
426
|
+
|
|
427
|
+
[ "$mismatch" -eq 0 ]
|
|
428
|
+
)
|
|
429
|
+
|
|
430
|
+
# ============================================================
|
|
431
|
+
# Case 8: 空 yml の --list が exit 0 (異常終了しない、H8)
|
|
432
|
+
# ============================================================
|
|
433
|
+
_case_8() (
|
|
434
|
+
set -uo pipefail
|
|
435
|
+
|
|
436
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
437
|
+
printf 'Case 8: hc-config.sh not executable\n' >&2
|
|
438
|
+
return 1
|
|
439
|
+
fi
|
|
440
|
+
|
|
441
|
+
local empty_yml="${TMP_DIR}/empty.yml"
|
|
442
|
+
printf '' > "$empty_yml"
|
|
443
|
+
|
|
444
|
+
local exit_code
|
|
445
|
+
bash "${HC_CONFIG_SCRIPT}" --config "$empty_yml" --list >/dev/null 2>&1
|
|
446
|
+
exit_code=$?
|
|
447
|
+
if [ "$exit_code" -ne 0 ]; then
|
|
448
|
+
printf 'Case 8: --list on empty yml returned exit %d (expected 0)\n' "$exit_code" >&2
|
|
449
|
+
return 1
|
|
450
|
+
fi
|
|
451
|
+
return 0
|
|
452
|
+
)
|
|
453
|
+
|
|
454
|
+
# ============================================================
|
|
455
|
+
# Case 9: 番号 menu 経由 [y/N]=N (空) で yml が変更されない (rollback 検証、H7)
|
|
456
|
+
# ============================================================
|
|
457
|
+
# H7: TUI は TTY 必須で自動不可なため、番号選択 menu の編集 path で検証。
|
|
458
|
+
# key 編集 (option 2) → 新値入力 → 確認で N → yml 無変化 を diff で assert。
|
|
459
|
+
# 番号 menu の option 2 では「new value」入力後に即 cmd_set するため、
|
|
460
|
+
# "確認 N で rollback" を再現するには空入力 (skip) を使う。
|
|
461
|
+
# ここでは「新値を空入力で skip すれば書込みが起きず yml 無変化」を検証する。
|
|
462
|
+
_case_9() (
|
|
463
|
+
set -uo pipefail
|
|
464
|
+
|
|
465
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
466
|
+
printf 'Case 9: hc-config.sh not executable\n' >&2
|
|
467
|
+
return 1
|
|
468
|
+
fi
|
|
469
|
+
|
|
470
|
+
local test_yml="${TMP_DIR}/rollback.yml"
|
|
471
|
+
cp "${HC_CONFIG_YML}" "$test_yml"
|
|
472
|
+
local before
|
|
473
|
+
before="$(cat "$test_yml")"
|
|
474
|
+
|
|
475
|
+
# option 2 (key 編集) → key 名 → 新値を空入力 (skip = rollback 相当) → 5 (終了)
|
|
476
|
+
# qa MED-3: numeric menu の異常終了を `|| true` で握り潰さず exit code を確認する。
|
|
477
|
+
# numeric menu は `5` で正常終了 (exit 0) するため、非 0 は menu 自体の故障を示す。
|
|
478
|
+
# (TUI [y/N]=N rollback は pty 必須で Phase2 defer。本 case は numeric menu の
|
|
479
|
+
# 「空入力 skip で書込みが起きない」rollback 相当の振る舞いを検証する)
|
|
480
|
+
local menu_ec
|
|
481
|
+
printf '2\nreview_iteration_max\n\n5\n' \
|
|
482
|
+
| timeout 5 bash "${HC_CONFIG_SCRIPT}" --config "$test_yml" >/dev/null 2>&1
|
|
483
|
+
menu_ec=$?
|
|
484
|
+
if [ "$menu_ec" -ne 0 ]; then
|
|
485
|
+
printf 'Case 9: numeric menu exited non-zero (%d) — menu malfunction, not a clean skip\n' "$menu_ec" >&2
|
|
486
|
+
return 1
|
|
487
|
+
fi
|
|
488
|
+
|
|
489
|
+
local after
|
|
490
|
+
after="$(cat "$test_yml")"
|
|
491
|
+
if [ "$before" != "$after" ]; then
|
|
492
|
+
printf 'Case 9: yml changed despite skip (empty new value), rollback violated\n' >&2
|
|
493
|
+
diff <(printf '%s' "$before") <(printf '%s' "$after") >&2 || true
|
|
494
|
+
return 1
|
|
495
|
+
fi
|
|
496
|
+
return 0
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
# ============================================================
|
|
500
|
+
# Case 10: 番号 menu 経由 編集 → 新値あり で yml が実変更される (編集 path 振る舞い、H11 代替)
|
|
501
|
+
# ============================================================
|
|
502
|
+
# H11: 完全な TUI ↑↓ pty simulate は Phase 2 defer。本 case は numeric menu の編集 path の
|
|
503
|
+
# 「新値ありで実際に書き換わる」振る舞いを検証 (cmd_set 経路の end-to-end)。
|
|
504
|
+
_case_10() (
|
|
505
|
+
set -uo pipefail
|
|
506
|
+
|
|
507
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
508
|
+
printf 'Case 10: hc-config.sh not executable\n' >&2
|
|
509
|
+
return 1
|
|
510
|
+
fi
|
|
511
|
+
|
|
512
|
+
local test_yml="${TMP_DIR}/edit.yml"
|
|
513
|
+
cp "${HC_CONFIG_YML}" "$test_yml"
|
|
514
|
+
|
|
515
|
+
# option 2 → key → 新値 3 → 5 (終了)
|
|
516
|
+
printf '2\nreview_iteration_max\n3\n5\n' \
|
|
517
|
+
| timeout 5 bash "${HC_CONFIG_SCRIPT}" --config "$test_yml" >/dev/null 2>&1 || true
|
|
518
|
+
|
|
519
|
+
local newval
|
|
520
|
+
newval="$(bash "${HC_CONFIG_SCRIPT}" --config "$test_yml" --get review_iteration_max 2>/dev/null | tr -d '[:space:]')"
|
|
521
|
+
if [ "$newval" != "3" ]; then
|
|
522
|
+
printf 'Case 10: edit path did not persist new value (got: %s, expected 3)\n' "$newval" >&2
|
|
523
|
+
return 1
|
|
524
|
+
fi
|
|
525
|
+
return 0
|
|
526
|
+
)
|
|
527
|
+
|
|
528
|
+
# ============================================================
|
|
529
|
+
# Case 11: TUI render seam — _tui_render が選択行 `> <key>` を非 TTY で出力する (H11)
|
|
530
|
+
# ============================================================
|
|
531
|
+
# H11: 矢印キー入力の pty simulate は Phase 2 defer。本 case は描画関数 _tui_render を
|
|
532
|
+
# 非 TTY で直接呼び、選択 index の key が `> ` プレフィックス付きで出力されること、
|
|
533
|
+
# category 区切り行 (=== <cat> ... ===) が含まれることを検証する。
|
|
534
|
+
# ↑↓ ナビゲーションの動的検証は Phase 2 (pty) defer。
|
|
535
|
+
_case_11() (
|
|
536
|
+
set -uo pipefail
|
|
537
|
+
|
|
538
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
539
|
+
printf 'Case 11: hc-config.sh not executable\n' >&2
|
|
540
|
+
return 1
|
|
541
|
+
fi
|
|
542
|
+
|
|
543
|
+
local src="${TMP_DIR}/hc-config-src.sh"
|
|
544
|
+
_make_sourceable_hcconfig "$src"
|
|
545
|
+
|
|
546
|
+
# CONFIG_PATH 設定が必要な理由: _tui_render は内部で _get_current → _get_default を呼び、
|
|
547
|
+
# さらに effect panel で _yml_get_raw "$CONFIG_PATH" を参照する。未設定だと unbound で死ぬ。
|
|
548
|
+
# metadata を先 source する理由: _tui_order_keys_by_category / _tui_render が _meta_category /
|
|
549
|
+
# _meta_effect を呼ぶため、hc-config.sh より先に lib/hc-config-metadata.sh を source して
|
|
550
|
+
# hc_metadata_* 関数を可視化しておく必要がある (順序逆だと category 解決が全て空になる)。
|
|
551
|
+
|
|
552
|
+
# iter2 CRIT C-iter2-1 regression ガード (stdout 純度):
|
|
553
|
+
# _tui_order_keys_by_category の戻りが正確に yml key 数 (= yml top-level key の総数、動的) 行 かつ
|
|
554
|
+
# `^[a-z_]+=` ゴミ行 0 を assert。bash 3.2 local+cmdsubst 漏洩で `kc=...` 等が
|
|
555
|
+
# 混入すると total が膨らむ (例: ゴミ 73 行混入で total=147)。
|
|
556
|
+
local order_out yml_key_count order_total order_garbage
|
|
557
|
+
yml_key_count=$(_get_all_config_keys | grep -c .)
|
|
558
|
+
order_out="$(
|
|
559
|
+
# shellcheck disable=SC1090
|
|
560
|
+
source "${HC_CONFIG_METADATA_LIB}"
|
|
561
|
+
# shellcheck disable=SC1090
|
|
562
|
+
source "$src"
|
|
563
|
+
CONFIG_PATH="${HC_CONFIG_YML}"
|
|
564
|
+
local keys
|
|
565
|
+
keys=$(_yml_list_keys "$CONFIG_PATH")
|
|
566
|
+
_tui_order_keys_by_category "$keys"
|
|
567
|
+
)" || true
|
|
568
|
+
order_total=$(printf '%s\n' "$order_out" | grep -c .)
|
|
569
|
+
order_garbage=$(printf '%s\n' "$order_out" | grep -cE '^[a-z_]+=' || true)
|
|
570
|
+
if [ "$order_total" -ne "$yml_key_count" ]; then
|
|
571
|
+
printf 'Case 11: _tui_order_keys_by_category total=%d != yml key count=%d (stdout leak?)\n' \
|
|
572
|
+
"$order_total" "$yml_key_count" >&2
|
|
573
|
+
return 1
|
|
574
|
+
fi
|
|
575
|
+
if [ "$order_garbage" -ne 0 ]; then
|
|
576
|
+
printf 'Case 11: _tui_order_keys_by_category emitted %d garbage assignment lines (^[a-z_]+=)\n' \
|
|
577
|
+
"$order_garbage" >&2
|
|
578
|
+
printf '%s\n' "$order_out" | grep -E '^[a-z_]+=' | head -5 >&2
|
|
579
|
+
return 1
|
|
580
|
+
fi
|
|
581
|
+
|
|
582
|
+
# 別 bash で source して _tui_render を呼ぶ
|
|
583
|
+
local rendered
|
|
584
|
+
rendered="$(
|
|
585
|
+
# shellcheck disable=SC1090
|
|
586
|
+
source "${HC_CONFIG_METADATA_LIB}"
|
|
587
|
+
# shellcheck disable=SC1090
|
|
588
|
+
source "$src"
|
|
589
|
+
CONFIG_PATH="${HC_CONFIG_YML}"
|
|
590
|
+
local keys ordered
|
|
591
|
+
keys=$(_yml_list_keys "$CONFIG_PATH")
|
|
592
|
+
ordered=$(_tui_order_keys_by_category "$keys")
|
|
593
|
+
_tui_render "$ordered" 0 2>/dev/null
|
|
594
|
+
)" || true
|
|
595
|
+
|
|
596
|
+
# ANSI escape を strip して検査
|
|
597
|
+
local clean
|
|
598
|
+
clean="$(printf '%s' "$rendered" | sed -E "s/$(printf '\033')\[[0-9;]*[A-Za-z]//g")"
|
|
599
|
+
|
|
600
|
+
# iter2 CRIT C-iter2-2 regression ガード (stdout 純度):
|
|
601
|
+
# _tui_render の clean 出力に `kc=` / `cat_count=` のゴミ代入行が混入しない (negative assert)。
|
|
602
|
+
# bash 3.2 local+cmdsubst 漏洩で端末描画にゴミ行が混入すると TUI レイアウトが崩壊する。
|
|
603
|
+
if printf '%s\n' "$clean" | grep -qE '^(kc|cat_count)='; then
|
|
604
|
+
printf 'Case 11: _tui_render emitted garbage assignment lines (kc=/cat_count=) in output\n' >&2
|
|
605
|
+
printf '%s\n' "$clean" | grep -E '^(kc|cat_count)=' | head -5 >&2
|
|
606
|
+
return 1
|
|
607
|
+
fi
|
|
608
|
+
|
|
609
|
+
# sel=0 の先頭 key が `> ` 付きで出る
|
|
610
|
+
if ! printf '%s' "$clean" | grep -qE '^> [a-z_]'; then
|
|
611
|
+
printf 'Case 11: _tui_render did not emit a selected row (> <key>)\n' >&2
|
|
612
|
+
return 1
|
|
613
|
+
fi
|
|
614
|
+
# category 区切り行が含まれる (H3)
|
|
615
|
+
if ! printf '%s' "$clean" | grep -qE '=== .* keys\) ==='; then
|
|
616
|
+
printf 'Case 11: _tui_render did not emit category separator rows\n' >&2
|
|
617
|
+
return 1
|
|
618
|
+
fi
|
|
619
|
+
# effect panel (変更効果) が含まれる (H4 seam)
|
|
620
|
+
if ! printf '%s' "$clean" | grep -q '変更効果'; then
|
|
621
|
+
printf 'Case 11: _tui_render did not emit effect panel\n' >&2
|
|
622
|
+
return 1
|
|
623
|
+
fi
|
|
624
|
+
return 0
|
|
625
|
+
)
|
|
626
|
+
|
|
627
|
+
# ============================================================
|
|
628
|
+
# Case 12: --list --show-default で DEFAULT 列が出る + --verbose --show-default が無害 (MED)
|
|
629
|
+
# ============================================================
|
|
630
|
+
_case_12() (
|
|
631
|
+
set -uo pipefail
|
|
632
|
+
|
|
633
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
634
|
+
printf 'Case 12: hc-config.sh not executable\n' >&2
|
|
635
|
+
return 1
|
|
636
|
+
fi
|
|
637
|
+
|
|
638
|
+
# --show-default: DEFAULT 列
|
|
639
|
+
local out1 ec1
|
|
640
|
+
out1="$(bash "${HC_CONFIG_SCRIPT}" --list --show-default 2>/dev/null)"
|
|
641
|
+
ec1=$?
|
|
642
|
+
if [ $ec1 -ne 0 ]; then
|
|
643
|
+
printf 'Case 12: --list --show-default exit %d\n' "$ec1" >&2
|
|
644
|
+
return 1
|
|
645
|
+
fi
|
|
646
|
+
if ! printf '%s' "$out1" | grep -q 'DEFAULT'; then
|
|
647
|
+
printf 'Case 12: --show-default missing DEFAULT column\n' >&2
|
|
648
|
+
return 1
|
|
649
|
+
fi
|
|
650
|
+
|
|
651
|
+
# --verbose --show-default 3 引数: 第 3 引数が無視されてもエラーにならない
|
|
652
|
+
local ec2
|
|
653
|
+
bash "${HC_CONFIG_SCRIPT}" --list --verbose --show-default >/dev/null 2>&1
|
|
654
|
+
ec2=$?
|
|
655
|
+
if [ $ec2 -ne 0 ]; then
|
|
656
|
+
printf 'Case 12: --list --verbose --show-default returned exit %d (expected 0)\n' "$ec2" >&2
|
|
657
|
+
return 1
|
|
658
|
+
fi
|
|
659
|
+
return 0
|
|
660
|
+
)
|
|
661
|
+
|
|
662
|
+
# ============================================================
|
|
663
|
+
# Case 13: FORCE_NUMERIC 判定が "1" 限定 (=0/=false は強制しない、MED negative)
|
|
664
|
+
# ============================================================
|
|
665
|
+
# 非 TTY pipe では元々 numeric なので「TUI 側に行く」直接観測は不可。
|
|
666
|
+
# 本 case は判定ロジックが "1" 限定であることをコード上で検証 (`!= "1"` パターン)。
|
|
667
|
+
# 加えて FORCE_NUMERIC=0 / =false でも非 TTY なら numeric menu が出る (壊れない) ことを確認。
|
|
668
|
+
_case_13() (
|
|
669
|
+
set -uo pipefail
|
|
670
|
+
|
|
671
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
672
|
+
printf 'Case 13: hc-config.sh not executable\n' >&2
|
|
673
|
+
return 1
|
|
674
|
+
fi
|
|
675
|
+
|
|
676
|
+
# ロジックが "1" 限定 ( != "1" で TUI、== "1" で numeric強制) であることを確認
|
|
677
|
+
if ! grep -qE 'HC_HC_CONFIG_FORCE_NUMERIC:-.*!=[[:space:]]*"1"' "${HC_CONFIG_SCRIPT}"; then
|
|
678
|
+
printf 'Case 13: FORCE_NUMERIC dispatch is not gated on exact "1" value\n' >&2
|
|
679
|
+
return 1
|
|
680
|
+
fi
|
|
681
|
+
|
|
682
|
+
# =0 / =false でも非 TTY では numeric menu が壊れず出る
|
|
683
|
+
local out0 outf
|
|
684
|
+
out0="$(printf 'q\n' | HC_HC_CONFIG_FORCE_NUMERIC=0 timeout 5 bash "${HC_CONFIG_SCRIPT}" 2>/dev/null || true)"
|
|
685
|
+
outf="$(printf 'q\n' | HC_HC_CONFIG_FORCE_NUMERIC=false timeout 5 bash "${HC_CONFIG_SCRIPT}" 2>/dev/null || true)"
|
|
686
|
+
if ! printf '%s' "$out0" | grep -q 'hc-config interactive menu'; then
|
|
687
|
+
printf 'Case 13: FORCE_NUMERIC=0 broke non-TTY numeric menu\n' >&2
|
|
688
|
+
return 1
|
|
689
|
+
fi
|
|
690
|
+
if ! printf '%s' "$outf" | grep -q 'hc-config interactive menu'; then
|
|
691
|
+
printf 'Case 13: FORCE_NUMERIC=false broke non-TTY numeric menu\n' >&2
|
|
692
|
+
return 1
|
|
693
|
+
fi
|
|
694
|
+
return 0
|
|
695
|
+
)
|
|
696
|
+
|
|
697
|
+
# ============================================================
|
|
698
|
+
# Case 14: ANSI escape を含む値の --list が exit 0 (MED)
|
|
699
|
+
# ============================================================
|
|
700
|
+
_case_14() (
|
|
701
|
+
set -uo pipefail
|
|
702
|
+
|
|
703
|
+
if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
|
|
704
|
+
printf 'Case 14: hc-config.sh not executable\n' >&2
|
|
705
|
+
return 1
|
|
706
|
+
fi
|
|
707
|
+
|
|
708
|
+
local esc_yml="${TMP_DIR}/ansi.yml"
|
|
709
|
+
cp "${HC_CONFIG_YML}" "$esc_yml"
|
|
710
|
+
# qa MED-4: notify_sound は yml に既存のため、append すると重複 key で invalid yaml になり
|
|
711
|
+
# PyYAML validate が常に reject して本 case の主旨 (ANSI 値の --list が exit 0) を検証できない。
|
|
712
|
+
# 既存 notify_sound 行を事前削除してから ANSI 値付きで append し直す (重複回避)。
|
|
713
|
+
# ESC を含む値を notify_sound に設定 (double-quote 形式)
|
|
714
|
+
sed -i.bak '/^notify_sound:/d' "$esc_yml" && rm -f "${esc_yml}.bak"
|
|
715
|
+
printf '\nnotify_sound: "%sred%s"\n' "$(printf '\033')[31m" "$(printf '\033')[0m" >> "$esc_yml"
|
|
716
|
+
|
|
717
|
+
local ec
|
|
718
|
+
bash "${HC_CONFIG_SCRIPT}" --config "$esc_yml" --list >/dev/null 2>&1
|
|
719
|
+
ec=$?
|
|
720
|
+
if [ "$ec" -ne 0 ]; then
|
|
721
|
+
printf 'Case 14: --list with ANSI-escape value returned exit %d (expected 0)\n' "$ec" >&2
|
|
722
|
+
return 1
|
|
723
|
+
fi
|
|
724
|
+
return 0
|
|
725
|
+
)
|
|
726
|
+
|
|
727
|
+
# ============================================================
|
|
728
|
+
# テスト実行
|
|
729
|
+
# ============================================================
|
|
730
|
+
|
|
731
|
+
printf '\n=== hc-config-tui-smoke (task-48: 14 cases, iter1 review fixes) ===\n\n'
|
|
732
|
+
|
|
733
|
+
if _case_1 2>/dev/null; then _record PASS 1 "metadata 完全性 — 79 key description+effect, 双方向一致, category 7 分類, effect!=desc断片"
|
|
734
|
+
else _record FAIL 1 "metadata 完全性 — 79 key description+effect, 双方向一致, category 7 分類, effect!=desc断片"
|
|
735
|
+
fi
|
|
736
|
+
|
|
737
|
+
if _case_2 2>/dev/null; then _record PASS 2 "category グルーピング — 7 category 全 key 分類、未分類 key 0"
|
|
738
|
+
else _record FAIL 2 "category グルーピング — 7 category 全 key 分類、未分類 key 0"
|
|
739
|
+
fi
|
|
740
|
+
|
|
741
|
+
if _case_3 2>/dev/null; then _record PASS 3 "--list 説明列 — 説明 header + 代表 key description 内容"
|
|
742
|
+
else _record FAIL 3 "--list 説明列 — 説明 header + 代表 key description 内容"
|
|
743
|
+
fi
|
|
744
|
+
|
|
745
|
+
if _case_4 2>/dev/null; then _record PASS 4 "--list --verbose — 変更効果列 + 代表 key effect 内容"
|
|
746
|
+
else _record FAIL 4 "--list --verbose — 変更効果列 + 代表 key effect 内容"
|
|
747
|
+
fi
|
|
748
|
+
|
|
749
|
+
if _case_5 2>/dev/null; then _record PASS 5 "非 TTY pipe で numeric menu 実出力 + fallback 案内 (H9)"
|
|
750
|
+
else _record FAIL 5 "非 TTY pipe で numeric menu 実出力 + fallback 案内 (H9)"
|
|
751
|
+
fi
|
|
752
|
+
|
|
753
|
+
if _case_6 2>/dev/null; then _record PASS 6 "HC_HC_CONFIG_FORCE_NUMERIC=1 (env を bash 側、C2)"
|
|
754
|
+
else _record FAIL 6 "HC_HC_CONFIG_FORCE_NUMERIC=1 (env を bash 側、C2)"
|
|
755
|
+
fi
|
|
756
|
+
|
|
757
|
+
if _case_7 2>/dev/null; then _record PASS 7 "metadata と yml inline comment の一致検証 (drift 検出、H10)"
|
|
758
|
+
else _record FAIL 7 "metadata と yml inline comment の一致検証 (drift 検出、H10)"
|
|
759
|
+
fi
|
|
760
|
+
|
|
761
|
+
if _case_8 2>/dev/null; then _record PASS 8 "空 yml の --list が exit 0 (H8)"
|
|
762
|
+
else _record FAIL 8 "空 yml の --list が exit 0 (H8)"
|
|
763
|
+
fi
|
|
764
|
+
|
|
765
|
+
if _case_9 2>/dev/null; then _record PASS 9 "番号 menu 空入力で yml 無変化 + menu exit 0 (skip 検証、H7 + qa MED-3)"
|
|
766
|
+
else _record FAIL 9 "番号 menu 空入力で yml 無変化 + menu exit 0 (skip 検証、H7 + qa MED-3)"
|
|
767
|
+
fi
|
|
768
|
+
|
|
769
|
+
if _case_10 2>/dev/null; then _record PASS 10 "番号 menu 編集 path で新値が persist (H11 代替)"
|
|
770
|
+
else _record FAIL 10 "番号 menu 編集 path で新値が persist (H11 代替)"
|
|
771
|
+
fi
|
|
772
|
+
|
|
773
|
+
if _case_11 2>/dev/null; then _record PASS 11 "TUI render seam — 選択行/区切り行/effect panel + stdout 純度 (order total==79/ゴミ0, render kc=/cat_count= 0) (H11 + iter2 CRIT)"
|
|
774
|
+
else _record FAIL 11 "TUI render seam — 選択行/区切り行/effect panel + stdout 純度 (order total==79/ゴミ0, render kc=/cat_count= 0) (H11 + iter2 CRIT)"
|
|
775
|
+
fi
|
|
776
|
+
|
|
777
|
+
if _case_12 2>/dev/null; then _record PASS 12 "--show-default で DEFAULT 列 + --verbose --show-default 無害 (MED)"
|
|
778
|
+
else _record FAIL 12 "--show-default で DEFAULT 列 + --verbose --show-default 無害 (MED)"
|
|
779
|
+
fi
|
|
780
|
+
|
|
781
|
+
if _case_13 2>/dev/null; then _record PASS 13 "FORCE_NUMERIC 判定が \"1\" 限定 (=0/=false negative、MED)"
|
|
782
|
+
else _record FAIL 13 "FORCE_NUMERIC 判定が \"1\" 限定 (=0/=false negative、MED)"
|
|
783
|
+
fi
|
|
784
|
+
|
|
785
|
+
if _case_14 2>/dev/null; then _record PASS 14 "ANSI escape 値の --list が exit 0 (MED)"
|
|
786
|
+
else _record FAIL 14 "ANSI escape 値の --list が exit 0 (MED)"
|
|
787
|
+
fi
|
|
788
|
+
|
|
789
|
+
# ============================================================
|
|
790
|
+
# 集計
|
|
791
|
+
# ============================================================
|
|
792
|
+
|
|
793
|
+
TOTAL=$((PASS + FAIL))
|
|
794
|
+
printf '\n--- Result: %d/%d PASS ---\n' "$PASS" "$TOTAL"
|
|
795
|
+
|
|
796
|
+
if [ "$FAIL" -gt 0 ]; then
|
|
797
|
+
printf 'FAILED cases:%s\n' "$FAILED_CASES"
|
|
798
|
+
exit 1
|
|
799
|
+
fi
|
|
800
|
+
|
|
801
|
+
exit 0
|