coding-os 0.3.2__py3-none-any.whl
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.
- adapters/claude/README.md +6 -0
- adapters/claude/_install_helpers/extract_stacks.py +43 -0
- adapters/claude/_install_helpers/update_mcp_json.py +75 -0
- adapters/claude/adapter.yaml +164 -0
- adapters/claude/hooks/README.md +40 -0
- adapters/claude/hooks/agent_memory_sync.py +131 -0
- adapters/claude/hooks/ensure-agent-memory-link.sh +36 -0
- adapters/claude/hooks/sync-agent-memory.sh +21 -0
- adapters/claude/install.sh +86 -0
- adapters/claude/sdk_dispatcher.py +871 -0
- adapters/claude/settings.local.template.json +31 -0
- adapters/claude/settings.template.json +808 -0
- adapters/claude/update_mcp_json.py +85 -0
- adapters/codex/adapter.yaml +254 -0
- adapters/codex/chat_provider.py +230 -0
- adapters/codex/commands/formula-f1.md +129 -0
- adapters/codex/commands/formula-f10.md +100 -0
- adapters/codex/commands/formula-f11.md +123 -0
- adapters/codex/commands/formula-f2.md +139 -0
- adapters/codex/commands/formula-f3.md +127 -0
- adapters/codex/commands/formula-f4.md +101 -0
- adapters/codex/commands/formula-f5.md +135 -0
- adapters/codex/commands/formula-f6.md +147 -0
- adapters/codex/commands/formula-f7.md +111 -0
- adapters/codex/commands/formula-f8.md +133 -0
- adapters/codex/commands/formula-f9.md +112 -0
- adapters/codex/enable_codex_hooks.py +94 -0
- adapters/codex/ensure_codex_mcp.py +124 -0
- adapters/codex/hooks/codex-merge-hook-output.py +72 -0
- adapters/codex/hooks/codex-normalize-edit.py +96 -0
- adapters/codex/hooks/codex-postedit-dispatch.sh +75 -0
- adapters/codex/hooks/codex-posttool-dispatch.sh +70 -0
- adapters/codex/hooks/codex-preedit-dispatch.sh +83 -0
- adapters/codex/hooks/codex-pretool-dispatch.sh +82 -0
- adapters/codex/hooks/codex-sessionend-dispatch.sh +20 -0
- adapters/codex/hooks/codex-sessionstart-dispatch.sh +68 -0
- adapters/codex/hooks/codex-stop-dispatch.sh +73 -0
- adapters/codex/hooks/codex-userpromptsubmit-dispatch.sh +74 -0
- adapters/codex/hooks.template.json +208 -0
- adapters/codex/install.sh +83 -0
- adapters/codex/sdk_dispatcher.py +449 -0
- board_os/__init__.py +39 -0
- board_os/_agent_runtime.py +256 -0
- board_os/config.py +421 -0
- board_os/git_coherence.py +107 -0
- board_os/hub_adapter_manifest.py +140 -0
- board_os/mcp_tools.py +3228 -0
- board_os/migration.py +166 -0
- board_os/parser.py +317 -0
- board_os/presence.py +156 -0
- board_os/sync.py +320 -0
- board_os/transition_gates.py +224 -0
- board_os/transition_gates_cli.py +272 -0
- board_os/transition_gates_validator.py +551 -0
- board_os/verify_suites.py +126 -0
- board_os/verify_suites_cli.py +328 -0
- board_os/workflow.py +967 -0
- cli/__init__.py +0 -0
- cli/_data_types.py +248 -0
- cli/_init_helpers.py +587 -0
- cli/_resources.py +100 -0
- cli/adapter_registry.py +239 -0
- cli/add_stack.py +315 -0
- cli/aggregator.py +438 -0
- cli/board_commands.py +1218 -0
- cli/brain_commands.py +255 -0
- cli/cognition.py +345 -0
- cli/config_composer.py +349 -0
- cli/core_version.py +41 -0
- cli/cron_commands.py +278 -0
- cli/db_reset.py +298 -0
- cli/doc_commands.py +111 -0
- cli/doctor.py +2953 -0
- cli/doctor_board.py +365 -0
- cli/doctor_extras.py +1121 -0
- cli/doctor_graph.py +608 -0
- cli/doctor_tokens.py +254 -0
- cli/graph_commands.py +1265 -0
- cli/hook_renderer.py +393 -0
- cli/hub_commands.py +580 -0
- cli/list_adapters.py +79 -0
- cli/list_stacks.py +105 -0
- cli/logs_commands.py +89 -0
- cli/main.py +3070 -0
- cli/materialize_file.py +65 -0
- cli/mcp_start.py +153 -0
- cli/module_commands.py +513 -0
- cli/pr_commands.py +2024 -0
- cli/preset_commands.py +126 -0
- cli/preset_registry.py +171 -0
- cli/project_overrides.py +119 -0
- cli/registry.py +365 -0
- cli/remove_stack.py +492 -0
- cli/renderer.py +620 -0
- cli/setup.py +464 -0
- cli/skill_commands.py +689 -0
- cli/skill_registry.py +235 -0
- cli/skills_list.py +332 -0
- cli/stack_lint.py +351 -0
- cli/stack_registry.py +688 -0
- cli/subsystems.py +335 -0
- cli/sync_all.py +310 -0
- cli/tail_command.py +410 -0
- cli/update.py +608 -0
- cli/verify_since_edit.py +439 -0
- coding_os-0.3.2.dist-info/METADATA +508 -0
- coding_os-0.3.2.dist-info/RECORD +1304 -0
- coding_os-0.3.2.dist-info/WHEEL +5 -0
- coding_os-0.3.2.dist-info/entry_points.txt +5 -0
- coding_os-0.3.2.dist-info/licenses/LICENSE +201 -0
- coding_os-0.3.2.dist-info/top_level.txt +10 -0
- core/__init__.py +0 -0
- core/board_os/__init__.py +39 -0
- core/board_os/_agent_runtime.py +256 -0
- core/board_os/config.py +421 -0
- core/board_os/git_coherence.py +107 -0
- core/board_os/hub_adapter_manifest.py +140 -0
- core/board_os/mcp_tools.py +3228 -0
- core/board_os/migration.py +166 -0
- core/board_os/parser.py +317 -0
- core/board_os/presence.py +156 -0
- core/board_os/sync.py +320 -0
- core/board_os/transition-gates.yaml +176 -0
- core/board_os/transition_gates.py +224 -0
- core/board_os/transition_gates_cli.py +272 -0
- core/board_os/transition_gates_validator.py +551 -0
- core/board_os/verify-suites.yaml +113 -0
- core/board_os/verify_suites.py +126 -0
- core/board_os/verify_suites_cli.py +328 -0
- core/board_os/workflow.py +967 -0
- core/commands/board.md +27 -0
- core/commands/classify.md +23 -0
- core/commands/compose.md +23 -0
- core/commands/daily.md +31 -0
- core/commands/diagnose.md +7 -0
- core/commands/memory-search.md +23 -0
- core/commands/new-project.md +33 -0
- core/commands/retro.md +38 -0
- core/commands/review.md +14 -0
- core/commands/task.md +17 -0
- core/commands/verify.md +34 -0
- core/docs/thinking_os-final-edition.md +1449 -0
- core/doctor-config.yaml +74 -0
- core/graph_os/__init__.py +29 -0
- core/graph_os/backend.py +233 -0
- core/graph_os/backends/__init__.py +13 -0
- core/graph_os/backends/sqlite_backend.py +1053 -0
- core/graph_os/bench/__init__.py +17 -0
- core/graph_os/bench/fixtures.py +56 -0
- core/graph_os/bench/harness.py +95 -0
- core/graph_os/bench/persian_precision.py +142 -0
- core/graph_os/bench/scale_500k.py +120 -0
- core/graph_os/bench/token_cost.py +170 -0
- core/graph_os/bench/viewer_fps.py +110 -0
- core/graph_os/communities.py +410 -0
- core/graph_os/enterprise.py +218 -0
- core/graph_os/entry_points.py +226 -0
- core/graph_os/extractors/__init__.py +25 -0
- core/graph_os/extractors/code_generic.py +914 -0
- core/graph_os/extractors/code_go.py +1422 -0
- core/graph_os/extractors/code_json.py +340 -0
- core/graph_os/extractors/code_php.py +979 -0
- core/graph_os/extractors/code_python.py +1454 -0
- core/graph_os/extractors/code_shell.py +538 -0
- core/graph_os/extractors/code_toml.py +302 -0
- core/graph_os/extractors/code_ts.py +1665 -0
- core/graph_os/extractors/code_yaml.py +394 -0
- core/graph_os/extractors/contracts.py +1592 -0
- core/graph_os/extractors/md_links.py +890 -0
- core/graph_os/extractors/task_deps.py +345 -0
- core/graph_os/groups/__init__.py +22 -0
- core/graph_os/groups/cross_repo.py +156 -0
- core/graph_os/groups/manifest.py +141 -0
- core/graph_os/ingest/__init__.py +19 -0
- core/graph_os/ingest/base.py +306 -0
- core/graph_os/ingest/github.py +112 -0
- core/graph_os/ingest/zip.py +95 -0
- core/graph_os/toolchain.py +393 -0
- core/graph_os/tools/__init__.py +9 -0
- core/graph_os/tools/graph.py +5573 -0
- core/graph_os/tools/reindex_dispatch.py +730 -0
- core/graph_os/tree_sitter_overlay.py +235 -0
- core/graph_os/types.py +252 -0
- core/graph_os/vec_index.py +277 -0
- core/graph_os/viewer/__init__.py +12 -0
- core/graph_os/viewer/exporter.py +93 -0
- core/graph_os/viewer/template.py +189 -0
- core/hooks/_helpers/_paths.py +40 -0
- core/hooks/_helpers/advance_role.py +72 -0
- core/hooks/_helpers/auto_compose.py +228 -0
- core/hooks/_helpers/auto_validate_lessons.py +55 -0
- core/hooks/_helpers/branch_guard_check.py +796 -0
- core/hooks/_helpers/check_commit_message.py +108 -0
- core/hooks/_helpers/check_dangerous_rm.py +80 -0
- core/hooks/_helpers/check_git_bypass.py +154 -0
- core/hooks/_helpers/check_git_destructive.py +77 -0
- core/hooks/_helpers/check_settings_write.py +97 -0
- core/hooks/_helpers/consume_override.py +51 -0
- core/hooks/_helpers/context_budget.py +77 -0
- core/hooks/_helpers/cos_say_json.py +103 -0
- core/hooks/_helpers/destructive_edit_check.py +163 -0
- core/hooks/_helpers/detect_status_transition.py +82 -0
- core/hooks/_helpers/digest_regen.py +56 -0
- core/hooks/_helpers/doc_sync_check.py +498 -0
- core/hooks/_helpers/drain_embedding_outbox.py +52 -0
- core/hooks/_helpers/extract_additional_context.py +51 -0
- core/hooks/_helpers/extract_commit_msg_arg.py +74 -0
- core/hooks/_helpers/git_command_parse.py +424 -0
- core/hooks/_helpers/git_settings_fields.py +47 -0
- core/hooks/_helpers/graph_context_match.py +37 -0
- core/hooks/_helpers/graph_marker_check.py +70 -0
- core/hooks/_helpers/jit_recall.py +56 -0
- core/hooks/_helpers/json_field.py +41 -0
- core/hooks/_helpers/narrative_signal.py +59 -0
- core/hooks/_helpers/observation_count.py +31 -0
- core/hooks/_helpers/pre_commit_batch.py +177 -0
- core/hooks/_helpers/pre_commit_fake_input.py +42 -0
- core/hooks/_helpers/presence_gc.py +102 -0
- core/hooks/_helpers/presence_write.py +167 -0
- core/hooks/_helpers/recover_indirect.py +35 -0
- core/hooks/_helpers/routing_evolution.py +104 -0
- core/hooks/_helpers/session_recap.py +72 -0
- core/hooks/_helpers/skill_primer.py +229 -0
- core/hooks/_helpers/task_sync.py +59 -0
- core/hooks/_helpers/tool_failure_capture.py +147 -0
- core/hooks/_helpers/trajectory_autosnap.py +278 -0
- core/hooks/_helpers/trajectory_startup.py +62 -0
- core/hooks/_helpers/turn_summary.py +82 -0
- core/hooks/_helpers/validate_task_frontmatter.py +98 -0
- core/hooks/_helpers/wip_limit_check.py +103 -0
- core/hooks/_helpers/wip_lines.py +53 -0
- core/hooks/_helpers/work_log_append.py +89 -0
- core/hooks/_helpers/wrap_dispatch_output.py +82 -0
- core/hooks/advance-role.sh +48 -0
- core/hooks/agent-presence.sh +179 -0
- core/hooks/auto-brain-decay.sh +184 -0
- core/hooks/auto-compose-roles.sh +83 -0
- core/hooks/auto-graph-reconcile-shell.sh +119 -0
- core/hooks/auto-regen-doc-index.sh +120 -0
- core/hooks/auto-reindex-docs.sh +130 -0
- core/hooks/auto-task-sync.sh +56 -0
- core/hooks/auto-trace-rotate.sh +88 -0
- core/hooks/block-bad-patterns.sh +212 -0
- core/hooks/block-dangerous-commands.sh +182 -0
- core/hooks/block-hardcoded-literals.sh +90 -0
- core/hooks/block-migration-conflict.sh +114 -0
- core/hooks/block-protected-files.sh +129 -0
- core/hooks/block-secrets.sh +185 -0
- core/hooks/block-shared-tree-edit.sh +75 -0
- core/hooks/block-uv-heredoc.sh +78 -0
- core/hooks/branch-guard.sh +122 -0
- core/hooks/capture-observation.sh +76 -0
- core/hooks/capture-tool-failure.sh +24 -0
- core/hooks/capture-work-log.sh +89 -0
- core/hooks/check-agents-md-refs.sh +75 -0
- core/hooks/check-agents-md-size.sh +49 -0
- core/hooks/check-capture-worked.sh +148 -0
- core/hooks/check-doc-size.sh +61 -0
- core/hooks/check-mcp-extras.sh +92 -0
- core/hooks/check-state.sh +87 -0
- core/hooks/classify-task-mode.sh +103 -0
- core/hooks/cos-env.sh +1301 -0
- core/hooks/drain-embedding-outbox.sh +24 -0
- core/hooks/enforce-anti-ambiguity.sh +74 -0
- core/hooks/enforce-commit-message.sh +73 -0
- core/hooks/enforce-doc-anchor.sh +224 -0
- core/hooks/enforce-doc-sync.sh +206 -0
- core/hooks/enforce-graph-context.sh +89 -0
- core/hooks/enforce-graph-first-read.sh +94 -0
- core/hooks/enforce-memory-check.sh +128 -0
- core/hooks/enforce-rename-plan.sh +78 -0
- core/hooks/enforce-scaffold-boundary.sh +68 -0
- core/hooks/enforce-skill.sh +125 -0
- core/hooks/enforce-task-body.sh +52 -0
- core/hooks/enforce-task-start.sh +81 -0
- core/hooks/enforce-task-transition.sh +75 -0
- core/hooks/enforce-template.sh +143 -0
- core/hooks/enforce-verify.sh +112 -0
- core/hooks/enforce-wip-limit.sh +43 -0
- core/hooks/enforce-zoom.sh +69 -0
- core/hooks/ensure-hub-up.sh +67 -0
- core/hooks/inject-mcp-caller-session.sh +70 -0
- core/hooks/jit-recall.sh +65 -0
- core/hooks/link-commit-to-task.sh +143 -0
- core/hooks/lint-task.sh +40 -0
- core/hooks/nudge-docs-first.sh +71 -0
- core/hooks/nudge-git-mode.sh +29 -0
- core/hooks/nudge-graph-os.sh +118 -0
- core/hooks/nudge-learn-narrative.sh +36 -0
- core/hooks/nudge-model-routing.sh +32 -0
- core/hooks/nudge-reentry.sh +101 -0
- core/hooks/nudge-reuse-first.sh +68 -0
- core/hooks/nudge-task-discovery.sh +81 -0
- core/hooks/nudge-thinking-os.sh +109 -0
- core/hooks/pr-reap.sh +23 -0
- core/hooks/reclaim-sweep.sh +58 -0
- core/hooks/record-verify-auto.sh +77 -0
- core/hooks/record-verify.sh +74 -0
- core/hooks/regen-reminder.sh +104 -0
- core/hooks/registry.yaml +1262 -0
- core/hooks/remind-daily.sh +27 -0
- core/hooks/remind-dogfood.sh +70 -0
- core/hooks/remind-learn-validate.sh +94 -0
- core/hooks/rules-primer.sh +50 -0
- core/hooks/search-enforce-inventory.sh +108 -0
- core/hooks/search-verify-remaining.sh +132 -0
- core/hooks/session-context.sh +729 -0
- core/hooks/session-end.sh +145 -0
- core/hooks/session-skill-primer.sh +43 -0
- core/hooks/snapshot-transcript.sh +56 -0
- core/hooks/sync-task-current.sh +85 -0
- core/hooks/test-first-reminder.sh +120 -0
- core/hooks/test-governor.sh +173 -0
- core/hooks/thinking_os-gate.sh +52 -0
- core/hooks/track-backtrack.sh +35 -0
- core/hooks/track-discovery.sh +121 -0
- core/hooks/track-skill.sh +53 -0
- core/hooks/validate-task-frontmatter.sh +49 -0
- core/hooks/verify-rename-callers.sh +119 -0
- core/hooks/warn-abandoned-task.sh +99 -0
- core/hooks/warn-destructive-edit.sh +64 -0
- core/hooks/warn-diff-size.sh +43 -0
- core/hooks/warn-graph-empty.sh +81 -0
- core/hooks/warn-mcp-down.sh +190 -0
- core/hooks/write-state.sh +55 -0
- core/logging_os/__init__.py +33 -0
- core/logging_os/api.py +127 -0
- core/logging_os/bridge.py +80 -0
- core/logging_os/config.py +172 -0
- core/logging_os/fingerprint.py +25 -0
- core/logging_os/redact.py +53 -0
- core/logging_os/render.py +83 -0
- core/logging_os/sinks.py +164 -0
- core/rules/anti-overengineering.md +44 -0
- core/rules/api-contract-discipline.md +41 -0
- core/rules/dimension-registry.md +155 -0
- core/rules/git-workflow.md +57 -0
- core/rules/memory.md +46 -0
- core/rules/model-routing.md +22 -0
- core/rules/skill-enforcement.md +75 -0
- core/rules/test-discipline.md +38 -0
- core/rules/thinking_os.md +48 -0
- core/rules/transparency-banner.md +37 -0
- core/runtime_paths.yaml +36 -0
- core/scaffold_manifest.json +14430 -0
- core/scheduled/__init__.py +0 -0
- core/scheduled/_activity.py +126 -0
- core/scheduled/_state.py +113 -0
- core/scheduled/config.py +86 -0
- core/scheduled/dep_reconcile.py +135 -0
- core/scheduled/error_sweep.py +137 -0
- core/scheduled/nightly.py +930 -0
- core/scheduled/responsive_extract.py +65 -0
- core/schemas/adapter.schema.json +269 -0
- core/schemas/preset.schema.json +50 -0
- core/schemas/skill.schema.json +81 -0
- core/schemas/stack.schema.json +404 -0
- core/scripts/_lib.sh +9 -0
- core/scripts/docs-lint.sh +228 -0
- core/scripts/docs-nav-fix.sh +133 -0
- core/scripts/docs-staleness-check.sh +154 -0
- core/scripts/install-adapter.sh +266 -0
- core/scripts/link-stack-skills.sh +52 -0
- core/scripts/log-latest.sh +106 -0
- core/scripts/log-search.sh +89 -0
- core/scripts/log-write.sh +134 -0
- core/scripts/ref-resolve.sh +71 -0
- core/skills/a11y/SKILL.md +305 -0
- core/skills/a11y/assets/a11y-checklist.md +137 -0
- core/skills/a11y/references/aria-and-focus.md +247 -0
- core/skills/a11y/references/rn-accessibility.md +343 -0
- core/skills/a11y/references/screen-reader-testing.md +190 -0
- core/skills/agent-memory/SKILL.md +191 -0
- core/skills/agent-memory/assets/memory-checklist.md +21 -0
- core/skills/agent-memory/references/memory-recipes.md +57 -0
- core/skills/api-design/SKILL.md +232 -0
- core/skills/api-design/assets/api-design-checklist.md +110 -0
- core/skills/api-design/references/error-envelope.md +381 -0
- core/skills/api-design/references/idempotency-pagination.md +312 -0
- core/skills/api-design/references/rest-contracts.md +426 -0
- core/skills/auth-patterns/SKILL.md +352 -0
- core/skills/auth-patterns/assets/auth-checklist.md +118 -0
- core/skills/auth-patterns/references/jwt-and-service-tokens.md +343 -0
- core/skills/auth-patterns/references/passkeys-2fa.md +289 -0
- core/skills/auth-patterns/references/sessions-vs-jwt.md +230 -0
- core/skills/auth-patterns/scripts/cookie-flag-check.py +146 -0
- core/skills/backend-fundamentals/SKILL.md +238 -0
- core/skills/backend-fundamentals/assets/backend-checklist.md +27 -0
- core/skills/backend-fundamentals/references/backend-patterns.md +56 -0
- core/skills/backend-fundamentals/scripts/check_layering.py +83 -0
- core/skills/clean-code/SKILL.md +642 -0
- core/skills/clean-code/scripts/audit-fail-closed.py +167 -0
- core/skills/codebase-explorer/SKILL.md +89 -0
- core/skills/codebase-explorer/assets/reading-checklist.md +24 -0
- core/skills/codebase-explorer/references/reading-strategies.md +52 -0
- core/skills/codebase-explorer/scripts/outline.py +99 -0
- core/skills/db-design/SKILL.md +327 -0
- core/skills/db-design/assets/migration-template.sql +49 -0
- core/skills/db-design/references/migration-discipline.md +290 -0
- core/skills/db-design/references/postgres-patterns.md +340 -0
- core/skills/db-design/scripts/migration-safety.sh +150 -0
- core/skills/deployment-cicd/SKILL.md +260 -0
- core/skills/deployment-cicd/assets/deploy-checklist.md +26 -0
- core/skills/deployment-cicd/references/pipeline-and-release.md +54 -0
- core/skills/deployment-cicd/scripts/lint_workflow.py +79 -0
- core/skills/docker/SKILL.md +114 -0
- core/skills/docker/assets/dockerfile-checklist.md +31 -0
- core/skills/docker/references/compose-patterns.md +66 -0
- core/skills/docker/references/dockerfile-optimization.md +64 -0
- core/skills/docker/scripts/lint_dockerfile.sh +48 -0
- core/skills/docker/versions.json +16 -0
- core/skills/end-to-end-testing/SKILL.md +101 -0
- core/skills/end-to-end-testing/assets/e2e-checklist.md +23 -0
- core/skills/end-to-end-testing/references/maestro.md +63 -0
- core/skills/end-to-end-testing/references/playwright.md +68 -0
- core/skills/end-to-end-testing/scripts/lint_e2e.py +88 -0
- core/skills/end-to-end-testing/versions.json +16 -0
- core/skills/frontend-design/SKILL.md +76 -0
- core/skills/frontend-design/assets/design-checklist.md +29 -0
- core/skills/frontend-design/references/design-principles.md +65 -0
- core/skills/frontend-design/scripts/check_contrast.py +89 -0
- core/skills/frontend-fundamentals/SKILL.md +213 -0
- core/skills/frontend-fundamentals/assets/frontend-checklist.md +25 -0
- core/skills/frontend-fundamentals/references/rendering-and-state.md +66 -0
- core/skills/frontend-fundamentals/scripts/check_frontend.py +86 -0
- core/skills/graph-explorer/SKILL.md +215 -0
- core/skills/graph-explorer/scripts/explain-impact.sh +64 -0
- core/skills/graphql/SKILL.md +187 -0
- core/skills/grpc-microservices/SKILL.md +174 -0
- core/skills/hexagonal-architecture/SKILL.md +199 -0
- core/skills/hexagonal-architecture/assets/folder-scaffold.md +233 -0
- core/skills/hexagonal-architecture/references/anti-patterns.md +129 -0
- core/skills/hexagonal-architecture/references/go-fiber-layout.md +429 -0
- core/skills/hexagonal-architecture/references/python-fastapi-layout.md +453 -0
- core/skills/hexagonal-architecture/references/react-native-layout.md +428 -0
- core/skills/i18n/SKILL.md +126 -0
- core/skills/incident-response/SKILL.md +225 -0
- core/skills/incident-response/assets/incident-checklist.md +29 -0
- core/skills/incident-response/references/severity-and-runbook.md +53 -0
- core/skills/incident-response/scripts/classify_severity.py +86 -0
- core/skills/linux-sysadmin/SKILL.md +115 -0
- core/skills/linux-sysadmin/assets/hardening-checklist.md +29 -0
- core/skills/linux-sysadmin/references/ssh-hardening.md +62 -0
- core/skills/linux-sysadmin/references/systemd-and-services.md +77 -0
- core/skills/linux-sysadmin/scripts/triage.sh +50 -0
- core/skills/linux-sysadmin/versions.json +17 -0
- core/skills/llm-patterns/SKILL.md +410 -0
- core/skills/llm-patterns/assets/llm-feature-checklist.md +26 -0
- core/skills/llm-patterns/references/rag-and-evals.md +59 -0
- core/skills/llm-patterns/scripts/estimate_tokens.py +75 -0
- core/skills/messaging-queues/SKILL.md +142 -0
- core/skills/mobile-fundamentals/SKILL.md +406 -0
- core/skills/mobile-fundamentals/assets/mobile-launch-checklist.md +130 -0
- core/skills/mobile-fundamentals/references/navigation-and-deep-links.md +337 -0
- core/skills/mobile-fundamentals/references/offline-sync.md +339 -0
- core/skills/node-backend/SKILL.md +114 -0
- core/skills/node-backend/assets/node-checklist.md +25 -0
- core/skills/node-backend/references/async-and-errors.md +67 -0
- core/skills/node-backend/references/event-loop.md +65 -0
- core/skills/node-backend/scripts/check_package.py +78 -0
- core/skills/node-backend/versions.json +17 -0
- core/skills/observability/SKILL.md +289 -0
- core/skills/observability/assets/observability-checklist.md +27 -0
- core/skills/observability/references/instrumentation.md +57 -0
- core/skills/observability/scripts/lint_logging.py +77 -0
- core/skills/payments/SKILL.md +102 -0
- core/skills/performance/SKILL.md +305 -0
- core/skills/performance/assets/perf-checklist.md +143 -0
- core/skills/performance/references/mobile-performance.md +249 -0
- core/skills/performance/references/web-vitals.md +209 -0
- core/skills/php/SKILL.md +116 -0
- core/skills/php/assets/php-checklist.md +26 -0
- core/skills/php/references/modern-php.md +64 -0
- core/skills/php/references/security.md +72 -0
- core/skills/php/scripts/scan_php_smells.py +99 -0
- core/skills/php/versions.json +9 -0
- core/skills/pr-mode-driver/SKILL.md +65 -0
- core/skills/realtime-websockets/SKILL.md +152 -0
- core/skills/redis/SKILL.md +105 -0
- core/skills/redis/assets/redis-checklist.md +27 -0
- core/skills/redis/references/operations.md +66 -0
- core/skills/redis/references/patterns.md +62 -0
- core/skills/redis/scripts/analyze_info.py +101 -0
- core/skills/redis/versions.json +9 -0
- core/skills/search/SKILL.md +91 -0
- core/skills/search/references/grep.md +76 -0
- core/skills/search/scripts/verify-count.sh +73 -0
- core/skills/search-infra/SKILL.md +109 -0
- core/skills/security-mobile/SKILL.md +394 -0
- core/skills/security-mobile/assets/mobile-security-checklist.md +117 -0
- core/skills/security-mobile/references/masvs-l1-checklist.md +127 -0
- core/skills/security-web/SKILL.md +217 -0
- core/skills/security-web/assets/security-web-checklist.md +167 -0
- core/skills/security-web/references/owasp-top-10.md +551 -0
- core/skills/security-web/references/supply-chain.md +179 -0
- core/skills/security-web/scripts/csp-check.sh +153 -0
- core/skills/shell-scripting/SKILL.md +128 -0
- core/skills/shell-scripting/assets/script-checklist.md +33 -0
- core/skills/shell-scripting/references/argument-parsing.md +84 -0
- core/skills/shell-scripting/references/bash-robustness.md +78 -0
- core/skills/shell-scripting/scripts/lint_script.sh +53 -0
- core/skills/shell-scripting/scripts/new_script.py +131 -0
- core/skills/shell-scripting/versions.json +23 -0
- core/skills/sql-authoring/SKILL.md +104 -0
- core/skills/sql-authoring/assets/query-review-checklist.md +26 -0
- core/skills/sql-authoring/references/query-patterns.md +89 -0
- core/skills/sql-authoring/references/reading-explain.md +52 -0
- core/skills/sql-authoring/scripts/analyze_plan.py +100 -0
- core/skills/sql-authoring/versions.json +17 -0
- core/skills/state-management/SKILL.md +428 -0
- core/skills/state-management/references/tanstack-query-recipes.md +301 -0
- core/skills/state-management/references/zustand-recipes.md +364 -0
- core/skills/supabase/SKILL.md +108 -0
- core/skills/supabase/assets/supabase-checklist.md +26 -0
- core/skills/supabase/references/realtime-and-storage.md +55 -0
- core/skills/supabase/references/rls-and-auth.md +65 -0
- core/skills/supabase/scripts/check_rls.py +88 -0
- core/skills/supabase/versions.json +9 -0
- core/skills/task-driver/SKILL.md +272 -0
- core/skills/task-driver/scripts/task-lint.sh +163 -0
- core/skills/technical-writing/SKILL.md +85 -0
- core/skills/technical-writing/assets/doc-checklist.md +29 -0
- core/skills/technical-writing/references/doc-anatomy.md +53 -0
- core/skills/technical-writing/references/writing-craft.md +59 -0
- core/skills/technical-writing/scripts/new_doc.py +81 -0
- core/skills/terraform-k8s/SKILL.md +133 -0
- core/skills/testing-strategy/SKILL.md +266 -0
- core/skills/testing-strategy/assets/test-review-checklist.md +25 -0
- core/skills/testing-strategy/references/test-types.md +52 -0
- core/skills/testing-strategy/scripts/coverage_gate.py +79 -0
- core/skills/thinking_os/SKILL.md +288 -0
- core/skills/thinking_os/scripts/classify.sh +122 -0
- core/skills/typescript/SKILL.md +110 -0
- core/skills/typescript/assets/typescript-checklist.md +24 -0
- core/skills/typescript/references/strictness.md +53 -0
- core/skills/typescript/references/type-system.md +86 -0
- core/skills/typescript/scripts/check_tsconfig.py +92 -0
- core/skills/typescript/versions.json +9 -0
- core/subsystems.yaml +202 -0
- core/thinking_os/__init__.py +1 -0
- core/thinking_os/_agent_markers.py +32 -0
- core/thinking_os/agents/README.md +71 -0
- core/thinking_os/agents/analyst.md +139 -0
- core/thinking_os/agents/architect.md +127 -0
- core/thinking_os/agents/debugger.md +111 -0
- core/thinking_os/agents/deployer.md +112 -0
- core/thinking_os/agents/distiller.md +28 -0
- core/thinking_os/agents/documenter.md +101 -0
- core/thinking_os/agents/implementer.md +135 -0
- core/thinking_os/agents/internal/session_observer.md +39 -0
- core/thinking_os/agents/observer.md +100 -0
- core/thinking_os/agents/onboarder.md +81 -0
- core/thinking_os/agents/refactorer.md +123 -0
- core/thinking_os/agents/repairer.md +47 -0
- core/thinking_os/agents/researcher.md +129 -0
- core/thinking_os/agents/reviewer.md +147 -0
- core/thinking_os/agents/security_auditor.md +133 -0
- core/thinking_os/background.py +405 -0
- core/thinking_os/bootstrap_outcomes.py +200 -0
- core/thinking_os/budget.py +302 -0
- core/thinking_os/capture.py +495 -0
- core/thinking_os/cognition.py +516 -0
- core/thinking_os/cognition_schemas.py +517 -0
- core/thinking_os/compress.py +192 -0
- core/thinking_os/concepts.py +233 -0
- core/thinking_os/dashboard.py +159 -0
- core/thinking_os/database.py +2883 -0
- core/thinking_os/decay.py +393 -0
- core/thinking_os/digest.py +295 -0
- core/thinking_os/dispatcher.py +192 -0
- core/thinking_os/dispatcher_helpers.py +48 -0
- core/thinking_os/dispatchers/__init__.py +3 -0
- core/thinking_os/dispatchers/default.py +47 -0
- core/thinking_os/distill.py +192 -0
- core/thinking_os/doc_indexer.py +905 -0
- core/thinking_os/embeddings.py +943 -0
- core/thinking_os/formula_composer.py +556 -0
- core/thinking_os/gate_marker.py +75 -0
- core/thinking_os/graph.py +296 -0
- core/thinking_os/graph_indexer.py +360 -0
- core/thinking_os/health_check.py +517 -0
- core/thinking_os/impact.py +119 -0
- core/thinking_os/memory_gc.py +356 -0
- core/thinking_os/migrator_embeddings.py +318 -0
- core/thinking_os/precision.py +194 -0
- core/thinking_os/presets/registry.yaml +127 -0
- core/thinking_os/record_outcome.py +399 -0
- core/thinking_os/repair.py +105 -0
- core/thinking_os/retrieval_quality.py +239 -0
- core/thinking_os/roles/analyst.yaml +83 -0
- core/thinking_os/roles/architect.yaml +88 -0
- core/thinking_os/roles/debugger.yaml +71 -0
- core/thinking_os/roles/deployer.yaml +71 -0
- core/thinking_os/roles/documenter.yaml +72 -0
- core/thinking_os/roles/implementer.yaml +83 -0
- core/thinking_os/roles/observer.yaml +70 -0
- core/thinking_os/roles/refactorer.yaml +71 -0
- core/thinking_os/roles/researcher.yaml +72 -0
- core/thinking_os/roles/reviewer.yaml +79 -0
- core/thinking_os/roles/security_auditor.yaml +83 -0
- core/thinking_os/roles_state.py +168 -0
- core/thinking_os/sanitizer.py +320 -0
- core/thinking_os/server.py +3160 -0
- core/thinking_os/session_enrich.py +272 -0
- core/thinking_os/session_observe_worker.py +111 -0
- core/thinking_os/session_startup.py +74 -0
- core/thinking_os/session_summary.py +245 -0
- core/thinking_os/situations/registry.yaml +99 -0
- core/thinking_os/task_analyzer.py +462 -0
- core/thinking_os/task_parser.py +342 -0
- core/thinking_os/task_sync.py +73 -0
- core/thinking_os/tools/__init__.py +6 -0
- core/thinking_os/tools/_shared.py +947 -0
- core/thinking_os/tools/cognition.py +1867 -0
- core/thinking_os/tools/docs.py +770 -0
- core/thinking_os/tools/learning.py +2078 -0
- core/thinking_os/tools/logs.py +79 -0
- core/thinking_os/tools/memory.py +840 -0
- core/thinking_os/tools/metrics.py +200 -0
- core/thinking_os/tools/retrieve.py +415 -0
- core/thinking_os/tools/routing.py +658 -0
- core/thinking_os/tools/tasks.py +449 -0
- core/thinking_os/tools/trajectory.py +181 -0
- core/thinking_os/tracing.py +235 -0
- core/web/__init__.py +5 -0
- core/web/_cache.py +118 -0
- core/web/_deps.py +56 -0
- core/web/_envelope.py +85 -0
- core/web/_project_context.py +140 -0
- core/web/chat_providers.py +108 -0
- core/web/init_jobs.py +216 -0
- core/web/routes/__init__.py +25 -0
- core/web/routes/_bounded_read.py +76 -0
- core/web/routes/board.py +1089 -0
- core/web/routes/cognition.py +1838 -0
- core/web/routes/config.py +635 -0
- core/web/routes/graph.py +513 -0
- core/web/routes/health.py +180 -0
- core/web/routes/hooks.py +288 -0
- core/web/routes/hub.py +1219 -0
- core/web/routes/logs.py +374 -0
- core/web/routes/metrics.py +43 -0
- core/web/routes/observability.py +400 -0
- core/web/routes/patterns.py +227 -0
- core/web/routes/presence.py +609 -0
- core/web/routes/roles.py +446 -0
- core/web/routes/scheduled.py +261 -0
- core/web/routes/search.py +238 -0
- core/web/routes/sessions.py +220 -0
- core/web/routes/settings.py +363 -0
- core/web/routes/stream.py +547 -0
- core/web/security.py +157 -0
- core/web/server.py +283 -0
- graph_os/__init__.py +29 -0
- graph_os/backend.py +233 -0
- graph_os/backends/__init__.py +13 -0
- graph_os/backends/sqlite_backend.py +1053 -0
- graph_os/communities.py +410 -0
- graph_os/enterprise.py +218 -0
- graph_os/entry_points.py +226 -0
- graph_os/extractors/__init__.py +25 -0
- graph_os/extractors/code_generic.py +914 -0
- graph_os/extractors/code_go.py +1422 -0
- graph_os/extractors/code_json.py +340 -0
- graph_os/extractors/code_php.py +979 -0
- graph_os/extractors/code_python.py +1454 -0
- graph_os/extractors/code_shell.py +538 -0
- graph_os/extractors/code_toml.py +302 -0
- graph_os/extractors/code_ts.py +1665 -0
- graph_os/extractors/code_yaml.py +394 -0
- graph_os/extractors/contracts.py +1592 -0
- graph_os/extractors/md_links.py +890 -0
- graph_os/extractors/task_deps.py +345 -0
- graph_os/groups/__init__.py +22 -0
- graph_os/groups/cross_repo.py +156 -0
- graph_os/groups/manifest.py +141 -0
- graph_os/ingest/__init__.py +19 -0
- graph_os/ingest/base.py +306 -0
- graph_os/ingest/github.py +112 -0
- graph_os/ingest/zip.py +95 -0
- graph_os/toolchain.py +393 -0
- graph_os/tools/__init__.py +9 -0
- graph_os/tools/graph.py +5573 -0
- graph_os/tools/reindex_dispatch.py +730 -0
- graph_os/tree_sitter_overlay.py +235 -0
- graph_os/types.py +252 -0
- graph_os/vec_index.py +277 -0
- graph_os/viewer/__init__.py +12 -0
- graph_os/viewer/exporter.py +93 -0
- graph_os/viewer/template.py +189 -0
- scheduled/__init__.py +0 -0
- scheduled/_activity.py +126 -0
- scheduled/_state.py +113 -0
- scheduled/config.py +86 -0
- scheduled/dep_reconcile.py +135 -0
- scheduled/error_sweep.py +137 -0
- scheduled/nightly.py +930 -0
- scheduled/responsive_extract.py +65 -0
- scripts/__init__.py +4 -0
- scripts/_commit_msg_body.sh +31 -0
- scripts/_post_commit_body.sh +49 -0
- scripts/_pre_commit_body.sh +121 -0
- scripts/_prepare_commit_msg_body.sh +53 -0
- scripts/audit_mcp_tools.py +693 -0
- scripts/bench_sdk_dispatcher.py +177 -0
- scripts/capture_golden.py +169 -0
- scripts/check_graph_phantoms.py +75 -0
- scripts/dev/audit_doc_links.py +359 -0
- scripts/dev/audit_scaffold_module_tags.py +107 -0
- scripts/dev/backfill_doc_headers.py +328 -0
- scripts/dev/backfill_nav_lines.py +119 -0
- scripts/dev/fix_nav_placement.py +106 -0
- scripts/dev/inspect_sdk_options.py +45 -0
- scripts/dev/migrate_check_ids.py +170 -0
- scripts/dev/strip_purpose_blocks.py +154 -0
- scripts/dump_openapi.py +66 -0
- scripts/e2e_dispatch_tool.py +195 -0
- scripts/generate_manifest.py +166 -0
- scripts/golden_sections.py +20 -0
- scripts/graph_demo.py +161 -0
- scripts/install-git-hooks.sh +47 -0
- scripts/migrate_embeddings_minilm_to_bge_m3.py +84 -0
- scripts/operational_eval.py +445 -0
- scripts/probe_agent_session_resolver.py +59 -0
- scripts/prune_deleted_path.py +127 -0
- scripts/refactor_agent_dual_mode.py +171 -0
- scripts/refresh_skill_versions.py +302 -0
- scripts/regen_doc_index.py +209 -0
- scripts/regen_doctor_schema.py +62 -0
- scripts/regen_rules.py +94 -0
- scripts/rename_formulas_to_semantic.py +241 -0
- scripts/smoke_db_connections.py +183 -0
- scripts/smoke_doc_header.py +72 -0
- scripts/smoke_graph_e2e.py +374 -0
- scripts/smoke_sdk_dispatch.py +84 -0
- scripts/smoke_uid_resolver.py +164 -0
- scripts/verify_dispatchers.py +244 -0
- scripts/verify_phase_c_e2e.py +436 -0
- templates/__init__.py +6 -0
- templates/_base/Makefile.base +353 -0
- templates/_base/base.yaml +59 -0
- templates/_base/coding-os.yaml.template +39 -0
- templates/_base/dimension-registry.template.md +68 -0
- templates/_base/domain-config.template.json +46 -0
- templates/_base/fragments/anatomy-map.md.tmpl +11 -0
- templates/_base/fragments/context-discipline.md.tmpl +3 -0
- templates/_base/fragments/core-loop.md.tmpl +52 -0
- templates/_base/fragments/engineering-routing.md.tmpl +3 -0
- templates/_base/fragments/header.md.tmpl +6 -0
- templates/_base/fragments/identity.md.tmpl +3 -0
- templates/_base/fragments/principles.md.tmpl +3 -0
- templates/_base/fragments/retrieval-routing.md.tmpl +23 -0
- templates/_base/fragments/session-handoff.md.tmpl +3 -0
- templates/_base/fragments/skills.md.tmpl +3 -0
- templates/_base/fragments/ssot-map.md.tmpl +3 -0
- templates/_base/fragments/stop-conditions.md.tmpl +3 -0
- templates/_base/fragments/subagent-dispatch.md.tmpl +3 -0
- templates/_base/fragments/task-authoring.md.tmpl +69 -0
- templates/_base/fragments/task-logging.md.tmpl +8 -0
- templates/_base/fragments/tool-routing.md.tmpl +9 -0
- templates/_base/fragments/verification-matrix.md.tmpl +12 -0
- templates/_base/lang/dart/analysis_options.yaml +7 -0
- templates/_base/lang/php/phpcs.xml.dist +10 -0
- templates/_base/lang/python/pyproject.toml +19 -0
- templates/_base/lang/rust/clippy.toml +5 -0
- templates/_base/lang/rust/rustfmt.toml +3 -0
- templates/_base/lang/typescript/eslint.config.js +26 -0
- templates/_base/lang/typescript/tsconfig.json +15 -0
- templates/_base/lang/typescript/vitest.config.ts +10 -0
- templates/_base/scaffold/changes.log +1 -0
- templates/_base/scaffold/docs/00-index.md +55 -0
- templates/_base/scaffold/docs/_meta/feature-dependency-tree.md +30 -0
- templates/_base/scaffold/docs/_meta/foundation-map.md +56 -0
- templates/_base/scaffold/docs/_meta/questions.md +8 -0
- templates/_base/scaffold/docs/_meta/roadmap.md +33 -0
- templates/_base/scaffold/docs/api-contracts/00-index.md +58 -0
- templates/_base/scaffold/docs/api-contracts/error-format.md +58 -0
- templates/_base/scaffold/docs/architecture/00-index.md +42 -0
- templates/_base/scaffold/docs/architecture/adr/00-index.md +39 -0
- templates/_base/scaffold/docs/engineering/00-index.md +9 -0
- templates/_base/scaffold/docs/governance/00-index.md +55 -0
- templates/_base/scaffold/docs/governance/_templates/doc-cheat-sheet.md +202 -0
- templates/_base/scaffold/docs/governance/_templates/playbook-template.md +81 -0
- templates/_base/scaffold/docs/governance/_templates/post-mortem-template.md +85 -0
- templates/_base/scaffold/docs/governance/_templates/runbook-template.md +88 -0
- templates/_base/scaffold/docs/governance/_templates/security-review-template.md +111 -0
- templates/_base/scaffold/docs/governance/_templates/task-detail.md +61 -0
- templates/_base/scaffold/docs/governance/agent-workflow.md +101 -0
- templates/_base/scaffold/docs/governance/anatomy-contract.md +150 -0
- templates/_base/scaffold/docs/governance/critical-rules.md +224 -0
- templates/_base/scaffold/docs/governance/decision-records.md +58 -0
- templates/_base/scaffold/docs/governance/docs-first-protocol.md +157 -0
- templates/_base/scaffold/docs/governance/docs-system.md +151 -0
- templates/_base/scaffold/docs/governance/gdpr-compliance.md +66 -0
- templates/_base/scaffold/docs/governance/mcp-tool-inventory.md +112 -0
- templates/_base/scaffold/docs/governance/risk-register.md +26 -0
- templates/_base/scaffold/docs/governance/scaffold-boundary-contract.md +161 -0
- templates/_base/scaffold/docs/governance/task-lifecycle.md +125 -0
- templates/_base/scaffold/docs/governance/wrapper-derivation.md +50 -0
- templates/_base/scaffold/docs/insights/00-index.md +17 -0
- templates/_base/scaffold/docs/ops/00-index.md +59 -0
- templates/_base/scaffold/docs/ops/runbooks/00-index.md +9 -0
- templates/_base/scaffold/docs/playbooks/00-index.md +12 -0
- templates/_base/scaffold/docs/playbooks/research-validation.md +29 -0
- templates/_base/scaffold/docs/playbooks/security-review.md +41 -0
- templates/_base/scaffold/docs/prd/00-index.md +43 -0
- templates/_base/scaffold/docs/prd/01-snapshot-vision.md +56 -0
- templates/_base/scaffold/docs/workflow/workflow-guide.md +138 -0
- templates/_base/scaffold/src/shared/README.md +23 -0
- templates/_base/skill-enforcement.template.md +14 -0
- templates/_base/task-detail.template.md +61 -0
- templates/_presets/ai-saas.yaml +9 -0
- templates/_presets/django-next.yaml +8 -0
- templates/_presets/dotnet-react.yaml +8 -0
- templates/_presets/flutter-baas.yaml +8 -0
- templates/_presets/go-react.yaml +8 -0
- templates/_presets/hexagonal-product.yaml +16 -0
- templates/_presets/jamstack.yaml +8 -0
- templates/_presets/laravel-vue.yaml +8 -0
- templates/_presets/mean.yaml +8 -0
- templates/_presets/mern.yaml +9 -0
- templates/_presets/nest-angular.yaml +8 -0
- templates/_presets/nextjs-fastapi.yaml +10 -0
- templates/_presets/nuxt-fullstack.yaml +9 -0
- templates/_presets/pern.yaml +9 -0
- templates/_presets/rails-react.yaml +8 -0
- templates/_presets/rn-api.yaml +8 -0
- templates/_presets/rust-svelte.yaml +8 -0
- templates/_presets/spring-react.yaml +8 -0
- templates/_presets/t3-style.yaml +9 -0
- templates/_presets/tall.yaml +8 -0
- templates/_presets/wordpress-cms.yaml +8 -0
- templates/angular/rules/frontend.md +19 -0
- templates/angular/scaffold/docs/engineering/accessibility.md +46 -0
- templates/angular/scaffold/docs/engineering/angular-rules.md +35 -0
- templates/angular/scaffold/docs/playbooks/angular-app.md +42 -0
- templates/angular/scaffold/src/frontend/angular.json +52 -0
- templates/angular/scaffold/src/frontend/package.json +28 -0
- templates/angular/scaffold/src/frontend/src/app/app.component.ts +19 -0
- templates/angular/scaffold/src/frontend/src/app/app.config.ts +22 -0
- templates/angular/scaffold/src/frontend/src/app/app.routes.ts +8 -0
- templates/angular/scaffold/src/frontend/src/app/core/global-error-handler.ts +12 -0
- templates/angular/scaffold/src/frontend/src/app/health/health.component.ts +14 -0
- templates/angular/scaffold/src/frontend/src/app/health/health.service.spec.ts +16 -0
- templates/angular/scaffold/src/frontend/src/app/health/health.service.ts +10 -0
- templates/angular/scaffold/src/frontend/src/index.html +11 -0
- templates/angular/scaffold/src/frontend/src/main.ts +9 -0
- templates/angular/scaffold/src/frontend/src/styles.css +14 -0
- templates/angular/scaffold/src/frontend/tsconfig.app.json +8 -0
- templates/angular/scaffold/src/frontend/tsconfig.json +27 -0
- templates/angular/scaffold/src/frontend/tsconfig.spec.json +8 -0
- templates/angular/scaffold-boundary.yaml +27 -0
- templates/angular/skills/angular/SKILL.md +79 -0
- templates/angular/skills/angular/references/anatomy.md +69 -0
- templates/angular/stack.yaml +75 -0
- templates/aspnet-core/rules/backend.md +20 -0
- templates/aspnet-core/scaffold/docs/engineering/aspnet-core-rules.md +36 -0
- templates/aspnet-core/scaffold/docs/playbooks/aspnet-core-service.md +40 -0
- templates/aspnet-core/scaffold/src/backend/Backend.csproj +11 -0
- templates/aspnet-core/scaffold/src/backend/Backend.sln +27 -0
- templates/aspnet-core/scaffold/src/backend/Common/ExceptionHandlingMiddleware.cs +35 -0
- templates/aspnet-core/scaffold/src/backend/Features/Health/HealthEndpoints.cs +10 -0
- templates/aspnet-core/scaffold/src/backend/Features/Health/HealthService.cs +9 -0
- templates/aspnet-core/scaffold/src/backend/Program.cs +22 -0
- templates/aspnet-core/scaffold/src/backend/tests/Backend.Tests/Backend.Tests.csproj +22 -0
- templates/aspnet-core/scaffold/src/backend/tests/Backend.Tests/HealthServiceTests.cs +15 -0
- templates/aspnet-core/scaffold-boundary.yaml +24 -0
- templates/aspnet-core/skills/aspnet-core/SKILL.md +80 -0
- templates/aspnet-core/skills/aspnet-core/references/anatomy.md +65 -0
- templates/aspnet-core/stack.yaml +68 -0
- templates/astro/rules/frontend.md +20 -0
- templates/astro/scaffold/docs/engineering/astro-rules.md +40 -0
- templates/astro/scaffold/docs/playbooks/astro-app.md +57 -0
- templates/astro/scaffold/docs/playbooks/content-seo.md +37 -0
- templates/astro/scaffold/src/frontend/astro.config.mjs +10 -0
- templates/astro/scaffold/src/frontend/package.json +23 -0
- templates/astro/scaffold/src/frontend/src/components/Greeting.astro +13 -0
- templates/astro/scaffold/src/frontend/src/content/posts/hello.md +10 -0
- templates/astro/scaffold/src/frontend/src/content.config.ts +19 -0
- templates/astro/scaffold/src/frontend/src/lib/problem.test.ts +39 -0
- templates/astro/scaffold/src/frontend/src/lib/problem.ts +30 -0
- templates/astro/scaffold/src/frontend/src/pages/api/health.ts +13 -0
- templates/astro/scaffold/src/frontend/src/pages/index.astro +21 -0
- templates/astro/scaffold/src/frontend/tsconfig.json +9 -0
- templates/astro/scaffold/src/frontend/vitest.config.ts +10 -0
- templates/astro/scaffold-boundary.yaml +28 -0
- templates/astro/skills/astro/SKILL.md +71 -0
- templates/astro/skills/astro/references/anatomy.md +66 -0
- templates/astro/stack.yaml +75 -0
- templates/csharp-plain/scaffold/src/backend/Backend.csproj +12 -0
- templates/csharp-plain/scaffold/src/backend/Program.cs +1 -0
- templates/csharp-plain/scaffold-boundary.yaml +23 -0
- templates/csharp-plain/stack.yaml +50 -0
- templates/django/rules/backend.md +18 -0
- templates/django/scaffold/docs/engineering/anti-ambiguity.md +74 -0
- templates/django/scaffold/docs/engineering/backend-rules.md +133 -0
- templates/django/scaffold/docs/engineering/glossary.md +51 -0
- templates/django/scaffold/docs/engineering/logging-standards.md +107 -0
- templates/django/scaffold/docs/engineering/naming-conventions.md +68 -0
- templates/django/scaffold/docs/engineering/secrets-rotation-runbook.md +142 -0
- templates/django/scaffold/docs/playbooks/backend-api.md +119 -0
- templates/django/scaffold/src/backend/config/__init__.py +0 -0
- templates/django/scaffold/src/backend/config/settings.py +31 -0
- templates/django/scaffold/src/backend/config/urls.py +11 -0
- templates/django/scaffold/src/backend/config/wsgi.py +6 -0
- templates/django/scaffold/src/backend/manage.py +14 -0
- templates/django/scaffold/src/backend/pyproject.toml +37 -0
- templates/django/scaffold/src/backend/tests/test_health.py +4 -0
- templates/django/scaffold-boundary.yaml +25 -0
- templates/django/skills/python-django/SKILL.md +450 -0
- templates/django/skills/python-django/references/anatomy.md +117 -0
- templates/django/skills/python-django/scripts/new_endpoint.py +89 -0
- templates/django/stack.yaml +73 -0
- templates/fastapi/rules/backend.md +18 -0
- templates/fastapi/scaffold/docs/engineering/fastapi-rules.md +37 -0
- templates/fastapi/scaffold/docs/playbooks/fastapi-service.md +30 -0
- templates/fastapi/scaffold/src/backend/app/__init__.py +0 -0
- templates/fastapi/scaffold/src/backend/app/main.py +8 -0
- templates/fastapi/scaffold/src/backend/pyproject.toml +39 -0
- templates/fastapi/scaffold/src/backend/tests/test_health.py +11 -0
- templates/fastapi/scaffold-boundary.yaml +25 -0
- templates/fastapi/skills/python-fastapi/SKILL.md +75 -0
- templates/fastapi/skills/python-fastapi/references/anatomy.md +117 -0
- templates/fastapi/skills/python-fastapi/scripts/new_endpoint.py +101 -0
- templates/fastapi/stack.yaml +57 -0
- templates/flutter/rules/mobile.md +26 -0
- templates/flutter/scaffold/docs/engineering/flutter-rules.md +35 -0
- templates/flutter/scaffold/docs/playbooks/flutter-app.md +45 -0
- templates/flutter/scaffold/src/mobile/lib/core/error_mapper.dart +17 -0
- templates/flutter/scaffold/src/mobile/lib/core/router.dart +13 -0
- templates/flutter/scaffold/src/mobile/lib/main.dart +22 -0
- templates/flutter/scaffold/src/mobile/lib/screens/health_screen.dart +32 -0
- templates/flutter/scaffold/src/mobile/lib/services/health_service.dart +11 -0
- templates/flutter/scaffold/src/mobile/lib/state/health_provider.dart +13 -0
- templates/flutter/scaffold/src/mobile/pubspec.yaml +22 -0
- templates/flutter/scaffold/src/mobile/test/health_provider_test.dart +90 -0
- templates/flutter/scaffold-boundary.yaml +28 -0
- templates/flutter/skills/flutter/SKILL.md +76 -0
- templates/flutter/skills/flutter/references/anatomy.md +64 -0
- templates/flutter/stack.yaml +70 -0
- templates/go/rules/backend.md +19 -0
- templates/go/scaffold/docs/engineering/go-rules.md +45 -0
- templates/go/scaffold/docs/playbooks/go-service.md +30 -0
- templates/go/scaffold/src/backend/cmd/api/main.go +22 -0
- templates/go/scaffold/src/backend/cmd/api/main_test.go +20 -0
- templates/go/scaffold/src/backend/go.mod +3 -0
- templates/go/scaffold-boundary.yaml +25 -0
- templates/go/skills/go-patterns/SKILL.md +68 -0
- templates/go/skills/go-patterns/assets/go-checklist.md +29 -0
- templates/go/skills/go-patterns/references/anatomy.md +115 -0
- templates/go/skills/go-patterns/references/go-2026-idioms.md +92 -0
- templates/go/skills/go-patterns/scripts/new_endpoint.py +117 -0
- templates/go/skills/go-patterns/versions.json +16 -0
- templates/go/stack.yaml +54 -0
- templates/go-fiber/rules/backend.md +20 -0
- templates/go-fiber/scaffold/docs/engineering/fiber-rules.md +97 -0
- templates/go-fiber/scaffold/docs/playbooks/fiber-service.md +149 -0
- templates/go-fiber/scaffold/src/backend/cmd/api/main.go +21 -0
- templates/go-fiber/scaffold/src/backend/cmd/api/main_test.go +17 -0
- templates/go-fiber/scaffold/src/backend/go.mod +23 -0
- templates/go-fiber/scaffold/src/backend/go.sum +49 -0
- templates/go-fiber/scaffold-boundary.yaml +26 -0
- templates/go-fiber/skills/go-fiber/SKILL.md +203 -0
- templates/go-fiber/skills/go-fiber/assets/fiber-checklist.md +26 -0
- templates/go-fiber/skills/go-fiber/references/anatomy.md +116 -0
- templates/go-fiber/skills/go-fiber/references/fiber-v3-patterns.md +89 -0
- templates/go-fiber/skills/go-fiber/scripts/new_endpoint.py +107 -0
- templates/go-fiber/skills/go-fiber/versions.json +16 -0
- templates/go-fiber/stack.yaml +59 -0
- templates/go-plain/scaffold/src/backend/go.mod +3 -0
- templates/go-plain/scaffold/src/backend/main.go +7 -0
- templates/go-plain/scaffold-boundary.yaml +22 -0
- templates/go-plain/stack.yaml +51 -0
- templates/java-plain/scaffold/src/backend/mvnw +302 -0
- templates/java-plain/scaffold/src/backend/pom.xml +41 -0
- templates/java-plain/scaffold/src/backend/src/main/java/com/example/app/Main.java +10 -0
- templates/java-plain/scaffold-boundary.yaml +23 -0
- templates/java-plain/stack.yaml +51 -0
- templates/laravel/rules/backend.md +20 -0
- templates/laravel/scaffold/docs/engineering/laravel-rules.md +28 -0
- templates/laravel/scaffold/docs/playbooks/laravel-service.md +28 -0
- templates/laravel/scaffold/src/backend/app/Exceptions/Handler.php +27 -0
- templates/laravel/scaffold/src/backend/app/Http/Controllers/HealthController.php +15 -0
- templates/laravel/scaffold/src/backend/app/Support/HealthStatus.php +14 -0
- templates/laravel/scaffold/src/backend/composer.json +24 -0
- templates/laravel/scaffold/src/backend/phpunit.xml +10 -0
- templates/laravel/scaffold/src/backend/public/index.php +8 -0
- templates/laravel/scaffold/src/backend/routes/api.php +7 -0
- templates/laravel/scaffold/src/backend/tests/Unit/HealthStatusTest.php +16 -0
- templates/laravel/scaffold-boundary.yaml +23 -0
- templates/laravel/skills/laravel/SKILL.md +56 -0
- templates/laravel/skills/laravel/references/anatomy.md +65 -0
- templates/laravel/stack.yaml +66 -0
- templates/meta/rules/graph-first.md +27 -0
- templates/meta/rules/hook-author.md +19 -0
- templates/meta/rules/mcp-tool-author.md +18 -0
- templates/meta/rules/meta-engineering.md +17 -0
- templates/meta/scaffold-boundary.yaml +55 -0
- templates/meta/skills/claude-sdk-integration/SKILL.md +163 -0
- templates/meta/skills/claude-sdk-integration/assets/sdk-checklist.md +27 -0
- templates/meta/skills/claude-sdk-integration/scripts/check_model_ids.py +97 -0
- templates/meta/skills/graph-os-authoring/SKILL.md +278 -0
- templates/meta/skills/graph-os-authoring/assets/graph-os-checklist.md +25 -0
- templates/meta/skills/graph-os-authoring/scripts/new_extractor.py +76 -0
- templates/meta/skills/hook-authoring/SKILL.md +292 -0
- templates/meta/skills/hook-authoring/assets/hook-checklist.md +30 -0
- templates/meta/skills/hook-authoring/scripts/new_hook.sh +75 -0
- templates/meta/skills/mcp-tool-authoring/SKILL.md +301 -0
- templates/meta/skills/mcp-tool-authoring/assets/mcp-tool-checklist.md +29 -0
- templates/meta/skills/mcp-tool-authoring/scripts/new_tool.py +74 -0
- templates/meta/skills/meta-engineering/SKILL.md +151 -0
- templates/meta/skills/meta-engineering/assets/meta-edit-checklist.md +28 -0
- templates/meta/skills/meta-engineering/scripts/which_layer.py +61 -0
- templates/meta/skills/python-meta-server/SKILL.md +162 -0
- templates/meta/skills/python-meta-server/assets/meta-server-checklist.md +28 -0
- templates/meta/skills/python-meta-server/scripts/check_envelope.py +91 -0
- templates/meta/skills/react-vite-hub/SKILL.md +140 -0
- templates/meta/skills/react-vite-hub/assets/hub-ui-checklist.md +23 -0
- templates/meta/skills/react-vite-hub/scripts/check_vite_env.py +73 -0
- templates/meta/stack.yaml +119 -0
- templates/nestjs/rules/backend.md +20 -0
- templates/nestjs/scaffold/docs/engineering/nestjs-rules.md +33 -0
- templates/nestjs/scaffold/docs/playbooks/nestjs-service.md +39 -0
- templates/nestjs/scaffold/src/backend/nest-cli.json +5 -0
- templates/nestjs/scaffold/src/backend/package.json +28 -0
- templates/nestjs/scaffold/src/backend/src/app.module.ts +9 -0
- templates/nestjs/scaffold/src/backend/src/common/all-exceptions.filter.ts +59 -0
- templates/nestjs/scaffold/src/backend/src/health/health.controller.ts +14 -0
- templates/nestjs/scaffold/src/backend/src/health/health.module.ts +10 -0
- templates/nestjs/scaffold/src/backend/src/health/health.service.spec.ts +21 -0
- templates/nestjs/scaffold/src/backend/src/health/health.service.ts +9 -0
- templates/nestjs/scaffold/src/backend/src/main.ts +26 -0
- templates/nestjs/scaffold/src/backend/tsconfig.json +16 -0
- templates/nestjs/scaffold/src/backend/vitest.config.ts +9 -0
- templates/nestjs/scaffold-boundary.yaml +25 -0
- templates/nestjs/skills/nestjs/SKILL.md +67 -0
- templates/nestjs/skills/nestjs/references/anatomy.md +65 -0
- templates/nestjs/stack.yaml +68 -0
- templates/nextjs/rules/frontend.md +18 -0
- templates/nextjs/scaffold/docs/design/00-index.md +23 -0
- templates/nextjs/scaffold/docs/design/colors-tokens.md +141 -0
- templates/nextjs/scaffold/docs/design/components-patterns.md +159 -0
- templates/nextjs/scaffold/docs/design/motion-accessibility.md +137 -0
- templates/nextjs/scaffold/docs/design/typography-spacing.md +107 -0
- templates/nextjs/scaffold/docs/engineering/accessibility-web.md +56 -0
- templates/nextjs/scaffold/docs/engineering/copywriting-standard.md +102 -0
- templates/nextjs/scaffold/docs/engineering/formatting-rules.md +89 -0
- templates/nextjs/scaffold/docs/engineering/frontend-rendering-rules.md +80 -0
- templates/nextjs/scaffold/docs/engineering/frontend-rules.md +183 -0
- templates/nextjs/scaffold/docs/engineering/i18n-policy.md +99 -0
- templates/nextjs/scaffold/docs/pages-content-spec/00-index.md +78 -0
- templates/nextjs/scaffold/docs/playbooks/content-seo.md +55 -0
- templates/nextjs/scaffold/docs/playbooks/docs-governance.md +51 -0
- templates/nextjs/scaffold/docs/playbooks/frontend-ui.md +63 -0
- templates/nextjs/scaffold/src/frontend/app/layout.tsx +14 -0
- templates/nextjs/scaffold/src/frontend/app/page.tsx +3 -0
- templates/nextjs/scaffold/src/frontend/eslint.config.js +17 -0
- templates/nextjs/scaffold/src/frontend/lib/greeting.test.ts +9 -0
- templates/nextjs/scaffold/src/frontend/lib/greeting.ts +3 -0
- templates/nextjs/scaffold/src/frontend/package.json +28 -0
- templates/nextjs/scaffold/src/frontend/tsconfig.json +18 -0
- templates/nextjs/scaffold/src/frontend/vitest.config.ts +10 -0
- templates/nextjs/scaffold-boundary.yaml +30 -0
- templates/nextjs/skills/nextjs-react/SKILL.md +485 -0
- templates/nextjs/skills/nextjs-react/references/anatomy.md +116 -0
- templates/nextjs/skills/nextjs-react/scripts/new_component.py +72 -0
- templates/nextjs/stack.yaml +81 -0
- templates/node-express/rules/backend.md +20 -0
- templates/node-express/scaffold/docs/engineering/express-rules.md +30 -0
- templates/node-express/scaffold/docs/playbooks/express-service.md +35 -0
- templates/node-express/scaffold/src/backend/package.json +24 -0
- templates/node-express/scaffold/src/backend/src/index.ts +17 -0
- templates/node-express/scaffold/src/backend/src/middleware/error-handler.ts +12 -0
- templates/node-express/scaffold/src/backend/src/routes/health.test.ts +33 -0
- templates/node-express/scaffold/src/backend/src/routes/health.ts +7 -0
- templates/node-express/scaffold/src/backend/tsconfig.json +15 -0
- templates/node-express/scaffold/src/backend/types/express-bootstrap.d.ts +21 -0
- templates/node-express/scaffold-boundary.yaml +25 -0
- templates/node-express/skills/node-express/SKILL.md +70 -0
- templates/node-express/skills/node-express/references/anatomy.md +63 -0
- templates/node-express/stack.yaml +63 -0
- templates/python/scaffold/docs/engineering/python-rules.md +27 -0
- templates/python/scaffold/docs/playbooks/python-library.md +35 -0
- templates/python/stack.yaml +60 -0
- templates/rails/rules/backend.md +10 -0
- templates/rails/scaffold/docs/engineering/rails-rules.md +33 -0
- templates/rails/scaffold/docs/playbooks/rails-service.md +42 -0
- templates/rails/scaffold/src/backend/Gemfile +12 -0
- templates/rails/scaffold/src/backend/app/controllers/application_controller.rb +26 -0
- templates/rails/scaffold/src/backend/app/controllers/health_controller.rb +6 -0
- templates/rails/scaffold/src/backend/app/models/health.rb +6 -0
- templates/rails/scaffold/src/backend/config/application.rb +12 -0
- templates/rails/scaffold/src/backend/config/boot.rb +3 -0
- templates/rails/scaffold/src/backend/config/routes.rb +4 -0
- templates/rails/scaffold/src/backend/config.ru +5 -0
- templates/rails/scaffold/src/backend/spec/rails_helper.rb +18 -0
- templates/rails/scaffold/src/backend/spec/requests/health_spec.rb +24 -0
- templates/rails/scaffold-boundary.yaml +25 -0
- templates/rails/skills/rails/SKILL.md +62 -0
- templates/rails/skills/rails/references/anatomy.md +71 -0
- templates/rails/stack.yaml +72 -0
- templates/react-native/rules/mobile.md +26 -0
- templates/react-native/scaffold/docs/engineering/accessibility-mobile.md +95 -0
- templates/react-native/scaffold/docs/engineering/mobile-rules.md +56 -0
- templates/react-native/scaffold/docs/engineering/offline-first.md +61 -0
- templates/react-native/scaffold/docs/playbooks/mobile-app.md +49 -0
- templates/react-native/scaffold/src/mobile/App.tsx +9 -0
- templates/react-native/scaffold/src/mobile/eslint.config.js +17 -0
- templates/react-native/scaffold/src/mobile/package.json +23 -0
- templates/react-native/scaffold/src/mobile/src/greeting.test.ts +9 -0
- templates/react-native/scaffold/src/mobile/src/greeting.ts +3 -0
- templates/react-native/scaffold/src/mobile/tsconfig.json +17 -0
- templates/react-native/scaffold/src/mobile/vitest.config.ts +10 -0
- templates/react-native/scaffold-boundary.yaml +30 -0
- templates/react-native/skills/react-native-mobile/SKILL.md +119 -0
- templates/react-native/skills/react-native-mobile/assets/rn-mobile-checklist.md +28 -0
- templates/react-native/skills/react-native-mobile/references/anatomy.md +140 -0
- templates/react-native/skills/react-native-mobile/references/rn-2026-practices.md +54 -0
- templates/react-native/skills/react-native-mobile/scripts/new_screen.py +73 -0
- templates/react-native/skills/react-native-mobile/versions.json +16 -0
- templates/react-native/skills/react-native-patterns/SKILL.md +512 -0
- templates/react-native/skills/react-native-patterns/assets/rn-review-checklist.md +26 -0
- templates/react-native/skills/react-native-patterns/references/anatomy.md +62 -0
- templates/react-native/skills/react-native-patterns/references/list-performance.md +70 -0
- templates/react-native/skills/react-native-patterns/scripts/scan_rn_perf.py +77 -0
- templates/react-native/stack.yaml +70 -0
- templates/ruby-plain/scaffold/src/backend/Gemfile +8 -0
- templates/ruby-plain/scaffold/src/backend/main.rb +3 -0
- templates/ruby-plain/scaffold-boundary.yaml +23 -0
- templates/ruby-plain/stack.yaml +50 -0
- templates/rust-axum/rules/backend.md +20 -0
- templates/rust-axum/scaffold/docs/engineering/rust-axum-rules.md +35 -0
- templates/rust-axum/scaffold/docs/playbooks/rust-axum-service.md +43 -0
- templates/rust-axum/scaffold/src/backend/Cargo.toml +20 -0
- templates/rust-axum/scaffold/src/backend/src/app.rs +12 -0
- templates/rust-axum/scaffold/src/backend/src/error.rs +48 -0
- templates/rust-axum/scaffold/src/backend/src/main.rs +24 -0
- templates/rust-axum/scaffold/src/backend/src/routes/health.rs +37 -0
- templates/rust-axum/scaffold/src/backend/src/routes/mod.rs +2 -0
- templates/rust-axum/scaffold-boundary.yaml +25 -0
- templates/rust-axum/skills/rust/SKILL.md +73 -0
- templates/rust-axum/skills/rust/references/anatomy.md +63 -0
- templates/rust-axum/stack.yaml +65 -0
- templates/rust-plain/scaffold/src/backend/Cargo.toml +6 -0
- templates/rust-plain/scaffold/src/backend/src/main.rs +3 -0
- templates/rust-plain/scaffold-boundary.yaml +23 -0
- templates/rust-plain/stack.yaml +51 -0
- templates/spring-boot/rules/backend.md +20 -0
- templates/spring-boot/scaffold/docs/engineering/spring-boot-rules.md +35 -0
- templates/spring-boot/scaffold/docs/playbooks/spring-boot-service.md +45 -0
- templates/spring-boot/scaffold/src/backend/mvnw +302 -0
- templates/spring-boot/scaffold/src/backend/pom.xml +69 -0
- templates/spring-boot/scaffold/src/backend/src/main/java/com/example/app/Application.java +16 -0
- templates/spring-boot/scaffold/src/backend/src/main/java/com/example/app/common/GlobalExceptionHandler.java +31 -0
- templates/spring-boot/scaffold/src/backend/src/main/java/com/example/app/health/HealthController.java +22 -0
- templates/spring-boot/scaffold/src/backend/src/main/java/com/example/app/health/HealthService.java +12 -0
- templates/spring-boot/scaffold/src/backend/src/main/java/com/example/app/health/HealthStatus.java +4 -0
- templates/spring-boot/scaffold/src/backend/src/test/java/com/example/app/health/HealthServiceTest.java +15 -0
- templates/spring-boot/scaffold-boundary.yaml +26 -0
- templates/spring-boot/skills/spring-boot/SKILL.md +84 -0
- templates/spring-boot/skills/spring-boot/references/anatomy.md +63 -0
- templates/spring-boot/stack.yaml +65 -0
- templates/svelte-sveltekit/rules/frontend.md +20 -0
- templates/svelte-sveltekit/scaffold/docs/engineering/svelte-sveltekit-rules.md +37 -0
- templates/svelte-sveltekit/scaffold/docs/playbooks/svelte-sveltekit-app.md +36 -0
- templates/svelte-sveltekit/scaffold/src/frontend/package.json +22 -0
- templates/svelte-sveltekit/scaffold/src/frontend/src/app.html +12 -0
- templates/svelte-sveltekit/scaffold/src/frontend/src/hooks.server.ts +14 -0
- templates/svelte-sveltekit/scaffold/src/frontend/src/lib/components/Greeting.svelte +6 -0
- templates/svelte-sveltekit/scaffold/src/frontend/src/lib/stores/count.test.ts +26 -0
- templates/svelte-sveltekit/scaffold/src/frontend/src/lib/stores/count.ts +4 -0
- templates/svelte-sveltekit/scaffold/src/frontend/src/routes/+layout.svelte +24 -0
- templates/svelte-sveltekit/scaffold/src/frontend/src/routes/+page.svelte +9 -0
- templates/svelte-sveltekit/scaffold/src/frontend/src/routes/+page.ts +7 -0
- templates/svelte-sveltekit/scaffold/src/frontend/src/routes/health/+server.ts +7 -0
- templates/svelte-sveltekit/scaffold/src/frontend/svelte.config.js +10 -0
- templates/svelte-sveltekit/scaffold/src/frontend/tsconfig.json +7 -0
- templates/svelte-sveltekit/scaffold/src/frontend/vite.config.ts +7 -0
- templates/svelte-sveltekit/scaffold/src/frontend/vitest.config.ts +11 -0
- templates/svelte-sveltekit/scaffold-boundary.yaml +29 -0
- templates/svelte-sveltekit/skills/svelte/SKILL.md +90 -0
- templates/svelte-sveltekit/skills/svelte/references/anatomy.md +62 -0
- templates/svelte-sveltekit/stack.yaml +70 -0
- templates/typescript-plain/scaffold/src/index.ts +3 -0
- templates/typescript-plain/scaffold/tsconfig.json +13 -0
- templates/typescript-plain/scaffold-boundary.yaml +22 -0
- templates/typescript-plain/stack.yaml +44 -0
- templates/vue-nuxt/rules/frontend.md +19 -0
- templates/vue-nuxt/scaffold/docs/engineering/nuxt-rules.md +30 -0
- templates/vue-nuxt/scaffold/docs/playbooks/nuxt-app.md +29 -0
- templates/vue-nuxt/scaffold/src/frontend/app.vue +3 -0
- templates/vue-nuxt/scaffold/src/frontend/nuxt.config.ts +11 -0
- templates/vue-nuxt/scaffold/src/frontend/package.json +20 -0
- templates/vue-nuxt/scaffold/src/frontend/pages/index.test.ts +19 -0
- templates/vue-nuxt/scaffold/src/frontend/pages/index.vue +11 -0
- templates/vue-nuxt/scaffold/src/frontend/vitest.config.ts +12 -0
- templates/vue-nuxt/scaffold-boundary.yaml +26 -0
- templates/vue-nuxt/skills/vue-nuxt/SKILL.md +57 -0
- templates/vue-nuxt/skills/vue-nuxt/references/anatomy.md +60 -0
- templates/vue-nuxt/stack.yaml +61 -0
- templates/wordpress/rules/backend.md +19 -0
- templates/wordpress/scaffold/docs/engineering/wordpress-rules.md +28 -0
- templates/wordpress/scaffold/docs/playbooks/wordpress-service.md +29 -0
- templates/wordpress/scaffold/src/backend/composer.json +17 -0
- templates/wordpress/scaffold/src/backend/phpcs.xml.dist +11 -0
- templates/wordpress/scaffold/src/backend/phpunit.xml +10 -0
- templates/wordpress/scaffold/src/backend/plugin/inc/health.php +8 -0
- templates/wordpress/scaffold/src/backend/plugin/plugin.php +28 -0
- templates/wordpress/scaffold/src/backend/tests/HealthStatusTest.php +15 -0
- templates/wordpress/scaffold/src/backend/theme/functions.php +18 -0
- templates/wordpress/scaffold/src/backend/theme/style.css +11 -0
- templates/wordpress/scaffold-boundary.yaml +23 -0
- templates/wordpress/skills/wordpress/SKILL.md +110 -0
- templates/wordpress/skills/wordpress/assets/wp-checklist.md +28 -0
- templates/wordpress/skills/wordpress/references/wp-development.md +75 -0
- templates/wordpress/skills/wordpress/references/wp-security.md +68 -0
- templates/wordpress/skills/wordpress/scripts/scan_wp_smells.py +91 -0
- templates/wordpress/skills/wordpress/versions.json +16 -0
- templates/wordpress/stack.yaml +60 -0
- thinking_os/__init__.py +1 -0
- thinking_os/_agent_markers.py +32 -0
- thinking_os/background.py +405 -0
- thinking_os/bootstrap_outcomes.py +200 -0
- thinking_os/budget.py +302 -0
- thinking_os/capture.py +495 -0
- thinking_os/cognition.py +516 -0
- thinking_os/cognition_schemas.py +517 -0
- thinking_os/compress.py +192 -0
- thinking_os/concepts.py +233 -0
- thinking_os/dashboard.py +159 -0
- thinking_os/database.py +2883 -0
- thinking_os/decay.py +393 -0
- thinking_os/digest.py +295 -0
- thinking_os/dispatcher.py +192 -0
- thinking_os/dispatcher_helpers.py +48 -0
- thinking_os/dispatchers/__init__.py +3 -0
- thinking_os/dispatchers/default.py +47 -0
- thinking_os/distill.py +192 -0
- thinking_os/doc_indexer.py +905 -0
- thinking_os/embeddings.py +943 -0
- thinking_os/formula_composer.py +556 -0
- thinking_os/gate_marker.py +75 -0
- thinking_os/graph.py +296 -0
- thinking_os/graph_indexer.py +360 -0
- thinking_os/health_check.py +517 -0
- thinking_os/impact.py +119 -0
- thinking_os/memory_gc.py +356 -0
- thinking_os/migrator_embeddings.py +318 -0
- thinking_os/precision.py +194 -0
- thinking_os/record_outcome.py +399 -0
- thinking_os/repair.py +105 -0
- thinking_os/retrieval_quality.py +239 -0
- thinking_os/roles_state.py +168 -0
- thinking_os/sanitizer.py +320 -0
- thinking_os/server.py +3160 -0
- thinking_os/session_enrich.py +272 -0
- thinking_os/session_observe_worker.py +111 -0
- thinking_os/session_startup.py +74 -0
- thinking_os/session_summary.py +245 -0
- thinking_os/task_analyzer.py +462 -0
- thinking_os/task_parser.py +342 -0
- thinking_os/task_sync.py +73 -0
- thinking_os/tools/__init__.py +6 -0
- thinking_os/tools/_shared.py +947 -0
- thinking_os/tools/cognition.py +1867 -0
- thinking_os/tools/docs.py +770 -0
- thinking_os/tools/learning.py +2078 -0
- thinking_os/tools/logs.py +79 -0
- thinking_os/tools/memory.py +840 -0
- thinking_os/tools/metrics.py +200 -0
- thinking_os/tools/retrieve.py +415 -0
- thinking_os/tools/routing.py +658 -0
- thinking_os/tools/tasks.py +449 -0
- thinking_os/tools/trajectory.py +181 -0
- thinking_os/tracing.py +235 -0
- web/__init__.py +5 -0
- web/_cache.py +118 -0
- web/_deps.py +56 -0
- web/_envelope.py +85 -0
- web/_project_context.py +140 -0
- web/chat_providers.py +108 -0
- web/init_jobs.py +216 -0
- web/routes/__init__.py +25 -0
- web/routes/_bounded_read.py +76 -0
- web/routes/board.py +1089 -0
- web/routes/cognition.py +1838 -0
- web/routes/config.py +635 -0
- web/routes/graph.py +513 -0
- web/routes/health.py +180 -0
- web/routes/hooks.py +288 -0
- web/routes/hub.py +1219 -0
- web/routes/logs.py +374 -0
- web/routes/metrics.py +43 -0
- web/routes/observability.py +400 -0
- web/routes/patterns.py +227 -0
- web/routes/presence.py +609 -0
- web/routes/roles.py +446 -0
- web/routes/scheduled.py +261 -0
- web/routes/search.py +238 -0
- web/routes/sessions.py +220 -0
- web/routes/settings.py +363 -0
- web/routes/stream.py +547 -0
- web/security.py +157 -0
- web/server.py +283 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
id: fastapi
|
|
3
|
+
language: python
|
|
4
|
+
label: "FastAPI + Pydantic + PostgreSQL"
|
|
5
|
+
category: backend
|
|
6
|
+
|
|
7
|
+
structure:
|
|
8
|
+
root: src/backend
|
|
9
|
+
tree: |
|
|
10
|
+
src/backend/app/
|
|
11
|
+
├── api/v1/ # thin routes
|
|
12
|
+
├── services/ # business logic
|
|
13
|
+
├── schemas/ # pydantic models
|
|
14
|
+
└── db/ # models + migrations
|
|
15
|
+
notes: "routes thin, logic in services; SQLAlchemy under db/"
|
|
16
|
+
primary_skill: python-fastapi
|
|
17
|
+
skills: [python-fastapi]
|
|
18
|
+
|
|
19
|
+
substitutions:
|
|
20
|
+
DOMAIN_ROUTES: "Backend→`docs/playbooks/fastapi-service.md`"
|
|
21
|
+
SKILL_ROUTES: "Backend→`python-fastapi`"
|
|
22
|
+
ENGINEERING_RULE_ROUTING: "Backend→`docs/engineering/fastapi-rules.md`"
|
|
23
|
+
TOOL_ROUTING_IMPL: "`lint-backend`, `test-backend`"
|
|
24
|
+
VERIFY_BACKEND_GLOB: "`src/backend/`"
|
|
25
|
+
VERIFY_BACKEND_SUITES: "lint-backend + test-backend"
|
|
26
|
+
VERIFY_BACKEND: "`cd src/backend && ruff check . && pytest -q`"
|
|
27
|
+
QUICK_ROUTING: |-
|
|
28
|
+
- Backend / API task → [FastAPI Service Playbook](./playbooks/fastapi-service.md)
|
|
29
|
+
STACK_REF_CODES: |-
|
|
30
|
+
- `REF:PLAYBOOK-FASTAPI` → `./playbooks/fastapi-service.md`
|
|
31
|
+
- `REF:FASTAPI-RULES` → `./engineering/fastapi-rules.md`
|
|
32
|
+
|
|
33
|
+
ref_codes:
|
|
34
|
+
- {code: "REF:PLAYBOOK-FASTAPI", path: "./playbooks/fastapi-service.md", desc: "FastAPI service playbook"}
|
|
35
|
+
- {code: "REF:FASTAPI-RULES", path: "./engineering/fastapi-rules.md", desc: "FastAPI engineering rules"}
|
|
36
|
+
|
|
37
|
+
routing_entries:
|
|
38
|
+
- "Backend / API task → [FastAPI Service Playbook](./docs/playbooks/fastapi-service.md)"
|
|
39
|
+
|
|
40
|
+
rules:
|
|
41
|
+
- {file: rules/backend.md, globs: ["src/backend/**/*.py"]}
|
|
42
|
+
|
|
43
|
+
makefile_targets:
|
|
44
|
+
- {name: lint-backend, cmd: "cd src/backend && ruff check ."}
|
|
45
|
+
- {name: test-backend, cmd: "cd src/backend && pytest -q"}
|
|
46
|
+
|
|
47
|
+
verify:
|
|
48
|
+
- {glob: "src/backend/**/*.py", suites: "lint-backend + test-backend", cmd: "cd src/backend && ruff check . && pytest -q"}
|
|
49
|
+
|
|
50
|
+
dimensions:
|
|
51
|
+
- {name: "API endpoint", read_files: ["docs/playbooks/fastapi-service.md", "docs/engineering/fastapi-rules.md"]}
|
|
52
|
+
- {name: "Pydantic model", read_files: ["docs/engineering/fastapi-rules.md"]}
|
|
53
|
+
|
|
54
|
+
skill_enforcement:
|
|
55
|
+
- {globs: ["src/backend/**/*.py"], primary: python-fastapi, secondary: [clean-code, api-design, backend-fundamentals, hexagonal-architecture, auth-patterns, security-web, testing-strategy, observability]}
|
|
56
|
+
- {globs: ["src/backend/**/models.py", "src/backend/**/db/**/*.py", "src/backend/**/migrations/**/*.py"], primary: python-fastapi, secondary: [clean-code, db-design, backend-fundamentals]}
|
|
57
|
+
- {globs: ["src/backend/**/auth*.py", "src/backend/**/security.py"], primary: python-fastapi, secondary: [auth-patterns, security-web, clean-code]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!-- domain:FLUTTER | layer:policy | ssot:true | updated:2026-06-14 -->
|
|
2
|
+
# Flutter — stack rules
|
|
3
|
+
|
|
4
|
+
> P: Compact rule list applied to every `src/mobile/**/*.dart` file in addition to clean-code, frontend-fundamentals, and a11y.
|
|
5
|
+
> R: Reviewing or writing any Flutter code.
|
|
6
|
+
> S: Touching the web frontend or backend.
|
|
7
|
+
> N: [skills/flutter/SKILL.md](../skills/flutter/SKILL.md), [skills/flutter/references/anatomy.md](../skills/flutter/references/anatomy.md)
|
|
8
|
+
|
|
9
|
+
## Hard rules
|
|
10
|
+
|
|
11
|
+
1. **Three-state UI.** Every data-fetching screen renders loading / error / empty / content explicitly — `AsyncValue.when` is the canonical switch.
|
|
12
|
+
2. **Widgets stay dumb.** A widget renders state and emits intents; business logic lives in a provider / notifier, never in `build()`.
|
|
13
|
+
3. **One error mapper.** Only `lib/core/error_mapper.dart` turns a thrown failure into UI state; widgets never `try/catch` to build a message.
|
|
14
|
+
4. **No `setState` for shared state.** Cross-screen state goes through a Riverpod provider; `setState` is for ephemeral, single-widget UI only.
|
|
15
|
+
5. **a11y on every interactive element.** Wrap actionable widgets in `Semantics` (label + button/header role); icon-only buttons require a `tooltip`.
|
|
16
|
+
6. **No hard-coded design tokens.** Read colours / spacing / text styles from `Theme.of(context)`, never literal hex / magic numbers.
|
|
17
|
+
7. **`const` constructors by default.** A widget that can be `const` must be — it is the cheapest rebuild win.
|
|
18
|
+
8. **Boundary.** May import from `src/shared/`. Never from `src/frontend/`, `src/backend/`, `src/ai-service/`.
|
|
19
|
+
|
|
20
|
+
## Pre-commit checklist
|
|
21
|
+
|
|
22
|
+
- [ ] Three-state branches present on every async screen.
|
|
23
|
+
- [ ] No business logic inside `build()`.
|
|
24
|
+
- [ ] `Semantics` / `tooltip` on every interactive widget.
|
|
25
|
+
- [ ] Tokens read from `Theme.of(context)`, no literal colours.
|
|
26
|
+
- [ ] `dart analyze` clean (no warnings) and `flutter test` green.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<!-- domain:MOBILE | layer:rules | ssot:true | updated:{{DATE}} -->
|
|
2
|
+
# Flutter Engineering Rules
|
|
3
|
+
|
|
4
|
+
Purpose: Non-negotiable conventions for the {{PROJECT_NAME}} Flutter app.
|
|
5
|
+
Read when: Editing anything under `src/mobile/`.
|
|
6
|
+
Skip when: Frontend/backend work.
|
|
7
|
+
Read next: [Flutter App Playbook](../playbooks/flutter-app.md)
|
|
8
|
+
|
|
9
|
+
> Nav: [Master Index](../00-index.md)
|
|
10
|
+
|
|
11
|
+
## Hard rules
|
|
12
|
+
|
|
13
|
+
1. **Layering** — widget → provider → service, imports flow one way only (the
|
|
14
|
+
table in the `flutter` skill is the SSOT). A widget never imports a service.
|
|
15
|
+
2. **Dumb widgets** — a widget renders state and emits intents; any logic in a
|
|
16
|
+
`build()` method is a review finding. Business logic lives in a notifier.
|
|
17
|
+
3. **One error shaper** — only `lib/core/error_mapper.dart` turns a thrown
|
|
18
|
+
failure into UI state; it logs full detail and surfaces a safe message — no
|
|
19
|
+
stack traces, no driver strings to the user.
|
|
20
|
+
4. **Three-state fail-closed** — every async screen renders loading / error /
|
|
21
|
+
empty / data explicitly via `AsyncValue.when`; a missing branch ships a frame
|
|
22
|
+
of blank or jank.
|
|
23
|
+
5. **State discipline** — shared state goes through a Riverpod provider injected
|
|
24
|
+
by `ProviderScope`; `setState` is reserved for ephemeral single-widget UI.
|
|
25
|
+
6. **Strict analysis** — `dart analyze` with `flutter_lints` is the gate; an
|
|
26
|
+
ignore comment requires a written justification at the site.
|
|
27
|
+
7. **No floating config** — environment access happens once at bootstrap;
|
|
28
|
+
providers receive typed config, never read `Platform.environment` directly.
|
|
29
|
+
|
|
30
|
+
## Testing bar
|
|
31
|
+
|
|
32
|
+
Providers / notifiers ≥ unit-tested per public method with a `ProviderContainer`;
|
|
33
|
+
screens ≥ loading + error + data path via `pumpWidget` with overridden providers;
|
|
34
|
+
services integration-tested against a fake transport. Never bind a real network
|
|
35
|
+
call in a widget test.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!-- domain:MOBILE | layer:playbook | ssot:true | updated:{{DATE}} -->
|
|
2
|
+
# Flutter App Playbook
|
|
3
|
+
|
|
4
|
+
Purpose: The end-to-end recipe for adding or changing a screen, widget, or provider in {{PROJECT_NAME}}.
|
|
5
|
+
Read when: Any task that adds a screen, reusable widget, Riverpod provider, route, or service.
|
|
6
|
+
Skip when: Pure infra/devops work — see the deployment docs.
|
|
7
|
+
Read next: [Flutter Engineering Rules](../engineering/flutter-rules.md), [Error Format](../api-contracts/error-format.md)
|
|
8
|
+
|
|
9
|
+
> Nav: [Master Index](../00-index.md)
|
|
10
|
+
|
|
11
|
+
## Add a screen (the only sanctioned path)
|
|
12
|
+
|
|
13
|
+
1. **State first** — model the screen's data as an immutable value and expose it
|
|
14
|
+
from a provider in `lib/state/<feature>_provider.dart`. Async data uses
|
|
15
|
+
`AsyncValue` so loading / error / data fall out of the type.
|
|
16
|
+
2. **Service** — `lib/services/<feature>_service.dart` owns transport (HTTP /
|
|
17
|
+
storage / platform channel). It returns domain values or throws a typed
|
|
18
|
+
failure; it never touches widgets.
|
|
19
|
+
3. **Screen** — `lib/screens/<feature>_screen.dart`: a `ConsumerWidget` that
|
|
20
|
+
`watch`es the provider and renders `value.when(loading, error, data)`. No
|
|
21
|
+
business logic in `build()`.
|
|
22
|
+
4. **Widgets** — extract reusable presentational pieces into `lib/widgets/`;
|
|
23
|
+
they take data in and emit callbacks, holding no provider reads of their own
|
|
24
|
+
beyond what they render.
|
|
25
|
+
5. **Route** — register the screen in the single declarative router
|
|
26
|
+
(`lib/core/router.dart`); never push raw `MaterialPageRoute` from a widget.
|
|
27
|
+
6. **Error mapping** — failures surface through `lib/core/error_mapper.dart`,
|
|
28
|
+
which converts a thrown failure into the `AsyncError` the screen renders.
|
|
29
|
+
7. **Test** — widget-test the screen's three states via `pumpWidget` with a
|
|
30
|
+
`ProviderScope` override; unit-test the provider/notifier in isolation.
|
|
31
|
+
8. **Verify** — `cd src/mobile && dart analyze && flutter test`.
|
|
32
|
+
|
|
33
|
+
## Global wiring (set once in `main.dart`)
|
|
34
|
+
|
|
35
|
+
`runApp` mounts a single `ProviderScope` over a `MaterialApp.router` bound to the
|
|
36
|
+
declarative router. Theme + error mapper are wired here so every screen inherits
|
|
37
|
+
one token set and one failure shape.
|
|
38
|
+
|
|
39
|
+
## Anti-patterns
|
|
40
|
+
|
|
41
|
+
- Business logic inside `build()` — it belongs in a provider / notifier.
|
|
42
|
+
- A widget calling a service directly — go through a provider so it stays testable.
|
|
43
|
+
- `try/catch` building an error message in a screen — the error mapper owns it.
|
|
44
|
+
- `Navigator.push(MaterialPageRoute(...))` from deep in a widget — route through
|
|
45
|
+
the declarative router instead.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import 'dart:developer' as developer;
|
|
2
|
+
|
|
3
|
+
// The ONLY place that turns a thrown failure into a user-safe message.
|
|
4
|
+
// Screens render the returned string; full detail goes to the log, never
|
|
5
|
+
// the UI (no stack traces, no transport strings to the user).
|
|
6
|
+
String mapError(Object error, StackTrace stackTrace) {
|
|
7
|
+
developer.log(
|
|
8
|
+
'unhandled failure',
|
|
9
|
+
name: '{{PROJECT_NAME}}',
|
|
10
|
+
error: error,
|
|
11
|
+
stackTrace: stackTrace,
|
|
12
|
+
);
|
|
13
|
+
if (error is FormatException) {
|
|
14
|
+
return 'We received an unexpected response. Please try again.';
|
|
15
|
+
}
|
|
16
|
+
return 'Something went wrong. Please try again.';
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import 'package:go_router/go_router.dart';
|
|
2
|
+
|
|
3
|
+
import '../screens/health_screen.dart';
|
|
4
|
+
|
|
5
|
+
// The single declarative router — widgets never push raw routes.
|
|
6
|
+
final GoRouter appRouter = GoRouter(
|
|
7
|
+
routes: <RouteBase>[
|
|
8
|
+
GoRoute(
|
|
9
|
+
path: '/',
|
|
10
|
+
builder: (context, state) => const HealthScreen(),
|
|
11
|
+
),
|
|
12
|
+
],
|
|
13
|
+
);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import 'package:flutter/material.dart';
|
|
2
|
+
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
3
|
+
|
|
4
|
+
import 'core/router.dart';
|
|
5
|
+
|
|
6
|
+
// runApp bootstrap only — one ProviderScope, one router, no business logic.
|
|
7
|
+
void main() {
|
|
8
|
+
runApp(const ProviderScope(child: App()));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
class App extends StatelessWidget {
|
|
12
|
+
const App({super.key});
|
|
13
|
+
|
|
14
|
+
@override
|
|
15
|
+
Widget build(BuildContext context) {
|
|
16
|
+
return MaterialApp.router(
|
|
17
|
+
title: '{{PROJECT_NAME}}',
|
|
18
|
+
theme: ThemeData(colorSchemeSeed: Colors.indigo, useMaterial3: true),
|
|
19
|
+
routerConfig: appRouter,
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import 'package:flutter/material.dart';
|
|
2
|
+
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
3
|
+
|
|
4
|
+
import '../core/error_mapper.dart';
|
|
5
|
+
import '../state/health_provider.dart';
|
|
6
|
+
|
|
7
|
+
// A ConsumerWidget that renders the three states of an async value.
|
|
8
|
+
class HealthScreen extends ConsumerWidget {
|
|
9
|
+
const HealthScreen({super.key});
|
|
10
|
+
|
|
11
|
+
@override
|
|
12
|
+
Widget build(BuildContext context, WidgetRef ref) {
|
|
13
|
+
final status = ref.watch(healthStatusProvider);
|
|
14
|
+
return Scaffold(
|
|
15
|
+
appBar: AppBar(title: const Text('{{PROJECT_NAME}}')),
|
|
16
|
+
body: Center(
|
|
17
|
+
child: status.when(
|
|
18
|
+
loading: () => const CircularProgressIndicator(),
|
|
19
|
+
error: (error, stackTrace) => Semantics(
|
|
20
|
+
label: 'Health check failed',
|
|
21
|
+
child: Text(mapError(error, stackTrace)),
|
|
22
|
+
),
|
|
23
|
+
data: (value) => Semantics(
|
|
24
|
+
header: true,
|
|
25
|
+
label: 'Health status $value',
|
|
26
|
+
child: Text('status: $value'),
|
|
27
|
+
),
|
|
28
|
+
),
|
|
29
|
+
),
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Transport lives here — screens never call this directly, only via a provider.
|
|
2
|
+
// Returns a domain value or throws a typed failure for the error mapper.
|
|
3
|
+
class HealthService {
|
|
4
|
+
const HealthService();
|
|
5
|
+
|
|
6
|
+
Future<String> status() async {
|
|
7
|
+
// Stand-in for a real health check (HTTP / platform channel).
|
|
8
|
+
await Future<void>.delayed(const Duration(milliseconds: 50));
|
|
9
|
+
return 'ok';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
2
|
+
|
|
3
|
+
import '../services/health_service.dart';
|
|
4
|
+
|
|
5
|
+
// Provider owns business logic; the screen only watches the AsyncValue.
|
|
6
|
+
final healthServiceProvider = Provider<HealthService>(
|
|
7
|
+
(ref) => const HealthService(),
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
final healthStatusProvider = FutureProvider<String>((ref) async {
|
|
11
|
+
final service = ref.watch(healthServiceProvider);
|
|
12
|
+
return service.status();
|
|
13
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: {{PROJECT_NAME}}
|
|
2
|
+
description: "{{PROJECT_NAME}} Flutter app."
|
|
3
|
+
publish_to: "none"
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
|
|
6
|
+
environment:
|
|
7
|
+
sdk: ">=3.4.0 <4.0.0"
|
|
8
|
+
flutter: ">=3.22.0"
|
|
9
|
+
|
|
10
|
+
dependencies:
|
|
11
|
+
flutter:
|
|
12
|
+
sdk: flutter
|
|
13
|
+
flutter_riverpod: ^2.5.1
|
|
14
|
+
go_router: ^14.2.0
|
|
15
|
+
|
|
16
|
+
dev_dependencies:
|
|
17
|
+
flutter_test:
|
|
18
|
+
sdk: flutter
|
|
19
|
+
flutter_lints: ^4.0.0
|
|
20
|
+
|
|
21
|
+
flutter:
|
|
22
|
+
uses-material-design: true
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Sample test for the Flutter scaffold — exercises the EXISTING health feature:
|
|
2
|
+
// the FutureProvider (state/) wired to HealthService (services/), and the error
|
|
3
|
+
// frame routed through the single error mapper (core/). Follows the flutter
|
|
4
|
+
// SKILL Testing section: providers tested via a ProviderContainer with the
|
|
5
|
+
// service overridden by a fake, the screen pumped inside a ProviderScope
|
|
6
|
+
// asserting the loading/error/data frames. No real network is bound.
|
|
7
|
+
import 'package:flutter/material.dart';
|
|
8
|
+
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
9
|
+
import 'package:flutter_test/flutter_test.dart';
|
|
10
|
+
|
|
11
|
+
import '../lib/screens/health_screen.dart';
|
|
12
|
+
import '../lib/services/health_service.dart';
|
|
13
|
+
import '../lib/state/health_provider.dart';
|
|
14
|
+
|
|
15
|
+
// A fake that returns a fixed status — no transport, fully deterministic.
|
|
16
|
+
class _FakeHealthService extends HealthService {
|
|
17
|
+
const _FakeHealthService(this._status);
|
|
18
|
+
|
|
19
|
+
final String _status;
|
|
20
|
+
|
|
21
|
+
@override
|
|
22
|
+
Future<String> status() async => _status;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// A fake that throws, so the screen's error frame is forced through mapError.
|
|
26
|
+
class _ThrowingHealthService extends HealthService {
|
|
27
|
+
const _ThrowingHealthService();
|
|
28
|
+
|
|
29
|
+
@override
|
|
30
|
+
Future<String> status() async => throw const FormatException('bad payload');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void main() {
|
|
34
|
+
group('healthStatusProvider', () {
|
|
35
|
+
test('resolves to the value the injected service returns', () async {
|
|
36
|
+
final container = ProviderContainer(
|
|
37
|
+
overrides: [
|
|
38
|
+
healthServiceProvider.overrideWithValue(
|
|
39
|
+
const _FakeHealthService('ok'),
|
|
40
|
+
),
|
|
41
|
+
],
|
|
42
|
+
);
|
|
43
|
+
addTearDown(container.dispose);
|
|
44
|
+
|
|
45
|
+
final result = await container.read(healthStatusProvider.future);
|
|
46
|
+
|
|
47
|
+
expect(result, 'ok');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
group('HealthScreen', () {
|
|
52
|
+
Widget pumpWith(HealthService service) => ProviderScope(
|
|
53
|
+
overrides: [healthServiceProvider.overrideWithValue(service)],
|
|
54
|
+
child: const MaterialApp(home: HealthScreen()),
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
testWidgets('shows the loading frame before the status resolves',
|
|
58
|
+
(tester) async {
|
|
59
|
+
await tester.pumpWidget(pumpWith(const _FakeHealthService('ok')));
|
|
60
|
+
|
|
61
|
+
expect(find.byType(CircularProgressIndicator), findsOneWidget);
|
|
62
|
+
|
|
63
|
+
await tester.pumpAndSettle();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
testWidgets('renders the status once the service resolves',
|
|
67
|
+
(tester) async {
|
|
68
|
+
await tester.pumpWidget(pumpWith(const _FakeHealthService('ok')));
|
|
69
|
+
await tester.pumpAndSettle();
|
|
70
|
+
|
|
71
|
+
expect(find.text('status: ok'), findsOneWidget);
|
|
72
|
+
expect(find.byType(CircularProgressIndicator), findsNothing);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
testWidgets('maps a thrown failure to a user-safe message, never the detail',
|
|
76
|
+
(tester) async {
|
|
77
|
+
await tester.pumpWidget(pumpWith(const _ThrowingHealthService()));
|
|
78
|
+
await tester.pumpAndSettle();
|
|
79
|
+
|
|
80
|
+
// The single error mapper turns FormatException into a safe string and
|
|
81
|
+
// never leaks the thrown detail — the client-side equivalent of the
|
|
82
|
+
// error envelope's "message safe to show end-users" rule.
|
|
83
|
+
expect(
|
|
84
|
+
find.text('We received an unexpected response. Please try again.'),
|
|
85
|
+
findsOneWidget,
|
|
86
|
+
);
|
|
87
|
+
expect(find.textContaining('bad payload'), findsNothing);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Scaffold boundary for the flutter stack.
|
|
2
|
+
# Schema: docs/governance/scaffold-boundary-contract.md
|
|
3
|
+
# SSOT for what `src/mobile/` may write, read, or import.
|
|
4
|
+
|
|
5
|
+
version: 1
|
|
6
|
+
stack: flutter
|
|
7
|
+
|
|
8
|
+
roots:
|
|
9
|
+
- src/mobile/
|
|
10
|
+
|
|
11
|
+
file_patterns:
|
|
12
|
+
- "src/mobile/**/*.dart"
|
|
13
|
+
- "src/mobile/**/*.yaml"
|
|
14
|
+
|
|
15
|
+
imports_from:
|
|
16
|
+
- src/shared/
|
|
17
|
+
- src/shared/types/
|
|
18
|
+
- src/shared/contracts/
|
|
19
|
+
|
|
20
|
+
forbids_writing_in:
|
|
21
|
+
- src/frontend/
|
|
22
|
+
- src/backend/
|
|
23
|
+
- src/ai-service/
|
|
24
|
+
|
|
25
|
+
notes:
|
|
26
|
+
- "Widgets render, state holds business logic, services own transport — keep the layers one-directional."
|
|
27
|
+
- "One error mapper in lib/core is the only place that turns a failure into UI state."
|
|
28
|
+
- "Cross-stack types live in src/shared — never import directly from another stack root."
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flutter
|
|
3
|
+
tier: stack
|
|
4
|
+
domain: [mobile]
|
|
5
|
+
description: Use when creating or modifying Dart files under src/mobile/ in a Flutter app — screens, widgets, Riverpod providers/notifiers, services, navigation, and their tests. Triggers on any .dart change under src/mobile/. Covers the widget→provider→service layering, the single declarative router, three-state AsyncValue UI, the one error mapper, const-rebuild discipline, Semantics-based a11y, and provider/widget testing. Dart language fundamentals live in clean-code; generic UI in frontend-fundamentals.
|
|
6
|
+
globs: "src/mobile/**/*.dart"
|
|
7
|
+
depends_on:
|
|
8
|
+
- clean-code
|
|
9
|
+
- frontend-fundamentals
|
|
10
|
+
- a11y
|
|
11
|
+
last_reviewed: "2026-06-14"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
REQUIRED BACKGROUND: You MUST also follow `clean-code` (naming, structure, error paths), `frontend-fundamentals` (three-state async UI), and `a11y` (screen-reader semantics). This skill adds Flutter-specific patterns on top.
|
|
15
|
+
|
|
16
|
+
Anatomy reference: [`references/anatomy.md`](references/anatomy.md). Read that file BEFORE writing any new screen / widget / provider.
|
|
17
|
+
|
|
18
|
+
# flutter
|
|
19
|
+
|
|
20
|
+
## Layer contract (matches `structure.tree`)
|
|
21
|
+
|
|
22
|
+
| Layer | May import | Never |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| `screens/` (ConsumerWidget) | the feature provider, widgets | services, other screens |
|
|
25
|
+
| `state/` (provider / notifier) | services, other providers | Flutter `widgets`/`material`, `BuildContext` |
|
|
26
|
+
| `services/` | HTTP client, storage, platform channels | providers, widgets |
|
|
27
|
+
| `widgets/` | the data + callbacks passed in | services, providers it does not render |
|
|
28
|
+
| `core/` (error mapper, router, theme) | providers (for routing guards) | services |
|
|
29
|
+
|
|
30
|
+
State stays widget-free — a notifier never imports `BuildContext` — so it is
|
|
31
|
+
unit-testable and a transport swap (REST → GraphQL → local DB) is a
|
|
32
|
+
service-layer-only change.
|
|
33
|
+
|
|
34
|
+
## State & DI
|
|
35
|
+
|
|
36
|
+
- One feature = one provider file (`health_provider.dart`) exposing the service
|
|
37
|
+
binding plus the `AsyncValue` the screen watches.
|
|
38
|
+
- `ProviderScope` is mounted once in `main.dart`; tests override it per case.
|
|
39
|
+
- Inject services through a `Provider`; never `HealthService()` inside `build()`
|
|
40
|
+
— that bypasses overrides and breaks testing.
|
|
41
|
+
- Prefer `FutureProvider` / `AsyncNotifier` for async data — the `AsyncValue`
|
|
42
|
+
carries loading/error/data so the screen cannot forget a state.
|
|
43
|
+
|
|
44
|
+
## Widgets (dumb)
|
|
45
|
+
|
|
46
|
+
- A screen `watch`es a provider → renders `value.when(loading, error, data)` →
|
|
47
|
+
emits intents via callbacks. No business logic in `build()`.
|
|
48
|
+
- Extract reusable presentational pieces into `widgets/`; they take data in and
|
|
49
|
+
call back out, owning no transport.
|
|
50
|
+
- `const` constructor wherever the widget allows — it is the cheapest rebuild win.
|
|
51
|
+
|
|
52
|
+
## Navigation
|
|
53
|
+
|
|
54
|
+
- ONE declarative router in `core/router.dart` (`go_router`). Widgets navigate by
|
|
55
|
+
name/path through the router; never `Navigator.push(MaterialPageRoute(...))`
|
|
56
|
+
from deep in the tree.
|
|
57
|
+
|
|
58
|
+
## Error handling
|
|
59
|
+
|
|
60
|
+
- ONE error mapper (`core/error_mapper.dart`) turns a thrown failure into the
|
|
61
|
+
message a screen shows; it logs full detail and returns a safe string —
|
|
62
|
+
unknown errors get a generic message, never a stack trace or transport string.
|
|
63
|
+
|
|
64
|
+
## Accessibility
|
|
65
|
+
|
|
66
|
+
- Wrap interactive widgets in `Semantics` (label + button/header role);
|
|
67
|
+
icon-only buttons carry a `tooltip`. Read tokens from `Theme.of(context)`,
|
|
68
|
+
never literal colours / spacing.
|
|
69
|
+
|
|
70
|
+
## Testing
|
|
71
|
+
|
|
72
|
+
- Providers/notifiers: unit tests via a `ProviderContainer`, override the service
|
|
73
|
+
with a fake — no widgets.
|
|
74
|
+
- Screens/widgets: `pumpWidget` inside a `ProviderScope` with overridden
|
|
75
|
+
providers, asserting the loading + error + data frames minimum.
|
|
76
|
+
- Never bind a real network call in a widget test; inject a fake service.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<!-- domain:FLUTTER | layer:reference | ssot:true | updated:2026-06-27 -->
|
|
2
|
+
# Flutter Anatomy
|
|
3
|
+
|
|
4
|
+
> P: Canonical file map + entity recipes for the Flutter (Riverpod, declarative-router) stack.
|
|
5
|
+
> R: Adding any `.dart` under `src/mobile/`, or routing a mobile task.
|
|
6
|
+
> S: Reading backend / web code — wrong stack.
|
|
7
|
+
> N: [SKILL.md](../SKILL.md), [scaffold-boundary.yaml](../../../scaffold-boundary.yaml)
|
|
8
|
+
|
|
9
|
+
> Nav: [Skill](../SKILL.md)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Boundary
|
|
14
|
+
|
|
15
|
+
SSOT: `src/templates/flutter/scaffold-boundary.yaml`.
|
|
16
|
+
|
|
17
|
+
## 2. Layout map
|
|
18
|
+
|
|
19
|
+
| Pattern | Location | Naming | Imports from | Description |
|
|
20
|
+
|---|---|---|---|---|
|
|
21
|
+
| Screen | `lib/screens/<feature>_screen.dart` | `<feature>_screen.dart` | state, widgets | One widget tree per route (`ConsumerWidget`) |
|
|
22
|
+
| Widget | `lib/widgets/<name>.dart` | `<name>.dart` | — | Reusable presentational component |
|
|
23
|
+
| State | `lib/state/<feature>_provider.dart` | `<feature>_provider.dart` | services | Riverpod provider / notifier — business logic |
|
|
24
|
+
| Service | `lib/services/<name>_service.dart` | `<name>_service.dart` | `http` | Transport + platform access |
|
|
25
|
+
| Core | `lib/core/` | `<name>.dart` | none | Error mapper, router, theme |
|
|
26
|
+
| Test | `test/<file>_test.dart` | `<file>_test.dart` | source under test | `flutter_test` |
|
|
27
|
+
|
|
28
|
+
## 3. Entity recipes
|
|
29
|
+
|
|
30
|
+
### Add a new screen
|
|
31
|
+
- **Trigger:** "add a `<feature>` screen / route".
|
|
32
|
+
- **Files emitted:**
|
|
33
|
+
1. `lib/screens/<feature>_screen.dart`
|
|
34
|
+
2. `lib/state/<feature>_provider.dart`
|
|
35
|
+
3. `test/<feature>_screen_test.dart`
|
|
36
|
+
- **Steps:**
|
|
37
|
+
1. `ConsumerWidget`; watch the provider, render from its state.
|
|
38
|
+
2. Send user intent to the notifier; never hold business logic in the widget.
|
|
39
|
+
3. Register the route in the declarative router (`lib/core/`).
|
|
40
|
+
|
|
41
|
+
### Add a new component
|
|
42
|
+
- **Trigger:** "extract a reusable widget".
|
|
43
|
+
- **Files emitted:** `lib/widgets/<name>.dart` (+ test).
|
|
44
|
+
- **Steps:**
|
|
45
|
+
1. Stateless + parameterized; no provider reads — pass data in.
|
|
46
|
+
|
|
47
|
+
### Add a new test
|
|
48
|
+
- **Trigger:** any new screen / widget / provider.
|
|
49
|
+
- **Files emitted:** `test/<file>_test.dart`.
|
|
50
|
+
- **Steps:**
|
|
51
|
+
1. `ProviderContainer` for state; `testWidgets` + `pumpWidget` for UI.
|
|
52
|
+
|
|
53
|
+
## 4. Conventions
|
|
54
|
+
|
|
55
|
+
#### Naming
|
|
56
|
+
- Files: `snake_case.dart`. Classes: `PascalCase`; members: `camelCase`.
|
|
57
|
+
|
|
58
|
+
#### Test colocation
|
|
59
|
+
- Mirrored: `test/<file>_test.dart` mirrors `lib/<file>.dart`.
|
|
60
|
+
|
|
61
|
+
#### Dependency rules
|
|
62
|
+
- ✓ screen → state → service.
|
|
63
|
+
- ✗ a widget never turns a failure into UI text — the one core error mapper does.
|
|
64
|
+
- ✗ `src/mobile/` never imports from `src/frontend/` / `src/backend/` — share via `src/shared/`.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
id: flutter
|
|
3
|
+
language: dart
|
|
4
|
+
label: "Flutter + Dart"
|
|
5
|
+
category: mobile
|
|
6
|
+
|
|
7
|
+
structure:
|
|
8
|
+
root: src/mobile
|
|
9
|
+
tree: |
|
|
10
|
+
src/mobile/
|
|
11
|
+
├── pubspec.yaml
|
|
12
|
+
└── lib/
|
|
13
|
+
├── main.dart # runApp bootstrap (no logic)
|
|
14
|
+
├── screens/ # one widget tree per route (StatelessWidget/ConsumerWidget)
|
|
15
|
+
├── widgets/ # reusable presentational components
|
|
16
|
+
├── state/ # providers / notifiers (Riverpod by default)
|
|
17
|
+
├── services/ # transport + platform access (HTTP, storage, native channels)
|
|
18
|
+
└── core/ # cross-cutting: error mapper, router, theme
|
|
19
|
+
notes: "widgets render, state holds business logic, services own transport; one error mapper is the ONLY place that turns a failure into UI state; navigation via a single declarative router"
|
|
20
|
+
primary_skill: flutter
|
|
21
|
+
skills: [flutter]
|
|
22
|
+
|
|
23
|
+
# VERIFY_MOBILE_* override the "(none)" mobile defaults from base.yaml; the
|
|
24
|
+
# aggregator joins substitution keys across stacks via _derive_substitutions.
|
|
25
|
+
substitutions:
|
|
26
|
+
DOMAIN_ROUTES: "Mobile→`docs/playbooks/flutter-app.md`"
|
|
27
|
+
SKILL_ROUTES: "Mobile→`flutter`"
|
|
28
|
+
ENGINEERING_RULE_ROUTING: "Mobile→`docs/engineering/flutter-rules.md`, Error format→`docs/api-contracts/error-format.md`"
|
|
29
|
+
TOOL_ROUTING_IMPL: "`lint-mobile`, `test-mobile`, `build-mobile`"
|
|
30
|
+
VERIFY_MOBILE_GLOB: "`src/mobile/`"
|
|
31
|
+
VERIFY_MOBILE_SUITES: "lint-mobile + test-mobile"
|
|
32
|
+
VERIFY_MOBILE: "`cd src/mobile && dart analyze && flutter test`"
|
|
33
|
+
QUICK_ROUTING: |-
|
|
34
|
+
- Flutter screen / widget task → [Flutter App Playbook](./playbooks/flutter-app.md)
|
|
35
|
+
- State / provider work → [Flutter App Playbook](./playbooks/flutter-app.md)
|
|
36
|
+
- Navigation / routing change → [Flutter App Playbook](./playbooks/flutter-app.md)
|
|
37
|
+
STACK_REF_CODES: |-
|
|
38
|
+
- `REF:PLAYBOOK-FLUTTER` → `./playbooks/flutter-app.md`
|
|
39
|
+
- `REF:FLUTTER-RULES` → `./engineering/flutter-rules.md`
|
|
40
|
+
|
|
41
|
+
ref_codes:
|
|
42
|
+
- {code: "REF:PLAYBOOK-FLUTTER", path: "./playbooks/flutter-app.md", desc: "Flutter app playbook"}
|
|
43
|
+
- {code: "REF:FLUTTER-RULES", path: "./engineering/flutter-rules.md", desc: "Flutter engineering rules"}
|
|
44
|
+
|
|
45
|
+
routing_entries:
|
|
46
|
+
- "Flutter screen / widget task → [Flutter App Playbook](./playbooks/flutter-app.md)"
|
|
47
|
+
- "State / provider work → [Flutter App Playbook](./playbooks/flutter-app.md)"
|
|
48
|
+
|
|
49
|
+
rules:
|
|
50
|
+
- {file: rules/mobile.md, globs: ["src/mobile/**/*.dart"]}
|
|
51
|
+
|
|
52
|
+
makefile_targets:
|
|
53
|
+
- {name: lint-mobile, cmd: "cd src/mobile && dart analyze"}
|
|
54
|
+
- {name: test-mobile, cmd: "cd src/mobile && flutter test"}
|
|
55
|
+
- {name: build-mobile, cmd: "cd src/mobile && flutter build apk --debug"}
|
|
56
|
+
|
|
57
|
+
verify:
|
|
58
|
+
- {glob: "src/mobile/**/*.dart", suites: "lint-mobile + test-mobile", cmd: "cd src/mobile && dart analyze && flutter test"}
|
|
59
|
+
|
|
60
|
+
dimensions:
|
|
61
|
+
- {name: "Flutter screen", read_files: ["docs/playbooks/flutter-app.md", "docs/engineering/flutter-rules.md"]}
|
|
62
|
+
- {name: "Flutter component", read_files: ["docs/engineering/flutter-rules.md"]}
|
|
63
|
+
- {name: "State / provider", read_files: ["docs/engineering/flutter-rules.md", "docs/playbooks/flutter-app.md"]}
|
|
64
|
+
- {name: "Navigation / route", read_files: ["docs/playbooks/flutter-app.md"]}
|
|
65
|
+
- {name: "Accessibility", read_files: ["docs/engineering/flutter-rules.md"]}
|
|
66
|
+
|
|
67
|
+
skill_enforcement:
|
|
68
|
+
- {globs: ["src/mobile/**/*.dart"], primary: flutter, secondary: [clean-code, frontend-fundamentals, mobile-fundamentals, a11y]}
|
|
69
|
+
- {globs: ["src/mobile/**/screens/**/*.dart", "src/mobile/**/widgets/**/*.dart"], primary: flutter, secondary: [clean-code, state-management, performance]}
|
|
70
|
+
- {globs: ["src/mobile/**/state/**/*.dart"], primary: flutter, secondary: [state-management, clean-code]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
globs: ["src/backend/**/*.go"]
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Go Backend Rules (auto-loaded on src/backend/**/*.go)
|
|
7
|
+
|
|
8
|
+
When editing any Go file under `src/backend/`, follow these standards:
|
|
9
|
+
|
|
10
|
+
- **Return errors, don't panic.** Panic is for programming errors, not runtime conditions.
|
|
11
|
+
- **Wrap errors with `%w`** — `fmt.Errorf("create user: %w", err)`. Compare with `errors.Is` / `errors.As`.
|
|
12
|
+
- **Context first** — every cross-boundary function takes `ctx context.Context` as the first argument.
|
|
13
|
+
- **No context in struct fields.** Propagate, don't store.
|
|
14
|
+
- **Goroutine ownership is explicit** — document who starts and who stops each goroutine.
|
|
15
|
+
- **Table-driven tests** with subtests via `t.Run`. `-race` in CI.
|
|
16
|
+
|
|
17
|
+
Canonical policy: `docs/engineering/go-rules.md`
|
|
18
|
+
Playbook: `docs/playbooks/go-service.md`
|
|
19
|
+
Primary skill: `go-patterns`
|