@rosetears/aili-pi 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/LICENSE +21 -0
- package/README.md +109 -0
- package/THIRD_PARTY_NOTICES.md +64 -0
- package/extensions/index.ts +6 -0
- package/install.sh +5 -0
- package/manifests/adapter-evidence.json +45 -0
- package/manifests/capabilities.json +124 -0
- package/manifests/live-verification.json +26 -0
- package/manifests/provenance.json +71 -0
- package/manifests/roles.json +474 -0
- package/manifests/sbom.json +7797 -0
- package/manifests/skill-compatibility.json +8100 -0
- package/manifests/subagent-provenance.json +37 -0
- package/package.json +91 -0
- package/prompts/build.md +8 -0
- package/prompts/define.md +8 -0
- package/prompts/ideate.md +8 -0
- package/prompts/local-review.md +8 -0
- package/prompts/ship.md +8 -0
- package/roles/agent-evaluator.md +47 -0
- package/roles/ai-regression-scout.md +47 -0
- package/roles/browser-qa-runner.md +47 -0
- package/roles/code-reviewer.md +47 -0
- package/roles/code-scout.md +47 -0
- package/roles/convergence-reviewer.md +55 -0
- package/roles/doc-researcher.md +47 -0
- package/roles/e2e-artifact-runner.md +47 -0
- package/roles/implementer.md +47 -0
- package/roles/opensource-sanitizer.md +47 -0
- package/roles/plan-auditor.md +47 -0
- package/roles/pr-test-analyzer.md +47 -0
- package/roles/security-auditor.md +47 -0
- package/roles/silent-failure-reviewer.md +47 -0
- package/roles/spec-miner.md +47 -0
- package/roles/test-coverage-reviewer.md +47 -0
- package/roles/test-engineer.md +48 -0
- package/roles/web-performance-auditor.md +47 -0
- package/roles/web-researcher.md +47 -0
- package/scripts/apply-adapter-evidence.ts +73 -0
- package/scripts/bootstrap.sh +180 -0
- package/scripts/generate-provenance.ts +143 -0
- package/scripts/local-package-e2e.ts +51 -0
- package/scripts/sync-roles.ts +213 -0
- package/scripts/sync-skills.ts +356 -0
- package/scripts/validate-runtime.ts +11 -0
- package/skills/academic-paper-review/SKILL.md +81 -0
- package/skills/agents-md-initialization/SKILL.md +121 -0
- package/skills/agents-md-initialization/references/agents-template.md +83 -0
- package/skills/agents-md-initialization/references/agents_md.py +215 -0
- package/skills/ai-regression-scout/SKILL.md +24 -0
- package/skills/aili-delivery-flow/SKILL.md +125 -0
- package/skills/aili-delivery-flow/references/artifact-contracts.md +138 -0
- package/skills/aili-delivery-flow/references/backend-routing.md +40 -0
- package/skills/aili-delivery-flow/references/build-execution-loop.md +113 -0
- package/skills/aili-delivery-flow/references/build-goal-mode.md +3 -0
- package/skills/aili-delivery-flow/references/direct-vs-delegated-work.md +38 -0
- package/skills/aili-delivery-flow/references/implementation-packages.md +54 -0
- package/skills/aili-delivery-flow/references/lifecycle.md +127 -0
- package/skills/aili-delivery-flow/references/protocols/acceptance-test-plan.md +18 -0
- package/skills/aili-delivery-flow/references/protocols/alignment-questionnaire.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/closeout-report.md +101 -0
- package/skills/aili-delivery-flow/references/protocols/compact-evidence-pack.md +46 -0
- package/skills/aili-delivery-flow/references/protocols/idea-brief.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/implementation-package.md +53 -0
- package/skills/aili-delivery-flow/references/protocols/research-evidence-pack.md +19 -0
- package/skills/aili-delivery-flow/references/protocols/review-report.md +7 -0
- package/skills/aili-delivery-flow/references/protocols/spec-draft.md +12 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-result.md +60 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-task-packet.md +29 -0
- package/skills/aili-delivery-flow/references/protocols/worktree-context.md +109 -0
- package/skills/aili-delivery-flow/references/questionnaire-policy.md +62 -0
- package/skills/aili-delivery-flow/references/review-repair-loop.md +16 -0
- package/skills/aili-delivery-flow/references/test-document-policy.md +35 -0
- package/skills/android-native-dev/SKILL.md +722 -0
- package/skills/android-native-dev/references/accessibility.md +209 -0
- package/skills/android-native-dev/references/adaptive-screens.md +231 -0
- package/skills/android-native-dev/references/design-style-guide.md +365 -0
- package/skills/android-native-dev/references/functional-requirements.md +229 -0
- package/skills/android-native-dev/references/motion-system.md +203 -0
- package/skills/android-native-dev/references/performance-stability.md +223 -0
- package/skills/android-native-dev/references/privacy-security.md +244 -0
- package/skills/android-native-dev/references/testing.md +554 -0
- package/skills/android-native-dev/references/visual-design.md +246 -0
- package/skills/api-and-interface-design/SKILL.md +318 -0
- package/skills/browser-qa/SKILL.md +32 -0
- package/skills/browser-testing-with-devtools/SKILL.md +323 -0
- package/skills/build-failure-repair/SKILL.md +49 -0
- package/skills/chart-visualization/SKILL.md +73 -0
- package/skills/ci-cd-and-automation/SKILL.md +353 -0
- package/skills/code-review-and-quality/SKILL.md +375 -0
- package/skills/code-review-quality-gates/SKILL.md +132 -0
- package/skills/code-simplification/SKILL.md +371 -0
- package/skills/comment-accuracy-review/SKILL.md +37 -0
- package/skills/consulting-analysis/SKILL.md +69 -0
- package/skills/context-engineering/SKILL.md +375 -0
- package/skills/coverage-review/SKILL.md +24 -0
- package/skills/data-analysis/SKILL.md +74 -0
- package/skills/deprecation-and-migration/SKILL.md +222 -0
- package/skills/documentation-and-adrs/SKILL.md +330 -0
- package/skills/e2e-artifact-handling/SKILL.md +30 -0
- package/skills/evidence-scoped-retrospective/SKILL.md +156 -0
- package/skills/explain-by-allegory/SKILL.md +99 -0
- package/skills/flutter-dev/SKILL.md +162 -0
- package/skills/flutter-dev/references/animations.md +497 -0
- package/skills/flutter-dev/references/bloc-state.md +281 -0
- package/skills/flutter-dev/references/forms.md +656 -0
- package/skills/flutter-dev/references/gorouter-navigation.md +257 -0
- package/skills/flutter-dev/references/localization.md +510 -0
- package/skills/flutter-dev/references/networking.md +566 -0
- package/skills/flutter-dev/references/performance.md +305 -0
- package/skills/flutter-dev/references/platform-specific.md +417 -0
- package/skills/flutter-dev/references/project-structure.md +273 -0
- package/skills/flutter-dev/references/riverpod-state.md +232 -0
- package/skills/flutter-dev/references/testing.md +364 -0
- package/skills/flutter-dev/references/widget-patterns.md +233 -0
- package/skills/frontend-dev/SKILL.md +468 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
- package/skills/frontend-dev/references/env-setup.md +33 -0
- package/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
- package/skills/frontend-dev/references/minimax-image-guide.md +65 -0
- package/skills/frontend-dev/references/minimax-music-guide.md +216 -0
- package/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
- package/skills/frontend-dev/references/minimax-video-guide.md +82 -0
- package/skills/frontend-dev/references/minimax-voice-catalog.md +685 -0
- package/skills/frontend-dev/references/motion-recipes.md +407 -0
- package/skills/frontend-dev/references/troubleshooting.md +85 -0
- package/skills/frontend-dev/scripts/minimax_image.py +137 -0
- package/skills/frontend-dev/scripts/minimax_music.py +157 -0
- package/skills/frontend-dev/scripts/minimax_tts.py +127 -0
- package/skills/frontend-dev/scripts/minimax_video.py +187 -0
- package/skills/frontend-dev/templates/generator_template.js +223 -0
- package/skills/frontend-dev/templates/viewer.html +599 -0
- package/skills/frontend-ui-engineering/SKILL.md +367 -0
- package/skills/fullstack-dev/SKILL.md +819 -0
- package/skills/fullstack-dev/references/api-design.md +444 -0
- package/skills/fullstack-dev/references/auth-flow.md +165 -0
- package/skills/fullstack-dev/references/db-schema.md +706 -0
- package/skills/fullstack-dev/references/django-best-practices.md +466 -0
- package/skills/fullstack-dev/references/environment-management.md +78 -0
- package/skills/fullstack-dev/references/release-checklist.md +278 -0
- package/skills/fullstack-dev/references/technology-selection.md +254 -0
- package/skills/fullstack-dev/references/testing-strategy.md +404 -0
- package/skills/git-workflow-and-versioning/SKILL.md +446 -0
- package/skills/github-evidence-triage/SKILL.md +115 -0
- package/skills/harness-evolution/SKILL.md +59 -0
- package/skills/harness-evolution/references/activation-matrix.md +13 -0
- package/skills/harness-evolution/references/approval-policy.md +20 -0
- package/skills/harness-evolution/references/change-report-template.md +33 -0
- package/skills/harness-evolution/references/component-taxonomy.md +19 -0
- package/skills/harness-evolution/references/verdict-policy.md +13 -0
- package/skills/harness-issue-triage/SKILL.md +72 -0
- package/skills/harness-issue-triage/references/component-diagnosis.md +25 -0
- package/skills/harness-issue-triage/references/triage-report-template.md +34 -0
- package/skills/harness-optimization-audit/SKILL.md +125 -0
- package/skills/idea-refine/SKILL.md +191 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/SKILL.upstream.md +178 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/examples.md +238 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/frameworks.md +99 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/refinement-criteria.md +113 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/scripts/idea-refine.upstream.sh +15 -0
- package/skills/incremental-implementation/SKILL.md +252 -0
- package/skills/ios-application-dev/SKILL.md +212 -0
- package/skills/ios-application-dev/references/accessibility.md +259 -0
- package/skills/ios-application-dev/references/graphics-animation.md +350 -0
- package/skills/ios-application-dev/references/layout-system.md +199 -0
- package/skills/ios-application-dev/references/metal-shader.md +178 -0
- package/skills/ios-application-dev/references/navigation-patterns.md +175 -0
- package/skills/ios-application-dev/references/swift-coding-standards.md +757 -0
- package/skills/ios-application-dev/references/swiftui-design-guidelines.md +1167 -0
- package/skills/ios-application-dev/references/system-integration.md +401 -0
- package/skills/ios-application-dev/references/uikit-components.md +297 -0
- package/skills/local-review-gate/SKILL.md +207 -0
- package/skills/local-review-gate/references/addyosmani-code-review-rubric.md +33 -0
- package/skills/local-review-gate/references/codex-github-compatibility.md +26 -0
- package/skills/local-review-gate/references/ecc-code-review-adaptation.md +40 -0
- package/skills/local-review-gate/references/graphify-local-review.md +33 -0
- package/skills/local-review-gate/references/orchestration-adaptation.md +51 -0
- package/skills/local-review-gate/references/review-repair-lane-adaptation.md +46 -0
- package/skills/local-review-gate/references/upstream-provenance.md +61 -0
- package/skills/mature-project-pattern-research/SKILL.md +155 -0
- package/skills/mature-project-pattern-research/references/research-rubric.md +45 -0
- package/skills/minimax-docx/LICENSE +21 -0
- package/skills/minimax-docx/SKILL.md +273 -0
- package/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
- package/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
- package/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
- package/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
- package/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
- package/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
- package/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
- package/skills/minimax-docx/references/cjk_typography.md +357 -0
- package/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
- package/skills/minimax-docx/references/comments_guide.md +191 -0
- package/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
- package/skills/minimax-docx/references/design_principles.md +819 -0
- package/skills/minimax-docx/references/openxml_element_order.md +308 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
- package/skills/minimax-docx/references/openxml_namespaces.md +82 -0
- package/skills/minimax-docx/references/openxml_units.md +72 -0
- package/skills/minimax-docx/references/scenario_a_create.md +284 -0
- package/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
- package/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
- package/skills/minimax-docx/references/track_changes_guide.md +200 -0
- package/skills/minimax-docx/references/troubleshooting.md +506 -0
- package/skills/minimax-docx/references/typography_guide.md +294 -0
- package/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
- package/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
- package/skills/minimax-docx/scripts/docx_preview.sh +37 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
- package/skills/minimax-docx/scripts/env_check.sh +196 -0
- package/skills/minimax-docx/scripts/setup.ps1 +274 -0
- package/skills/minimax-docx/scripts/setup.sh +504 -0
- package/skills/minimax-pdf/README.md +222 -0
- package/skills/minimax-pdf/SKILL.md +218 -0
- package/skills/minimax-pdf/design/design.md +381 -0
- package/skills/minimax-pdf/scripts/cover.py +1579 -0
- package/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
- package/skills/minimax-pdf/scripts/fill_write.py +242 -0
- package/skills/minimax-pdf/scripts/make.sh +491 -0
- package/skills/minimax-pdf/scripts/merge.py +112 -0
- package/skills/minimax-pdf/scripts/palette.py +521 -0
- package/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
- package/skills/minimax-pdf/scripts/render_body.py +1052 -0
- package/skills/minimax-pdf/scripts/render_cover.js +111 -0
- package/skills/minimax-xlsx/SKILL.md +156 -0
- package/skills/minimax-xlsx/references/create.md +691 -0
- package/skills/minimax-xlsx/references/edit.md +684 -0
- package/skills/minimax-xlsx/references/fix.md +37 -0
- package/skills/minimax-xlsx/references/format.md +768 -0
- package/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
- package/skills/minimax-xlsx/references/read-analyze.md +97 -0
- package/skills/minimax-xlsx/references/validate.md +772 -0
- package/skills/minimax-xlsx/scripts/formula_check.py +422 -0
- package/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
- package/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
- package/skills/minimax-xlsx/scripts/style_audit.py +575 -0
- package/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
- package/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
- package/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
- package/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
- package/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
- package/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
- package/skills/newsletter-generation/SKILL.md +71 -0
- package/skills/oss-release-readiness/SKILL.md +47 -0
- package/skills/parallel-subagent-dispatch/SKILL.md +58 -0
- package/skills/performance-optimization/SKILL.md +364 -0
- package/skills/planning-and-task-breakdown/SKILL.md +290 -0
- package/skills/pptx-generator/SKILL.md +275 -0
- package/skills/pptx-generator/references/design-system.md +392 -0
- package/skills/pptx-generator/references/editing.md +162 -0
- package/skills/pptx-generator/references/pitfalls.md +112 -0
- package/skills/pptx-generator/references/pptxgenjs.md +420 -0
- package/skills/pptx-generator/references/slide-types.md +413 -0
- package/skills/pr-test-analysis/SKILL.md +24 -0
- package/skills/react-native-dev/SKILL.md +180 -0
- package/skills/react-native-dev/references/animations.md +254 -0
- package/skills/react-native-dev/references/components.md +124 -0
- package/skills/react-native-dev/references/engineering.md +527 -0
- package/skills/react-native-dev/references/forms.md +300 -0
- package/skills/react-native-dev/references/native-capabilities.md +163 -0
- package/skills/react-native-dev/references/navigation.md +271 -0
- package/skills/react-native-dev/references/networking.md +346 -0
- package/skills/react-native-dev/references/performance.md +215 -0
- package/skills/react-native-dev/references/state-management.md +230 -0
- package/skills/react-native-dev/references/styling.md +117 -0
- package/skills/react-native-dev/references/testing.md +341 -0
- package/skills/requirements-grilling/SKILL.md +447 -0
- package/skills/requirements-grilling/references/ADR-FORMAT.md +46 -0
- package/skills/requirements-grilling/references/CONTEXT-FORMAT.md +41 -0
- package/skills/requirements-grilling/references/INTERVIEW-PACKET-FORMAT.md +62 -0
- package/skills/requirements-grilling/references/MIT-LICENSE-MATT-POCOCK.md +25 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/interview-me/SKILL.upstream.md +225 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/NOTICE.md +12 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/batch-grill-me/SKILL.upstream.md +15 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grill-me/SKILL.upstream.md +7 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grilling/SKILL.upstream.md +12 -0
- package/skills/review-pipeline/SKILL.md +38 -0
- package/skills/rose-memory/SKILL.md +210 -0
- package/skills/rose-memory/references/README.md +48 -0
- package/skills/rose-memory/references/memory_cli.py +2384 -0
- package/skills/rose-memory/references/schema.sql +315 -0
- package/skills/security-and-hardening/SKILL.md +369 -0
- package/skills/session-handoff/SKILL.md +88 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/handoff/SKILL.upstream.md +16 -0
- package/skills/session-handoff/scripts/session_handoff.py +764 -0
- package/skills/shader-dev/SKILL.md +316 -0
- package/skills/shader-dev/reference/ambient-occlusion.md +382 -0
- package/skills/shader-dev/reference/analytic-ray-tracing.md +651 -0
- package/skills/shader-dev/reference/anti-aliasing.md +71 -0
- package/skills/shader-dev/reference/atmospheric-scattering.md +571 -0
- package/skills/shader-dev/reference/camera-effects.md +80 -0
- package/skills/shader-dev/reference/cellular-automata.md +635 -0
- package/skills/shader-dev/reference/color-palette.md +481 -0
- package/skills/shader-dev/reference/csg-boolean-operations.md +466 -0
- package/skills/shader-dev/reference/domain-repetition.md +436 -0
- package/skills/shader-dev/reference/domain-warping.md +419 -0
- package/skills/shader-dev/reference/fluid-simulation.md +425 -0
- package/skills/shader-dev/reference/fractal-rendering.md +525 -0
- package/skills/shader-dev/reference/lighting-model.md +639 -0
- package/skills/shader-dev/reference/matrix-transform.md +535 -0
- package/skills/shader-dev/reference/multipass-buffer.md +571 -0
- package/skills/shader-dev/reference/normal-estimation.md +418 -0
- package/skills/shader-dev/reference/particle-system.md +589 -0
- package/skills/shader-dev/reference/path-tracing-gi.md +602 -0
- package/skills/shader-dev/reference/polar-uv-manipulation.md +521 -0
- package/skills/shader-dev/reference/post-processing.md +375 -0
- package/skills/shader-dev/reference/procedural-2d-pattern.md +439 -0
- package/skills/shader-dev/reference/procedural-noise.md +551 -0
- package/skills/shader-dev/reference/ray-marching.md +396 -0
- package/skills/shader-dev/reference/sdf-2d.md +724 -0
- package/skills/shader-dev/reference/sdf-3d.md +805 -0
- package/skills/shader-dev/reference/sdf-tricks.md +63 -0
- package/skills/shader-dev/reference/shadow-techniques.md +476 -0
- package/skills/shader-dev/reference/simulation-physics.md +644 -0
- package/skills/shader-dev/reference/sound-synthesis.md +578 -0
- package/skills/shader-dev/reference/terrain-rendering.md +839 -0
- package/skills/shader-dev/reference/texture-mapping-advanced.md +87 -0
- package/skills/shader-dev/reference/texture-sampling.md +553 -0
- package/skills/shader-dev/reference/volumetric-rendering.md +608 -0
- package/skills/shader-dev/reference/voronoi-cellular-noise.md +486 -0
- package/skills/shader-dev/reference/voxel-rendering.md +701 -0
- package/skills/shader-dev/reference/water-ocean.md +445 -0
- package/skills/shader-dev/reference/webgl-pitfalls.md +41 -0
- package/skills/shader-dev/techniques/ambient-occlusion.md +364 -0
- package/skills/shader-dev/techniques/analytic-ray-tracing.md +542 -0
- package/skills/shader-dev/techniques/anti-aliasing.md +124 -0
- package/skills/shader-dev/techniques/atmospheric-scattering.md +522 -0
- package/skills/shader-dev/techniques/camera-effects.md +115 -0
- package/skills/shader-dev/techniques/cellular-automata.md +531 -0
- package/skills/shader-dev/techniques/color-palette.md +380 -0
- package/skills/shader-dev/techniques/csg-boolean-operations.md +491 -0
- package/skills/shader-dev/techniques/domain-repetition.md +333 -0
- package/skills/shader-dev/techniques/domain-warping.md +414 -0
- package/skills/shader-dev/techniques/fluid-simulation.md +1175 -0
- package/skills/shader-dev/techniques/fractal-rendering.md +436 -0
- package/skills/shader-dev/techniques/lighting-model.md +527 -0
- package/skills/shader-dev/techniques/matrix-transform.md +455 -0
- package/skills/shader-dev/techniques/multipass-buffer.md +922 -0
- package/skills/shader-dev/techniques/normal-estimation.md +318 -0
- package/skills/shader-dev/techniques/particle-system.md +1203 -0
- package/skills/shader-dev/techniques/path-tracing-gi.md +623 -0
- package/skills/shader-dev/techniques/polar-uv-manipulation.md +373 -0
- package/skills/shader-dev/techniques/post-processing.md +788 -0
- package/skills/shader-dev/techniques/procedural-2d-pattern.md +346 -0
- package/skills/shader-dev/techniques/procedural-noise.md +554 -0
- package/skills/shader-dev/techniques/ray-marching.md +467 -0
- package/skills/shader-dev/techniques/sdf-2d.md +631 -0
- package/skills/shader-dev/techniques/sdf-3d.md +589 -0
- package/skills/shader-dev/techniques/sdf-tricks.md +100 -0
- package/skills/shader-dev/techniques/shadow-techniques.md +776 -0
- package/skills/shader-dev/techniques/simulation-physics.md +1542 -0
- package/skills/shader-dev/techniques/sound-synthesis.md +490 -0
- package/skills/shader-dev/techniques/terrain-rendering.md +408 -0
- package/skills/shader-dev/techniques/texture-mapping-advanced.md +121 -0
- package/skills/shader-dev/techniques/texture-sampling.md +382 -0
- package/skills/shader-dev/techniques/volumetric-rendering.md +375 -0
- package/skills/shader-dev/techniques/voronoi-cellular-noise.md +458 -0
- package/skills/shader-dev/techniques/voxel-rendering.md +985 -0
- package/skills/shader-dev/techniques/water-ocean.md +490 -0
- package/skills/shader-dev/techniques/webgl-pitfalls.md +170 -0
- package/skills/shipping-and-launch/SKILL.md +334 -0
- package/skills/silent-failure-hunting/SKILL.md +24 -0
- package/skills/source-driven-development/SKILL.md +223 -0
- package/skills/spec-driven-development/SKILL.md +235 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/spec-driven-development/SKILL.upstream.md +206 -0
- package/skills/strategy-stress-test/SKILL.md +185 -0
- package/skills/systematic-literature-review/SKILL.md +77 -0
- package/skills/test-document-generator/SKILL.md +152 -0
- package/skills/test-document-generator/references/test-document-template.md +45 -0
- package/skills/test-driven-development/SKILL.md +399 -0
- package/skills/write-skills/GLOSSARY.md +113 -0
- package/skills/write-skills/SKILL.md +133 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/GLOSSARY.md +201 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/SKILL.upstream.md +83 -0
- package/src/runtime/child-guard.ts +70 -0
- package/src/runtime/conflicts.ts +25 -0
- package/src/runtime/contracts.ts +9 -0
- package/src/runtime/doctor.ts +134 -0
- package/src/runtime/global-resources.ts +152 -0
- package/src/runtime/index.ts +23 -0
- package/src/runtime/lifecycle.ts +19 -0
- package/src/runtime/native-integrations.ts +44 -0
- package/src/runtime/path-boundaries.ts +69 -0
- package/src/runtime/registry.ts +213 -0
- package/src/runtime/roles.ts +64 -0
- package/src/runtime/rose-context.ts +24 -0
- package/src/runtime/subagents.ts +426 -0
- package/templates/APPEND_SYSTEM.md +12 -0
- package/upstream/aili-workflows.lock.json +3226 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# Visual Design Guidelines
|
|
2
|
+
|
|
3
|
+
Detailed specifications for colors, typography, spacing, elevation, and shapes in Material Design 3.
|
|
4
|
+
|
|
5
|
+
## Color System
|
|
6
|
+
|
|
7
|
+
### Color Roles (Tokens)
|
|
8
|
+
|
|
9
|
+
Material Design 3 uses a token-based color system with three accent groups:
|
|
10
|
+
|
|
11
|
+
| Role | Usage |
|
|
12
|
+
|------|-------|
|
|
13
|
+
| **Primary** | Key components, FAB, prominent buttons |
|
|
14
|
+
| **Secondary** | Less prominent components, filters, chips |
|
|
15
|
+
| **Tertiary** | Accent, complementary elements |
|
|
16
|
+
| **Error** | Error states, destructive actions |
|
|
17
|
+
| **Surface** | Backgrounds, cards, dialogs |
|
|
18
|
+
|
|
19
|
+
Each role includes variants: base color, onColor, container, onContainer.
|
|
20
|
+
|
|
21
|
+
### Color Contrast Requirements
|
|
22
|
+
|
|
23
|
+
| Element | Minimum Contrast Ratio | Notes |
|
|
24
|
+
|---------|----------------------|-------|
|
|
25
|
+
| Body text | **4.5:1** | WCAG AA compliance |
|
|
26
|
+
| Large text (18sp+) | **3:1** | 14sp bold also qualifies |
|
|
27
|
+
| UI components | **3:1** | Icons, borders, controls |
|
|
28
|
+
| Focus indicators | **3:1** | Must be clearly visible |
|
|
29
|
+
|
|
30
|
+
### Recommended Color Palettes
|
|
31
|
+
|
|
32
|
+
#### Modern Professional (Business Apps)
|
|
33
|
+
|
|
34
|
+
| Role | Color | Name |
|
|
35
|
+
|------|-------|------|
|
|
36
|
+
| Primary | #1976D2 | Blue 700 |
|
|
37
|
+
| Secondary | #455A64 | Blue Grey 700 |
|
|
38
|
+
| Tertiary | #00897B | Teal 600 |
|
|
39
|
+
| Background | #FAFAFA | Grey 50 |
|
|
40
|
+
|
|
41
|
+
#### Vibrant & Playful (Consumer Apps)
|
|
42
|
+
|
|
43
|
+
| Role | Color | Name |
|
|
44
|
+
|------|-------|------|
|
|
45
|
+
| Primary | #6200EE | Deep Purple |
|
|
46
|
+
| Secondary | #03DAC6 | Teal Accent |
|
|
47
|
+
| Tertiary | #FF5722 | Deep Orange |
|
|
48
|
+
| Background | #FFFFFF | White |
|
|
49
|
+
|
|
50
|
+
#### Dark & Elegant (Premium Apps)
|
|
51
|
+
|
|
52
|
+
| Role | Color | Name |
|
|
53
|
+
|------|-------|------|
|
|
54
|
+
| Primary | #BB86FC | Purple 200 |
|
|
55
|
+
| Secondary | #03DAC6 | Teal 200 |
|
|
56
|
+
| Tertiary | #CF6679 | Red 200 |
|
|
57
|
+
| Background | #121212 | Dark surface |
|
|
58
|
+
|
|
59
|
+
#### Nature & Wellness (Health Apps)
|
|
60
|
+
|
|
61
|
+
| Role | Color | Name |
|
|
62
|
+
|------|-------|------|
|
|
63
|
+
| Primary | #4CAF50 | Green 500 |
|
|
64
|
+
| Secondary | #8BC34A | Light Green 500 |
|
|
65
|
+
| Tertiary | #FFEB3B | Yellow 500 |
|
|
66
|
+
| Background | #F1F8E9 | Light Green 50 |
|
|
67
|
+
|
|
68
|
+
#### Finance & Trust (Banking Apps)
|
|
69
|
+
|
|
70
|
+
| Role | Color | Name |
|
|
71
|
+
|------|-------|------|
|
|
72
|
+
| Primary | #00695C | Teal 800 |
|
|
73
|
+
| Secondary | #37474F | Blue Grey 800 |
|
|
74
|
+
| Tertiary | #FFC107 | Amber 500 |
|
|
75
|
+
| Background | #ECEFF1 | Blue Grey 50 |
|
|
76
|
+
|
|
77
|
+
### Dark Theme Requirements
|
|
78
|
+
|
|
79
|
+
- Background: #121212 or darker
|
|
80
|
+
- Surface colors use elevation-based tonal overlay
|
|
81
|
+
- Primary colors should be lighter variants (200-300 range)
|
|
82
|
+
- Maintain contrast ratios in dark mode
|
|
83
|
+
- Test all states (hover, focus, pressed) in dark mode
|
|
84
|
+
|
|
85
|
+
## Typography System
|
|
86
|
+
|
|
87
|
+
### Type Scale
|
|
88
|
+
|
|
89
|
+
| Style | Size | Weight | Line Height | Usage |
|
|
90
|
+
|-------|------|--------|-------------|-------|
|
|
91
|
+
| Display Large | 57sp | 400 | 64sp | Hero text |
|
|
92
|
+
| Display Medium | 45sp | 400 | 52sp | Large headers |
|
|
93
|
+
| Display Small | 36sp | 400 | 44sp | Section headers |
|
|
94
|
+
| Headline Large | 32sp | 400 | 40sp | Screen titles |
|
|
95
|
+
| Headline Medium | 28sp | 400 | 36sp | Subsection titles |
|
|
96
|
+
| Headline Small | 24sp | 400 | 32sp | Card titles |
|
|
97
|
+
| Title Large | 22sp | 400 | 28sp | App bar titles |
|
|
98
|
+
| Title Medium | 16sp | 500 | 24sp | List item titles |
|
|
99
|
+
| Title Small | 14sp | 500 | 20sp | Tabs |
|
|
100
|
+
| Body Large | 16sp | 400 | 24sp | Primary body text |
|
|
101
|
+
| Body Medium | 14sp | 400 | 20sp | Secondary body text |
|
|
102
|
+
| Body Small | 12sp | 400 | 16sp | Captions |
|
|
103
|
+
| Label Large | 14sp | 500 | 20sp | Button text |
|
|
104
|
+
| Label Medium | 12sp | 500 | 16sp | Navigation labels |
|
|
105
|
+
| Label Small | 11sp | 500 | 16sp | Badges |
|
|
106
|
+
|
|
107
|
+
### Recommended Fonts
|
|
108
|
+
|
|
109
|
+
| Category | Fonts |
|
|
110
|
+
|----------|-------|
|
|
111
|
+
| Primary | Roboto (system default) |
|
|
112
|
+
| Display | Roboto Serif, Google Sans |
|
|
113
|
+
| Monospace | Roboto Mono, JetBrains Mono |
|
|
114
|
+
|
|
115
|
+
### Text Readability
|
|
116
|
+
|
|
117
|
+
- **Line length**: 45-75 characters per line (including spaces)
|
|
118
|
+
- **Paragraph spacing**: 1.5x line height between paragraphs
|
|
119
|
+
- **Letter spacing**: Use default unless brand requires adjustment
|
|
120
|
+
- **Text alignment**: Left-aligned for body text (LTR languages)
|
|
121
|
+
|
|
122
|
+
## Spacing & Layout
|
|
123
|
+
|
|
124
|
+
### 8dp Grid System
|
|
125
|
+
|
|
126
|
+
All spacing values should be multiples of 8dp (with 4dp for fine adjustments).
|
|
127
|
+
|
|
128
|
+
| Token | Value | Usage |
|
|
129
|
+
|-------|-------|-------|
|
|
130
|
+
| xs | 4dp | Icon padding, fine adjustments |
|
|
131
|
+
| sm | 8dp | Tight spacing, inline elements |
|
|
132
|
+
| md | 16dp | Default padding, card content |
|
|
133
|
+
| lg | 24dp | Section spacing |
|
|
134
|
+
| xl | 32dp | Large gaps, group separation |
|
|
135
|
+
| xxl | 48dp | Screen margins, major sections |
|
|
136
|
+
|
|
137
|
+
### Component Dimensions
|
|
138
|
+
|
|
139
|
+
| Component | Height | Min Width | Notes |
|
|
140
|
+
|-----------|--------|-----------|-------|
|
|
141
|
+
| Button | 40dp | 64dp | Touch target 48dp |
|
|
142
|
+
| FAB | 56dp | 56dp | Standard size |
|
|
143
|
+
| Mini FAB | 40dp | 40dp | Secondary actions |
|
|
144
|
+
| Extended FAB | 56dp | 80dp | With text label |
|
|
145
|
+
| Text Field | 56dp | 280dp | Including label |
|
|
146
|
+
| App Bar | 64dp | - | Top app bar |
|
|
147
|
+
| Bottom Nav | 80dp | - | With labels |
|
|
148
|
+
| Nav Rail | - | 80dp | Tablet/desktop |
|
|
149
|
+
| List Item | 56-88dp | - | Depends on content |
|
|
150
|
+
| Chip | 32dp | - | Filter/action chips |
|
|
151
|
+
|
|
152
|
+
### Touch Targets
|
|
153
|
+
|
|
154
|
+
| Type | Size | Notes |
|
|
155
|
+
|------|------|-------|
|
|
156
|
+
| Minimum | 48 × 48dp | WCAG requirement |
|
|
157
|
+
| Recommended | 56 × 56dp | Primary actions |
|
|
158
|
+
| Kids apps | 56dp+ | Larger for motor skills |
|
|
159
|
+
| Spacing | 8dp minimum | Between adjacent targets |
|
|
160
|
+
|
|
161
|
+
## Elevation & Shadows
|
|
162
|
+
|
|
163
|
+
### Elevation Levels
|
|
164
|
+
|
|
165
|
+
| Level | Elevation | Usage |
|
|
166
|
+
|-------|-----------|-------|
|
|
167
|
+
| Level 0 | 0dp | Flat surfaces |
|
|
168
|
+
| Level 1 | 1dp | Cards, elevated buttons |
|
|
169
|
+
| Level 2 | 3dp | FAB (resting), raised elements |
|
|
170
|
+
| Level 3 | 6dp | Navigation drawer, bottom sheet |
|
|
171
|
+
| Level 4 | 8dp | FAB (pressed), menus |
|
|
172
|
+
| Level 5 | 12dp | Dialogs, modal surfaces |
|
|
173
|
+
|
|
174
|
+
### Shadow Guidelines
|
|
175
|
+
|
|
176
|
+
- Use elevation consistently for same component types
|
|
177
|
+
- Higher elevation = more important/prominent
|
|
178
|
+
- In dark theme, use surface tint instead of shadows
|
|
179
|
+
- Avoid excessive elevation (keeps UI grounded)
|
|
180
|
+
|
|
181
|
+
## Shape System
|
|
182
|
+
|
|
183
|
+
### Corner Radius
|
|
184
|
+
|
|
185
|
+
| Size | Radius | Usage |
|
|
186
|
+
|------|--------|-------|
|
|
187
|
+
| None | 0dp | Sharp edges, dividers |
|
|
188
|
+
| Extra Small | 4dp | Badges, small chips |
|
|
189
|
+
| Small | 8dp | Buttons, chips, small cards |
|
|
190
|
+
| Medium | 12dp | Cards, dialogs, text fields |
|
|
191
|
+
| Large | 16dp | FAB, bottom sheets |
|
|
192
|
+
| Extra Large | 28dp | Large sheets, expanded cards |
|
|
193
|
+
| Full | 50% | Pills, avatars, circular buttons |
|
|
194
|
+
|
|
195
|
+
### M3 Expressive Shapes
|
|
196
|
+
|
|
197
|
+
Material 3 Expressive introduces 35 new decorative shapes:
|
|
198
|
+
- Organic curves
|
|
199
|
+
- Asymmetric corners
|
|
200
|
+
- Cut corners
|
|
201
|
+
- Scalloped edges
|
|
202
|
+
|
|
203
|
+
Use sparingly for brand differentiation and visual interest.
|
|
204
|
+
|
|
205
|
+
### Shape Consistency Rules
|
|
206
|
+
|
|
207
|
+
- Same component type = same shape
|
|
208
|
+
- Related components should share shape family
|
|
209
|
+
- Don't mix too many shape styles on one screen
|
|
210
|
+
- Consider shape in dark/light theme transitions
|
|
211
|
+
|
|
212
|
+
## Icons
|
|
213
|
+
|
|
214
|
+
### Size Specifications
|
|
215
|
+
|
|
216
|
+
| Size | Dimensions | Usage |
|
|
217
|
+
|------|------------|-------|
|
|
218
|
+
| Small | 20 × 20dp | Compact UI, inline |
|
|
219
|
+
| Standard | 24 × 24dp | Default for most uses |
|
|
220
|
+
| Large | 40 × 40dp | Emphasis, empty states |
|
|
221
|
+
|
|
222
|
+
### Icon Guidelines
|
|
223
|
+
|
|
224
|
+
- **Touch target**: Always wrap in 48dp minimum clickable area
|
|
225
|
+
- **Style**: Outlined (default), Filled (selected/active states)
|
|
226
|
+
- **Stroke width**: 2dp for outlined icons
|
|
227
|
+
- **Optical alignment**: May need visual adjustments
|
|
228
|
+
- **Color**: Use semantic colors (primary, error, etc.)
|
|
229
|
+
|
|
230
|
+
### Recommended Icon Sets
|
|
231
|
+
|
|
232
|
+
| Set | Usage |
|
|
233
|
+
|-----|-------|
|
|
234
|
+
| Material Symbols | Recommended, variable font support |
|
|
235
|
+
| Material Icons | Legacy, still widely used |
|
|
236
|
+
|
|
237
|
+
### Adaptive Icons (App Icon)
|
|
238
|
+
|
|
239
|
+
| Property | Value |
|
|
240
|
+
|----------|-------|
|
|
241
|
+
| Canvas size | 108 × 108dp |
|
|
242
|
+
| Safe zone | 66 × 66dp (centered circle) |
|
|
243
|
+
| Logo size | 48-66dp |
|
|
244
|
+
| Max display | 72 × 72dp |
|
|
245
|
+
| Layers | Foreground + Background (both 108dp) |
|
|
246
|
+
| Android 13+ | Include monochrome layer for theming |
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api-and-interface-design
|
|
3
|
+
description: Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints, defining type contracts between modules, or establishing boundaries between frontend and backend.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# API and Interface Design
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Design stable, well-documented interfaces that are hard to misuse. Good interfaces make the right thing easy and the wrong thing hard. This applies to REST APIs, GraphQL schemas, module boundaries, component props, and any surface where one piece of code talks to another.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Designing new API endpoints
|
|
15
|
+
- Defining module boundaries or contracts between teams
|
|
16
|
+
- Creating component prop interfaces
|
|
17
|
+
- Establishing database schema that informs API shape
|
|
18
|
+
- Changing existing public interfaces
|
|
19
|
+
|
|
20
|
+
## Contract Design Workflow
|
|
21
|
+
|
|
22
|
+
1. **Identify consumers:** list current and expected clients, internal callers, SDKs, jobs, integrations, and tests that observe the interface.
|
|
23
|
+
2. **Define the contract first:** write request/input, response/output, error shape, authorization expectations, idempotency, pagination, and versioning/deprecation notes before implementation.
|
|
24
|
+
3. **Check compatibility:** classify every change as additive, behavior-preserving, or breaking; prefer optional additions over field removals or type changes.
|
|
25
|
+
4. **Validate boundary data:** place validation at external boundaries and parse third-party responses before using them.
|
|
26
|
+
5. **Design verification:** add or update contract tests, schema checks, typed clients, or examples that prove consumer-visible behavior.
|
|
27
|
+
6. **Document the contract:** keep types, OpenAPI/GraphQL schema, route docs, or module docs in sync with the implementation.
|
|
28
|
+
|
|
29
|
+
🔴 CHECKPOINT / 🛑 STOP: Before changing a public route, field type, enum value, error shape, authorization rule, pagination contract, or module interface, pause and confirm whether a breaking-change plan, migration path, or deprecation window is required.
|
|
30
|
+
|
|
31
|
+
## Fallbacks for Unclear Contracts
|
|
32
|
+
|
|
33
|
+
| Trigger condition | First response | If still unresolved |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| Consumers are unknown | Search callers, clients, docs, tests, schemas, and usage examples | Treat the interface as public and avoid breaking changes |
|
|
36
|
+
| Versioning policy is unclear | Prefer one-version-compatible additive changes | Escalate for product/architecture decision before version forks |
|
|
37
|
+
| Error semantics differ across existing endpoints | Follow the nearest established API family | Document the inconsistency and avoid introducing a third pattern |
|
|
38
|
+
| Required behavior conflicts with compatibility | Propose an additive field/endpoint or feature flag | Stop until migration/deprecation is approved |
|
|
39
|
+
| Third-party response shape is undocumented | Validate with a narrow schema and fail closed | Report the unverified external contract |
|
|
40
|
+
|
|
41
|
+
## Core Principles
|
|
42
|
+
|
|
43
|
+
### Hyrum's Law
|
|
44
|
+
|
|
45
|
+
> With a sufficient number of users of an API, all observable behaviors of your system will be depended on by somebody, regardless of what you promise in the contract.
|
|
46
|
+
|
|
47
|
+
This means: every public behavior — including undocumented quirks, error message text, timing, and ordering — becomes a de facto contract once users depend on it. Design implications:
|
|
48
|
+
|
|
49
|
+
- **Be intentional about what you expose.** Every observable behavior is a potential commitment.
|
|
50
|
+
- **Don't leak implementation details.** If users can observe it, they will depend on it.
|
|
51
|
+
- **Plan for deprecation at design time.** See `deprecation-and-migration` for how to safely remove things users depend on.
|
|
52
|
+
- **Tests are not enough.** Even with perfect contract tests, Hyrum's Law means "safe" changes can break real users who depend on undocumented behavior.
|
|
53
|
+
|
|
54
|
+
### The One-Version Rule
|
|
55
|
+
|
|
56
|
+
Avoid forcing consumers to choose between multiple versions of the same dependency or API. Diamond dependency problems arise when different consumers need different versions of the same thing. Design for a world where only one version exists at a time — extend rather than fork.
|
|
57
|
+
|
|
58
|
+
### 1. Contract First
|
|
59
|
+
|
|
60
|
+
Define the interface before implementing it. The contract is the spec — implementation follows.
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
// Define the contract first
|
|
64
|
+
interface TaskAPI {
|
|
65
|
+
// Creates a task and returns the created task with server-generated fields
|
|
66
|
+
createTask(input: CreateTaskInput): Promise<Task>;
|
|
67
|
+
|
|
68
|
+
// Returns paginated tasks matching filters
|
|
69
|
+
listTasks(params: ListTasksParams): Promise<PaginatedResult<Task>>;
|
|
70
|
+
|
|
71
|
+
// Returns a single task or throws NotFoundError
|
|
72
|
+
getTask(id: string): Promise<Task>;
|
|
73
|
+
|
|
74
|
+
// Partial update — only provided fields change
|
|
75
|
+
updateTask(id: string, input: UpdateTaskInput): Promise<Task>;
|
|
76
|
+
|
|
77
|
+
// Idempotent delete — succeeds even if already deleted
|
|
78
|
+
deleteTask(id: string): Promise<void>;
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 2. Consistent Error Semantics
|
|
83
|
+
|
|
84
|
+
Pick one error strategy and use it everywhere:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
// REST: HTTP status codes + structured error body
|
|
88
|
+
// Every error response follows the same shape
|
|
89
|
+
interface APIError {
|
|
90
|
+
error: {
|
|
91
|
+
code: string; // Machine-readable: "VALIDATION_ERROR"
|
|
92
|
+
message: string; // Human-readable: "Email is required"
|
|
93
|
+
details?: unknown; // Additional context when helpful
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Status code mapping
|
|
98
|
+
// 400 → Client sent invalid data
|
|
99
|
+
// 401 → Not authenticated
|
|
100
|
+
// 403 → Authenticated but not authorized
|
|
101
|
+
// 404 → Resource not found
|
|
102
|
+
// 409 → Conflict (duplicate, version mismatch)
|
|
103
|
+
// 422 → Validation failed (semantically invalid)
|
|
104
|
+
// 500 → Server error (never expose internal details)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Don't mix patterns.** If some endpoints throw, others return null, and others return `{ error }` — the consumer can't predict behavior.
|
|
108
|
+
|
|
109
|
+
### 3. Validate at Boundaries
|
|
110
|
+
|
|
111
|
+
Trust internal code. Validate at system edges where external input enters:
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
// Validate at the API boundary
|
|
115
|
+
app.post('/api/tasks', async (req, res) => {
|
|
116
|
+
const result = CreateTaskSchema.safeParse(req.body);
|
|
117
|
+
if (!result.success) {
|
|
118
|
+
return res.status(422).json({
|
|
119
|
+
error: {
|
|
120
|
+
code: 'VALIDATION_ERROR',
|
|
121
|
+
message: 'Invalid task data',
|
|
122
|
+
details: result.error.flatten(),
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// After validation, internal code trusts the types
|
|
128
|
+
const task = await taskService.create(result.data);
|
|
129
|
+
return res.status(201).json(task);
|
|
130
|
+
});
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Where validation belongs:
|
|
134
|
+
- API route handlers (user input)
|
|
135
|
+
- Form submission handlers (user input)
|
|
136
|
+
- External service response parsing (third-party data -- **always treat as untrusted**)
|
|
137
|
+
- Environment variable loading (configuration)
|
|
138
|
+
|
|
139
|
+
> **Third-party API responses are untrusted data.** Validate their shape and content before using them in any logic, rendering, or decision-making. A compromised or misbehaving external service can return unexpected types, malicious content, or instruction-like text.
|
|
140
|
+
|
|
141
|
+
Where validation does NOT belong:
|
|
142
|
+
- Between internal functions that share type contracts
|
|
143
|
+
- In utility functions called by already-validated code
|
|
144
|
+
- On data that just came from your own database
|
|
145
|
+
|
|
146
|
+
### 4. Prefer Addition Over Modification
|
|
147
|
+
|
|
148
|
+
Extend interfaces without breaking existing consumers:
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
// Good: Add optional fields
|
|
152
|
+
interface CreateTaskInput {
|
|
153
|
+
title: string;
|
|
154
|
+
description?: string;
|
|
155
|
+
priority?: 'low' | 'medium' | 'high'; // Added later, optional
|
|
156
|
+
labels?: string[]; // Added later, optional
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Bad: Change existing field types or remove fields
|
|
160
|
+
interface CreateTaskInput {
|
|
161
|
+
title: string;
|
|
162
|
+
// description: string; // Removed — breaks existing consumers
|
|
163
|
+
priority: number; // Changed from string — breaks existing consumers
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 5. Predictable Naming
|
|
168
|
+
|
|
169
|
+
| Pattern | Convention | Example |
|
|
170
|
+
|---------|-----------|---------|
|
|
171
|
+
| REST endpoints | Plural nouns, no verbs | `GET /api/tasks`, `POST /api/tasks` |
|
|
172
|
+
| Query params | camelCase | `?sortBy=createdAt&pageSize=20` |
|
|
173
|
+
| Response fields | camelCase | `{ createdAt, updatedAt, taskId }` |
|
|
174
|
+
| Boolean fields | is/has/can prefix | `isComplete`, `hasAttachments` |
|
|
175
|
+
| Enum values | UPPER_SNAKE | `"IN_PROGRESS"`, `"COMPLETED"` |
|
|
176
|
+
|
|
177
|
+
## REST API Patterns
|
|
178
|
+
|
|
179
|
+
### Resource Design
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
GET /api/tasks → List tasks (with query params for filtering)
|
|
183
|
+
POST /api/tasks → Create a task
|
|
184
|
+
GET /api/tasks/:id → Get a single task
|
|
185
|
+
PATCH /api/tasks/:id → Update a task (partial)
|
|
186
|
+
DELETE /api/tasks/:id → Delete a task
|
|
187
|
+
|
|
188
|
+
GET /api/tasks/:id/comments → List comments for a task (sub-resource)
|
|
189
|
+
POST /api/tasks/:id/comments → Add a comment to a task
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Pagination
|
|
193
|
+
|
|
194
|
+
Paginate list endpoints:
|
|
195
|
+
|
|
196
|
+
```typescript
|
|
197
|
+
// Request
|
|
198
|
+
GET /api/tasks?page=1&pageSize=20&sortBy=createdAt&sortOrder=desc
|
|
199
|
+
|
|
200
|
+
// Response
|
|
201
|
+
{
|
|
202
|
+
"data": [...],
|
|
203
|
+
"pagination": {
|
|
204
|
+
"page": 1,
|
|
205
|
+
"pageSize": 20,
|
|
206
|
+
"totalItems": 142,
|
|
207
|
+
"totalPages": 8
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Filtering
|
|
213
|
+
|
|
214
|
+
Use query parameters for filters:
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
GET /api/tasks?status=in_progress&assignee=user123&createdAfter=2025-01-01
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Partial Updates (PATCH)
|
|
221
|
+
|
|
222
|
+
Accept partial objects — only update what's provided:
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
// Only title changes, everything else preserved
|
|
226
|
+
PATCH /api/tasks/123
|
|
227
|
+
{ "title": "Updated title" }
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## TypeScript Interface Patterns
|
|
231
|
+
|
|
232
|
+
### Use Discriminated Unions for Variants
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
// Good: Each variant is explicit
|
|
236
|
+
type TaskStatus =
|
|
237
|
+
| { type: 'pending' }
|
|
238
|
+
| { type: 'in_progress'; assignee: string; startedAt: Date }
|
|
239
|
+
| { type: 'completed'; completedAt: Date; completedBy: string }
|
|
240
|
+
| { type: 'cancelled'; reason: string; cancelledAt: Date };
|
|
241
|
+
|
|
242
|
+
// Consumer gets type narrowing
|
|
243
|
+
function getStatusLabel(status: TaskStatus): string {
|
|
244
|
+
switch (status.type) {
|
|
245
|
+
case 'pending': return 'Pending';
|
|
246
|
+
case 'in_progress': return `In progress (${status.assignee})`;
|
|
247
|
+
case 'completed': return `Done on ${status.completedAt}`;
|
|
248
|
+
case 'cancelled': return `Cancelled: ${status.reason}`;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Input/Output Separation
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
// Input: what the caller provides
|
|
257
|
+
interface CreateTaskInput {
|
|
258
|
+
title: string;
|
|
259
|
+
description?: string;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Output: what the system returns (includes server-generated fields)
|
|
263
|
+
interface Task {
|
|
264
|
+
id: string;
|
|
265
|
+
title: string;
|
|
266
|
+
description: string | null;
|
|
267
|
+
createdAt: Date;
|
|
268
|
+
updatedAt: Date;
|
|
269
|
+
createdBy: string;
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Use Branded Types for IDs
|
|
274
|
+
|
|
275
|
+
```typescript
|
|
276
|
+
type TaskId = string & { readonly __brand: 'TaskId' };
|
|
277
|
+
type UserId = string & { readonly __brand: 'UserId' };
|
|
278
|
+
|
|
279
|
+
// Prevents accidentally passing a UserId where a TaskId is expected
|
|
280
|
+
function getTask(id: TaskId): Promise<Task> { ... }
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## Common Rationalizations
|
|
284
|
+
|
|
285
|
+
| Rationalization | Reality |
|
|
286
|
+
|---|---|
|
|
287
|
+
| "We'll document the API later" | The types ARE the documentation. Define them first. |
|
|
288
|
+
| "We don't need pagination for now" | You will the moment someone has 100+ items. Add it from the start. |
|
|
289
|
+
| "PATCH is complicated, let's just use PUT" | PUT requires the full object every time. PATCH is what clients actually want. |
|
|
290
|
+
| "We'll version the API when we need to" | Breaking changes without versioning break consumers. Design for extension from the start. |
|
|
291
|
+
| "Nobody uses that undocumented behavior" | Hyrum's Law: if it's observable, somebody depends on it. Treat every public behavior as a commitment. |
|
|
292
|
+
| "We can just maintain two versions" | Multiple versions multiply maintenance cost and create diamond dependency problems. Prefer the One-Version Rule. |
|
|
293
|
+
| "Internal APIs don't need contracts" | Internal consumers are still consumers. Contracts prevent coupling and enable parallel work. |
|
|
294
|
+
|
|
295
|
+
## Red Flags
|
|
296
|
+
|
|
297
|
+
- Endpoints that return different shapes depending on conditions
|
|
298
|
+
- Inconsistent error formats across endpoints
|
|
299
|
+
- Validation scattered throughout internal code instead of at boundaries
|
|
300
|
+
- Breaking changes to existing fields (type changes, removals)
|
|
301
|
+
- List endpoints without pagination
|
|
302
|
+
- Verbs in REST URLs (`/api/createTask`, `/api/getUsers`)
|
|
303
|
+
- Third-party API responses used without validation or sanitization
|
|
304
|
+
- Public interface changes without consumer inventory or migration notes
|
|
305
|
+
- New versioned endpoints created only to avoid designing backward compatibility
|
|
306
|
+
- Error messages or enum values changed without checking observable consumer behavior
|
|
307
|
+
|
|
308
|
+
## Verification
|
|
309
|
+
|
|
310
|
+
After designing an API:
|
|
311
|
+
|
|
312
|
+
- [ ] Every endpoint has typed input and output schemas
|
|
313
|
+
- [ ] Error responses follow a single consistent format
|
|
314
|
+
- [ ] Validation happens at system boundaries only
|
|
315
|
+
- [ ] List endpoints support pagination
|
|
316
|
+
- [ ] New fields are additive and optional (backward compatible)
|
|
317
|
+
- [ ] Naming follows consistent conventions across all endpoints
|
|
318
|
+
- [ ] API documentation or types are committed alongside the implementation
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: browser-qa
|
|
3
|
+
description: Route an explicitly requested independent/delegated browser QA assignment or durable E2E evidence need; do not trigger for direct Playwright/DOM/console/network inspection, ordinary UI implementation, backend-only work, or production-mutating flows.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Browser QA
|
|
7
|
+
|
|
8
|
+
Use this skill only for the delegated browser path. Direct browser inspection is owned by `browser-testing-with-devtools`; the two paths are mutually exclusive for one current intent.
|
|
9
|
+
|
|
10
|
+
## Trigger
|
|
11
|
+
|
|
12
|
+
- The user explicitly requests independent/delegated browser QA.
|
|
13
|
+
- One concrete browser evidence gap requires `browser-qa-runner` rather than direct browser tools.
|
|
14
|
+
- Durable browser/E2E artifact evidence is explicitly required and placement is resolved.
|
|
15
|
+
|
|
16
|
+
## Required Safety Gate
|
|
17
|
+
|
|
18
|
+
- Resolve the target URL/environment from current user/project evidence. Ask only when target identity is materially ambiguous or the action could cross an external/production gate.
|
|
19
|
+
- Avoid production mutation: no real purchases, messages, account changes, destructive forms, or production data writes without the exact operation-specific approval.
|
|
20
|
+
- Before saving screenshots, traces, videos, reports, console logs, or network logs, obtain a repository-local artifact placement. If no placement exists, keep evidence inline/ephemeral and report no durable artifact.
|
|
21
|
+
|
|
22
|
+
## Near Misses
|
|
23
|
+
|
|
24
|
+
- Persistent E2E packaging, direct local browser inspection, or backend-only verification are different primary intents. Return the exact mismatch to ROSE; do not select another skill here or combine the direct/delegated browser paths.
|
|
25
|
+
- Creating Playwright config or test directories: requires explicit implementation scope and placement decision.
|
|
26
|
+
|
|
27
|
+
## Required Routing
|
|
28
|
+
|
|
29
|
+
- Canonical owner: ROSE/`aili-delivery-flow`.
|
|
30
|
+
- Optional agent: one fresh, terminal `browser-qa-runner` assignment after a new benefit decision.
|
|
31
|
+
|
|
32
|
+
ROSE/`aili-delivery-flow` owns mode, exact external/production approvals, artifact placement decisions, and final verification. This skill may return one bounded delegation need but does not invoke another skill or create a retry/review chain. One fresh QA assignment is terminal; report `complete`, `need-user`, `need-evidence`, `material-delta`, `blocked`, or `Unverified`. Canonical claim-matched verification wins.
|