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,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: supabase
|
|
3
|
+
tier: stack
|
|
4
|
+
domain: [backend, data]
|
|
5
|
+
description: Build on Supabase correctly — Row Level Security, auth, realtime, storage, edge functions, and the Postgres underneath. Use when wiring a Supabase client, writing or reviewing RLS policies, debugging "anyone can read everyone's rows", setting up auth, adding realtime subscriptions, handling file storage, or deciding what belongs in an edge function vs the database. The #1 footgun — a table with RLS disabled is fully public — gets first-class coverage. Triggers — "Supabase", "RLS", "row level security", "policy", "anon key", "realtime subscription", "edge function", "supabase auth". Pairs with sql-authoring (the queries), db-design (the schema), auth-patterns (the token model), security-web (exposure review).
|
|
6
|
+
globs: ""
|
|
7
|
+
paths: []
|
|
8
|
+
last_reviewed: "2026-06-04"
|
|
9
|
+
versions_ref: versions.json
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Supabase
|
|
13
|
+
|
|
14
|
+
Supabase is Postgres with a public API in front of it. That inversion is the whole risk model: the `anon` key ships to the browser, so **the database — not the application — is the security boundary**. Row Level Security is not optional hardening; it is the only thing standing between a user and everyone else's rows.
|
|
15
|
+
|
|
16
|
+
> Scan a migration for tables left without RLS:
|
|
17
|
+
> `python3 scripts/check_rls.py supabase/migrations/*.sql`
|
|
18
|
+
|
|
19
|
+
## RLS is the security boundary (enable it on every table)
|
|
20
|
+
|
|
21
|
+
```sql
|
|
22
|
+
-- Wrong — table is reachable via the anon key with NO policy = fully public
|
|
23
|
+
create table notes (id uuid primary key, user_id uuid, body text);
|
|
24
|
+
|
|
25
|
+
-- Correct — enable RLS, then policies grant the minimum
|
|
26
|
+
create table notes (id uuid primary key, user_id uuid references auth.users, body text);
|
|
27
|
+
alter table notes enable row level security;
|
|
28
|
+
|
|
29
|
+
create policy "owner reads own notes" on notes
|
|
30
|
+
for select using (auth.uid() = user_id);
|
|
31
|
+
create policy "owner writes own notes" on notes
|
|
32
|
+
for insert with check (auth.uid() = user_id);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
A table created without `enable row level security` is readable and writable by
|
|
36
|
+
anyone holding the `anon` key — which is every visitor. Enable RLS on **every**
|
|
37
|
+
table in a public schema, then add policies. `using` filters which rows are
|
|
38
|
+
visible/updatable; `with check` validates rows being inserted/updated. Detail →
|
|
39
|
+
[references/rls-and-auth.md](references/rls-and-auth.md).
|
|
40
|
+
|
|
41
|
+
## The two keys — never confuse them
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
anon key → ships to the browser. RLS applies. Safe to expose IF RLS is on.
|
|
45
|
+
service_role key → bypasses RLS entirely. SERVER ONLY. Never in client code, never in git.
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```javascript
|
|
49
|
+
// Wrong — service_role in the browser = total database access for every visitor
|
|
50
|
+
const supabase = createClient(url, SERVICE_ROLE_KEY); // in frontend code
|
|
51
|
+
|
|
52
|
+
// Correct — anon key client-side (RLS enforced); service_role only in a server/edge function
|
|
53
|
+
const supabase = createClient(url, ANON_KEY);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The `service_role` key bypasses all RLS — leaking it is a full database breach.
|
|
57
|
+
It belongs only in server-side code (edge functions, your backend) and a secret
|
|
58
|
+
store, never bundled to the client.
|
|
59
|
+
|
|
60
|
+
## Auth — `auth.uid()` is your policy anchor
|
|
61
|
+
|
|
62
|
+
Supabase Auth issues a JWT; inside RLS, `auth.uid()` returns the authenticated
|
|
63
|
+
user's id and `auth.jwt()` exposes claims. Policies key off these. The token
|
|
64
|
+
model (refresh rotation, session vs JWT, storage on mobile) is owned by
|
|
65
|
+
[auth-patterns](../auth-patterns/SKILL.md) — Supabase is one provider of that
|
|
66
|
+
model, not a replacement for understanding it.
|
|
67
|
+
|
|
68
|
+
## Realtime + storage — RLS still rules
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
supabase.channel("notes")
|
|
72
|
+
.on("postgres_changes", { event: "*", schema: "public", table: "notes" }, handler)
|
|
73
|
+
.subscribe();
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Realtime broadcasts only rows the subscriber's RLS lets them see — but you must
|
|
77
|
+
enable the table for realtime and keep RLS correct, or you leak via the socket.
|
|
78
|
+
Storage buckets have their own RLS-style policies; a "public" bucket is public to
|
|
79
|
+
the internet — default to private + signed URLs. Detail →
|
|
80
|
+
[references/realtime-and-storage.md](references/realtime-and-storage.md).
|
|
81
|
+
|
|
82
|
+
## Edge functions vs database
|
|
83
|
+
|
|
84
|
+
| Put it in the database | Put it in an edge function |
|
|
85
|
+
|---|---|
|
|
86
|
+
| row-level rules (RLS), constraints | calling a third-party API (Stripe, email) |
|
|
87
|
+
| triggers, computed columns | webhooks, server-only secrets |
|
|
88
|
+
| anything RLS can express | orchestration the client shouldn't see |
|
|
89
|
+
|
|
90
|
+
Push authorization into RLS and constraints (the database enforces them for every
|
|
91
|
+
client); use edge functions for server-only work and secrets. Don't reimplement in
|
|
92
|
+
an edge function what a policy already guarantees.
|
|
93
|
+
|
|
94
|
+
## Anti-patterns (reject on sight)
|
|
95
|
+
|
|
96
|
+
- A table in a public schema with RLS disabled → fully public; enable it.
|
|
97
|
+
- `service_role` key anywhere client-side or in git → full breach.
|
|
98
|
+
- RLS enabled but **no policy** → table is locked to everyone (also a bug — add policies).
|
|
99
|
+
- Trusting client-sent `user_id` in a policy instead of `auth.uid()` → spoofable.
|
|
100
|
+
- A "public" storage bucket for user uploads → internet-readable; private + signed URLs.
|
|
101
|
+
- Business authorization in the client/edge function that RLS should own → bypassed by a direct API call.
|
|
102
|
+
|
|
103
|
+
## See also
|
|
104
|
+
|
|
105
|
+
- [references/rls-and-auth.md](references/rls-and-auth.md) — policies, `auth.uid()`, performance, common policy shapes.
|
|
106
|
+
- [references/realtime-and-storage.md](references/realtime-and-storage.md) — channels, storage policies, signed URLs.
|
|
107
|
+
- [assets/supabase-checklist.md](assets/supabase-checklist.md) — the ship gate.
|
|
108
|
+
- [sql-authoring](../sql-authoring/SKILL.md) · [db-design](../db-design/SKILL.md) · [auth-patterns](../auth-patterns/SKILL.md) · [security-web](../security-web/SKILL.md).
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!-- domain:BACKEND | layer:asset | ssot:false | updated:2026-06-04 -->
|
|
2
|
+
# Supabase Ship Checklist
|
|
3
|
+
|
|
4
|
+
Run before exposing a Supabase project.
|
|
5
|
+
|
|
6
|
+
## Security (the boundary is the database)
|
|
7
|
+
- [ ] Every table in a public schema has `enable row level security`.
|
|
8
|
+
- [ ] `python3 scripts/check_rls.py supabase/migrations/*.sql` → `clean`.
|
|
9
|
+
- [ ] Every RLS table has policies (enabled-but-empty = locked, also a bug).
|
|
10
|
+
- [ ] Policies use `auth.uid()`/`auth.jwt()`, never client-supplied identity.
|
|
11
|
+
- [ ] `update` policies have BOTH `using` and `with check`.
|
|
12
|
+
- [ ] `service_role` key is server-only — not in client code, not in git, in a secret store.
|
|
13
|
+
- [ ] Storage buckets for user content are private + signed URLs (not public).
|
|
14
|
+
|
|
15
|
+
## Performance
|
|
16
|
+
- [ ] Policy filter columns (`user_id`, `team_id`) are indexed.
|
|
17
|
+
- [ ] `auth.uid()` wrapped in `(select auth.uid())` in hot-table policies.
|
|
18
|
+
|
|
19
|
+
## Correctness
|
|
20
|
+
- [ ] Realtime tables added to the publication; channels removed on unmount.
|
|
21
|
+
- [ ] TypeScript types regenerated after the latest migration (`supabase gen types`).
|
|
22
|
+
- [ ] Authorization lives in RLS/constraints, not only in client/edge code.
|
|
23
|
+
|
|
24
|
+
## Verify
|
|
25
|
+
- [ ] Tested as an anon user: can read/write only own rows.
|
|
26
|
+
- [ ] `make skills-check-versions` — Supabase CLI pin current.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<!-- domain:BACKEND | layer:reference | ssot:true | updated:2026-06-04 -->
|
|
2
|
+
# Supabase Realtime & Storage
|
|
3
|
+
|
|
4
|
+
> P: Stream row changes and serve files without leaking past RLS.
|
|
5
|
+
> R: Adding a realtime subscription or file upload/download.
|
|
6
|
+
> S: Table policies themselves — see [rls-and-auth.md](rls-and-auth.md).
|
|
7
|
+
> N: [SKILL.md](../SKILL.md), [supabase-checklist.md](../assets/supabase-checklist.md)
|
|
8
|
+
|
|
9
|
+
> Nav: [Skill](../SKILL.md)
|
|
10
|
+
|
|
11
|
+
## Realtime — RLS still filters the stream
|
|
12
|
+
|
|
13
|
+
```javascript
|
|
14
|
+
const channel = supabase
|
|
15
|
+
.channel("room:1")
|
|
16
|
+
.on("postgres_changes",
|
|
17
|
+
{ event: "INSERT", schema: "public", table: "messages", filter: "room_id=eq.1" },
|
|
18
|
+
(payload) => render(payload.new))
|
|
19
|
+
.subscribe();
|
|
20
|
+
// later: supabase.removeChannel(channel)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Realtime delivers a change only if the subscriber's RLS would let them `select`
|
|
24
|
+
that row — so correct policies protect the socket too. You must enable the table
|
|
25
|
+
for the realtime publication (`alter publication supabase_realtime add table
|
|
26
|
+
messages`). Always `removeChannel` on unmount or you leak subscriptions.
|
|
27
|
+
|
|
28
|
+
## Storage — buckets are RLS for files
|
|
29
|
+
|
|
30
|
+
```sql
|
|
31
|
+
-- private bucket + a policy: users read only their own folder
|
|
32
|
+
create policy "own folder read" on storage.objects for select
|
|
33
|
+
using (bucket_id = 'avatars' and (storage.foldername(name))[1] = auth.uid()::text);
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
A bucket marked **public** is readable by anyone with the URL — fine for static
|
|
37
|
+
assets, a breach for user uploads. Default to **private** buckets and hand out
|
|
38
|
+
**signed URLs** with a short expiry:
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
const { data } = await supabase.storage.from("avatars").createSignedUrl(path, 60);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Never build a public URL for private content. Validate upload size/MIME
|
|
45
|
+
server-side (an edge function or a storage policy) — the client check is advisory.
|
|
46
|
+
|
|
47
|
+
## Generated types — keep the client honest
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
supabase gen types typescript --project-id <id> > types/database.ts
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Generate TypeScript types from the live schema so the client's row shapes can't
|
|
54
|
+
drift from the database (the api-contract-discipline rule, applied to Supabase).
|
|
55
|
+
Re-generate after every migration; a stale type is a silent `undefined` at runtime.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<!-- domain:DB | layer:reference | ssot:true | updated:2026-06-04 -->
|
|
2
|
+
# Supabase RLS & Auth — Policies That Hold
|
|
3
|
+
|
|
4
|
+
> P: Write Row Level Security policies that enforce ownership correctly and stay fast.
|
|
5
|
+
> R: Adding a table, a policy, or debugging "users see each other's data".
|
|
6
|
+
> S: The token/session model itself — that's [auth-patterns](../../auth-patterns/SKILL.md).
|
|
7
|
+
> N: [SKILL.md](../SKILL.md), [realtime-and-storage.md](realtime-and-storage.md)
|
|
8
|
+
|
|
9
|
+
> Nav: [Skill](../SKILL.md)
|
|
10
|
+
|
|
11
|
+
## The four policy verbs
|
|
12
|
+
|
|
13
|
+
```sql
|
|
14
|
+
alter table notes enable row level security;
|
|
15
|
+
|
|
16
|
+
create policy "read own" on notes for select using (auth.uid() = user_id);
|
|
17
|
+
create policy "insert own" on notes for insert with check (auth.uid() = user_id);
|
|
18
|
+
create policy "update own" on notes for update using (auth.uid() = user_id) with check (auth.uid() = user_id);
|
|
19
|
+
create policy "delete own" on notes for delete using (auth.uid() = user_id);
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`using` decides which existing rows a statement can see/touch; `with check`
|
|
23
|
+
validates the new row values on insert/update. `update` needs **both** — `using`
|
|
24
|
+
(can I touch this row?) and `with check` (is the result still mine?), or a user
|
|
25
|
+
could move a row to another owner.
|
|
26
|
+
|
|
27
|
+
## Always `auth.uid()`, never client input
|
|
28
|
+
|
|
29
|
+
```sql
|
|
30
|
+
-- Wrong — trusts a column the client controls; spoofable
|
|
31
|
+
create policy x on notes for select using (user_id = current_setting('request.user_id'));
|
|
32
|
+
|
|
33
|
+
-- Correct — auth.uid() comes from the verified JWT, not the request body
|
|
34
|
+
create policy x on notes for select using (auth.uid() = user_id);
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`auth.uid()` derives from the signed JWT — the client cannot forge it.
|
|
38
|
+
`auth.jwt() ->> 'role'` exposes custom claims for role-based policies.
|
|
39
|
+
|
|
40
|
+
## Performance — RLS runs per row
|
|
41
|
+
|
|
42
|
+
A policy is a `WHERE` clause added to every query. Two rules keep it fast:
|
|
43
|
+
|
|
44
|
+
- **Index the policy column** (`user_id`) — without an index, every query is a
|
|
45
|
+
seq scan filtered by the policy.
|
|
46
|
+
- **Wrap `auth.uid()` in a subquery** so Postgres evaluates it once, not per row:
|
|
47
|
+
`using ((select auth.uid()) = user_id)`. This is the single biggest RLS perf win
|
|
48
|
+
on large tables.
|
|
49
|
+
|
|
50
|
+
## Common shapes
|
|
51
|
+
|
|
52
|
+
| Need | Policy |
|
|
53
|
+
|---|---|
|
|
54
|
+
| owner-only | `auth.uid() = user_id` |
|
|
55
|
+
| team membership | `auth.uid() in (select user_id from team_members where team_id = notes.team_id)` |
|
|
56
|
+
| public read, owner write | select `using (true)`; insert/update `with check (auth.uid() = user_id)` |
|
|
57
|
+
| role-gated | `(auth.jwt() ->> 'role') = 'admin'` |
|
|
58
|
+
| soft-delete hidden | `using (deleted_at is null and auth.uid() = user_id)` |
|
|
59
|
+
|
|
60
|
+
## RLS enabled but no policy = locked, not open
|
|
61
|
+
|
|
62
|
+
Enabling RLS with **zero** policies denies all access (deny-by-default). That's
|
|
63
|
+
safe but usually a bug — you forgot the policies. `check_rls.py` catches the
|
|
64
|
+
opposite (RLS never enabled); for "enabled but empty" the symptom is "nobody can
|
|
65
|
+
read anything" — add the policies.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Flag Postgres/Supabase tables created without Row Level Security enabled.
|
|
2
|
+
|
|
3
|
+
PURPOSE: A table in a public schema without RLS is reachable by the anon
|
|
4
|
+
key = fully public. This scans migration SQL and lists every
|
|
5
|
+
CREATE TABLE that has no matching ENABLE ROW LEVEL SECURITY.
|
|
6
|
+
INPUT: one or more .sql file paths (migrations). [--schema public]
|
|
7
|
+
only flag tables in this schema (default public; "" = all). [--json]
|
|
8
|
+
OUTPUT: Findings on stderr; "clean"/"N table(s) without RLS" on stdout.
|
|
9
|
+
Exit 0 clean, 1 if any unguarded table, 2 usage.
|
|
10
|
+
DEPENDENCIES: stdlib only. Static SQL scan — no database needed.
|
|
11
|
+
NOTES: Heuristic regex parse (not a full SQL grammar); a clean pass is
|
|
12
|
+
necessary not sufficient. Pure scan() is unit-testable.
|
|
13
|
+
Spec: docs/playbooks/skill-authoring.md; craft: ../SKILL.md.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import argparse
|
|
19
|
+
import json
|
|
20
|
+
import re
|
|
21
|
+
import sys
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
|
|
24
|
+
# create table [if not exists] [schema.]name — capture optional schema + name
|
|
25
|
+
_CREATE = re.compile(
|
|
26
|
+
r"create\s+table\s+(?:if\s+not\s+exists\s+)?"
|
|
27
|
+
r"(?:\"?(?P<schema>\w+)\"?\.)?\"?(?P<name>\w+)\"?",
|
|
28
|
+
re.IGNORECASE,
|
|
29
|
+
)
|
|
30
|
+
_ENABLE = re.compile(
|
|
31
|
+
r"alter\s+table\s+(?:if\s+exists\s+)?"
|
|
32
|
+
r"(?:\"?\w+\"?\.)?\"?(?P<name>\w+)\"?\s+enable\s+row\s+level\s+security",
|
|
33
|
+
re.IGNORECASE,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _strip_sql_comments(sql: str) -> str:
|
|
38
|
+
sql = re.sub(r"/\*.*?\*/", "", sql, flags=re.DOTALL)
|
|
39
|
+
sql = re.sub(r"--[^\n]*", "", sql)
|
|
40
|
+
return sql
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def scan(sql: str, schema: str = "public") -> list[str]:
|
|
44
|
+
"""Return table names created (in `schema`, or any if schema=="") without RLS."""
|
|
45
|
+
body = _strip_sql_comments(sql)
|
|
46
|
+
created: list[tuple[str, str]] = [
|
|
47
|
+
(m.group("schema") or "public", m.group("name")) for m in _CREATE.finditer(body)
|
|
48
|
+
]
|
|
49
|
+
rls_enabled = {m.group("name").lower() for m in _ENABLE.finditer(body)}
|
|
50
|
+
missing: list[str] = []
|
|
51
|
+
for sch, name in created:
|
|
52
|
+
if schema and sch.lower() != schema.lower():
|
|
53
|
+
continue
|
|
54
|
+
if name.lower() not in rls_enabled:
|
|
55
|
+
missing.append(name)
|
|
56
|
+
return missing
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def main(argv: list[str]) -> int:
|
|
60
|
+
parser = argparse.ArgumentParser(description=__doc__.split("\n")[0])
|
|
61
|
+
parser.add_argument("files", nargs="+")
|
|
62
|
+
parser.add_argument("--schema", default="public")
|
|
63
|
+
parser.add_argument("--json", action="store_true", dest="as_json")
|
|
64
|
+
args = parser.parse_args(argv)
|
|
65
|
+
|
|
66
|
+
combined = ""
|
|
67
|
+
for path in args.files:
|
|
68
|
+
try:
|
|
69
|
+
combined += "\n" + Path(path).read_text(encoding="utf-8")
|
|
70
|
+
except FileNotFoundError:
|
|
71
|
+
print(f"error: {path} not found", file=sys.stderr)
|
|
72
|
+
return 2
|
|
73
|
+
|
|
74
|
+
missing = scan(combined, args.schema)
|
|
75
|
+
for name in missing:
|
|
76
|
+
print(
|
|
77
|
+
f" ✗ table '{name}': no ENABLE ROW LEVEL SECURITY — public via anon key",
|
|
78
|
+
file=sys.stderr,
|
|
79
|
+
)
|
|
80
|
+
if args.as_json:
|
|
81
|
+
print(json.dumps({"missing_rls": missing, "count": len(missing)}))
|
|
82
|
+
else:
|
|
83
|
+
print("clean" if not missing else f"{len(missing)} table(s) without RLS")
|
|
84
|
+
return 1 if missing else 0
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
if __name__ == "__main__":
|
|
88
|
+
raise SystemExit(main(sys.argv[1:]))
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-driver
|
|
3
|
+
tier: workflow
|
|
4
|
+
domain: [governance]
|
|
5
|
+
description: Use when creating, modifying, or transitioning Scrumban tasks in docs/tasks/. Triggers on "create a task", "move task", "start task X", "what's blocked", "daily standup", "retro", or any edit to docs/tasks/TASK-*.md.
|
|
6
|
+
phase: L
|
|
7
|
+
last_reviewed: "2026-05-11"
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Task Driver Skill — Scrumban
|
|
12
|
+
|
|
13
|
+
You are in task-management mode. Apply these rules mechanically.
|
|
14
|
+
|
|
15
|
+
## Mandatory intake loop (run for every implementation request)
|
|
16
|
+
|
|
17
|
+
1. **Reconcile existing tasks first.** Check whether the user request maps to:
|
|
18
|
+
- an explicit task id (`TASK-###`), or
|
|
19
|
+
- an existing open/in_progress/testing task in the same area.
|
|
20
|
+
2. **If a matching task exists:** use it (do not create a duplicate).
|
|
21
|
+
3. **If no matching task exists and work is non-trivial: create it fully
|
|
22
|
+
formed in ONE call.** When you already know the scope (you almost always
|
|
23
|
+
do — you just analyzed the work), the SAME `cos_task_create` call carries
|
|
24
|
+
`outcome=`, `acceptance=`, `read_first=` **and** `ready=True` (`--ready`).
|
|
25
|
+
Creating a skeleton "to fill in later" is a defect, not a shortcut: the
|
|
26
|
+
create envelope echoes `data.dor` — a non-empty `gaps` list or
|
|
27
|
+
`ready: false` you did not intend is YOUR bug; fix it before proceeding.
|
|
28
|
+
CLI flag trap: `--read-first` / `--labels` are **comma-separated single
|
|
29
|
+
flags** — repeating the flag silently keeps only the last value.
|
|
30
|
+
4. **Before `in_progress`: the task body gate must already hold.** Outcome
|
|
31
|
+
(one measurable sentence), Read First (minimal links), Acceptance (G/W/T).
|
|
32
|
+
Step 3 done right makes this a no-op; the icebox→in_progress gate blocks
|
|
33
|
+
placeholders regardless.
|
|
34
|
+
5. **Then execute through statuses:** `in_progress` → `testing` → `complete`.
|
|
35
|
+
6. **If blocked at any time:** move to `blocked` and record the concrete blocker.
|
|
36
|
+
|
|
37
|
+
## Golden rules
|
|
38
|
+
|
|
39
|
+
1. **Prefer MCP tools over hand-written YAML.** Always call `cos_task_create`
|
|
40
|
+
instead of writing the frontmatter yourself. Always call `cos_task_move`
|
|
41
|
+
to transition — not an `Edit` on the MD file.
|
|
42
|
+
|
|
43
|
+
2. **Rule 15 — tasks are pointers, not specs.** Never inline content from
|
|
44
|
+
`docs/**`, `src/core/rules/**`, `CLAUDE.md`, or `AGENTS.md`. If you find
|
|
45
|
+
yourself writing >800 tokens of task body: stop, find the doc to link,
|
|
46
|
+
or create a new doc (Documenter role) and link to it.
|
|
47
|
+
|
|
48
|
+
3. **Acceptance = Definition of Done.** G/W/T are the tests. When all pass,
|
|
49
|
+
task is Done — not "perfect", Done. Scope creep ⇒ create a new task via
|
|
50
|
+
`cos_task_create(kind="bug"|"chore"|...)`.
|
|
51
|
+
|
|
52
|
+
4. **One Outcome sentence — measurable, concrete.** Bad: "improve auth".
|
|
53
|
+
Good: "users log in with email+OTP, P95 <500ms, on iOS+Android+web".
|
|
54
|
+
|
|
55
|
+
5. **WIP=1 per session by default.** The `in_progress` cap is counted per
|
|
56
|
+
`agent_session` (`workflow_policy.per_session_wip`) — concurrent sessions
|
|
57
|
+
don't block each other, but YOUR session still does one task at a time.
|
|
58
|
+
Need a second `in_progress` in the same session? Ask first. Never
|
|
59
|
+
silently `COS_WIP_OVERRIDE=1`.
|
|
60
|
+
6. **`in_progress → complete` is blocked.** Route through `testing` so the
|
|
61
|
+
verification matrix runs (`workflow_policy.block_in_progress_to_complete`).
|
|
62
|
+
`force` is the only override and is audited.
|
|
63
|
+
|
|
64
|
+
## The four axes (memorize)
|
|
65
|
+
|
|
66
|
+
| Axis | Field | Examples |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| Domain | `swimlane` | `graph_os`, `backend`, `vpn-core` (from scrumban-config) |
|
|
69
|
+
| Type | `kind` | `feature`, `bug`, `chore`, `spike`, `docs`, `refactor`, `test`, `security` |
|
|
70
|
+
| Initiative | `epic` | `phase-l`, `mvp`, `oncall-q2` |
|
|
71
|
+
| Tags | `labels` | `indexing`, `perf`, `experimental` (must NOT contain kind values) |
|
|
72
|
+
|
|
73
|
+
## Bug found mid-session
|
|
74
|
+
|
|
75
|
+
Create a task immediately with `cos_task_create(kind="bug", priority="P0"|"P1")`
|
|
76
|
+
then continue your current work. Don't interrupt the current task to fix
|
|
77
|
+
the bug unless the user asks.
|
|
78
|
+
|
|
79
|
+
## Required status choreography
|
|
80
|
+
|
|
81
|
+
0. **Mark ready** — a task needs the `ready` label before it can leave
|
|
82
|
+
`icebox`: `cos task-ready TASK-NNN` (or create with `--ready` / `ready=True`).
|
|
83
|
+
`icebox → in_progress` is BLOCKED otherwise (the `emergency` lane is exempt).
|
|
84
|
+
1. `cos task-start TASK-NNN` before substantive edits, then **commit each logical unit autonomously as you implement** (`git commit <paths>` — never wait to be asked; [git-workflow.md](../../rules/git-workflow.md) § When to commit).
|
|
85
|
+
2. If dependency/policy/tooling blocks progress:
|
|
86
|
+
`cos_task_move(task_id=..., to="blocked")` and log the blocker.
|
|
87
|
+
3. After implementation: `cos_task_move(task_id=..., to="testing")` —
|
|
88
|
+
move to `testing` FIRST, then run verification. `in_progress → complete`
|
|
89
|
+
is BLOCKED, so don't run tests while still `in_progress`.
|
|
90
|
+
4. Run verification commands tied to changed files.
|
|
91
|
+
5. If green: append one short work-log note (token-lean), commit, then `cos task-done` (push to `main` at close).
|
|
92
|
+
6. If red: keep in `testing` or move back to `in_progress` with a short reason.
|
|
93
|
+
|
|
94
|
+
## Work Log (append-only, 120 char cap)
|
|
95
|
+
|
|
96
|
+
- **Claude:** `capture-work-log.sh` appends automatically on Write/Edit.
|
|
97
|
+
- **Codex:** MUST call `cos_work_log_append(task_id, summary)` explicitly
|
|
98
|
+
after any significant edit — no PostToolUse hook delivers for Codex.
|
|
99
|
+
- NEVER rewrite or reformat existing Work Log lines.
|
|
100
|
+
- Keep entries short and factual (what changed, result, blocker if any).
|
|
101
|
+
|
|
102
|
+
## Session start ritual
|
|
103
|
+
|
|
104
|
+
1. Run `cos daily` → see yesterday's progress + today's candidates + blockers.
|
|
105
|
+
2. Reconcile the new user request against existing tasks (`cos_task_board` / `cos task-show`).
|
|
106
|
+
3. If no suitable task exists: create one, fill Outcome/Read First/Acceptance.
|
|
107
|
+
4. `cos task-start TASK-NNN` → enforces WIP + sets `.task-current`.
|
|
108
|
+
4. Do work — **commit each logical unit autonomously**. `capture-work-log` auto-records. Status visible via `cos_task_board`.
|
|
109
|
+
5. Move to `testing`, run checks, then `cos task-done TASK-NNN` when G/W/T pass.
|
|
110
|
+
|
|
111
|
+
## MCP outage fallback (R-L-28)
|
|
112
|
+
|
|
113
|
+
If `cos_task_move` returns `fail("transient", retryable=True)`:
|
|
114
|
+
1. Wait 2s, retry once.
|
|
115
|
+
2. On second failure: fall back to `Edit` on the task MD file directly.
|
|
116
|
+
The `validate-task-frontmatter.sh` hook still enforces enum + cycle rules.
|
|
117
|
+
3. On next reachable MCP, re-sync via `cos task-sync`.
|
|
118
|
+
|
|
119
|
+
## Surface stale tasks to the human
|
|
120
|
+
|
|
121
|
+
If a task has been in `in_progress` for >3 days OR >2× its `appetite`,
|
|
122
|
+
surface this observation to the user — don't silently assume progress.
|
|
123
|
+
Daily/retro outputs already flag these.
|
|
124
|
+
|
|
125
|
+
## Daily streak ≠ shame
|
|
126
|
+
|
|
127
|
+
If `cos daily` shows a broken streak: DO NOT pressure the user. This is
|
|
128
|
+
observability only. ADHD-friendly default is silence; the user asks if
|
|
129
|
+
they care.
|
|
130
|
+
|
|
131
|
+
## WIP enforcement (hard caps)
|
|
132
|
+
|
|
133
|
+
| Status | Cap | What happens if exceeded |
|
|
134
|
+
|---|---|---|
|
|
135
|
+
| `in_progress` | 1 **per agent_session** (configurable via `scrumban-config.yaml::wip_limits.in_progress`) | `cos task-start` refuses for THIS session; other sessions are unaffected (`per_session_wip`). Idle in_progress tasks of dead sessions are freed by `cos task-reclaim` |
|
|
136
|
+
| `testing` | 3 (board-global) | Warns; doesn't block (testing can stack while verification runs) |
|
|
137
|
+
| `emergency` | 2 (board-global) | Hard block — emergency lane only for SEV-1/2 incidents |
|
|
138
|
+
|
|
139
|
+
Override is by the user via `--wip-override` flag, never by the agent silently. Document why the override is justified in the work log of the over-cap task.
|
|
140
|
+
|
|
141
|
+
## Daily standup template (paste-ready)
|
|
142
|
+
|
|
143
|
+
When the user says "daily" / "standup" / "what's the state":
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
## Daily — YYYY-MM-DD
|
|
147
|
+
|
|
148
|
+
### Yesterday
|
|
149
|
+
- [TASK-NNN] {title} → moved to {status}, {one-line outcome}
|
|
150
|
+
- (repeat for each task touched yesterday)
|
|
151
|
+
|
|
152
|
+
### Today (candidates)
|
|
153
|
+
- [TASK-NNN] {title} ({swimlane}/{kind}, priority {P})
|
|
154
|
+
- (top 3 from `cos task-pick`)
|
|
155
|
+
|
|
156
|
+
### Blocked
|
|
157
|
+
- [TASK-NNN] {title} — blocker: {one-line reason}, since {date}
|
|
158
|
+
- (action: {who/what unblocks})
|
|
159
|
+
|
|
160
|
+
### WIP check
|
|
161
|
+
- in_progress: {n}/cap{cap}
|
|
162
|
+
- testing: {n}/cap{cap}
|
|
163
|
+
- violations: {none | list}
|
|
164
|
+
|
|
165
|
+
### Notable
|
|
166
|
+
- {anything stale > 3 days, anything > 2× appetite, anything new from MCP discovery}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Source the data from `cos_task_daily` (canonical) — don't reconstruct from `cos_task_board` if `daily` is available.
|
|
170
|
+
|
|
171
|
+
## Retro template (paste-ready)
|
|
172
|
+
|
|
173
|
+
When the user says "retro":
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
## Retro — YYYY-MM-DD (period: {N days})
|
|
177
|
+
|
|
178
|
+
### What shipped
|
|
179
|
+
- [TASK-NNN] {title} → complete, {date}
|
|
180
|
+
- (every task moved to complete in the period)
|
|
181
|
+
|
|
182
|
+
### What broke / blocked
|
|
183
|
+
- [TASK-NNN] {title} — blocked for {days}; root cause: {category}
|
|
184
|
+
- (every task that hit `blocked` or rolled back)
|
|
185
|
+
|
|
186
|
+
### Patterns (from `cos_failure_pattern_query`)
|
|
187
|
+
- {recurring failure category}: {N occurrences}; suggested mitigation: {action}
|
|
188
|
+
|
|
189
|
+
### Action items (with owners + due dates)
|
|
190
|
+
- [ ] {description} — @owner — due YYYY-MM-DD
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Source from `cos_task_retro` (canonical), which already aggregates the completed/blocked/failure-pattern signals. Add owner + due-date columns by asking the user; the data is human input.
|
|
194
|
+
|
|
195
|
+
## Blocked-task escalation pattern
|
|
196
|
+
|
|
197
|
+
A task moved to `blocked` is not a finished state. Escalation ladder:
|
|
198
|
+
|
|
199
|
+
| Days blocked | Action |
|
|
200
|
+
|---|---|
|
|
201
|
+
| Day 0 | Move to blocked, record blocker, ask the user once. |
|
|
202
|
+
| Day 1-2 | Daily output highlights the blocker. Agent does NOT re-prompt. |
|
|
203
|
+
| Day 3 | Agent surfaces "TASK-NNN has been blocked 3 days — still relevant?" once. |
|
|
204
|
+
| Day 7 | Agent suggests `cos_task_move(to="archived")` with a brief note. |
|
|
205
|
+
| Day 14 | Auto-archive (configurable). The task body still exists, but it's off the active board. |
|
|
206
|
+
|
|
207
|
+
**Never** silently archive without surfacing to the user first. Lost work is worse than visible blocked work.
|
|
208
|
+
|
|
209
|
+
## Swimlane routing — discover from config, never hardcode
|
|
210
|
+
|
|
211
|
+
Swimlanes are **project-specific**, defined ONLY in
|
|
212
|
+
`.coding-os/scrumban-config.yaml` (`swimlanes:`). They differ per stack
|
|
213
|
+
(django: `backend/frontend/ai-service/shared/docs/infra`; nextjs:
|
|
214
|
+
`frontend/api/e2e/design/docs/infra`; the meta-repo:
|
|
215
|
+
`core/thinking_os/graph_os/board_os/adapters/templates/cli/docs/infra`).
|
|
216
|
+
There is **no universal list** — do not memorize or guess one.
|
|
217
|
+
|
|
218
|
+
**Discover the valid lanes (don't guess):**
|
|
219
|
+
|
|
220
|
+
- `cos_task_create` with an unknown swimlane fails with `valid: [...]` —
|
|
221
|
+
that list IS this project's source of truth.
|
|
222
|
+
- `cos board-config` prints the full config (swimlanes + colours).
|
|
223
|
+
|
|
224
|
+
**Map the work to the closest existing lane by domain concept:**
|
|
225
|
+
server / API / DB → the backend-ish lane · UI / components → the
|
|
226
|
+
frontend-ish lane · `src/core|cli|adapters|templates` in the meta-repo →
|
|
227
|
+
the matching subsystem lane · docs-only → `docs` · CI / deploy / infra →
|
|
228
|
+
`infra` (or `ops`). The lane *names* always come from config, not from a
|
|
229
|
+
fixed table here.
|
|
230
|
+
|
|
231
|
+
**Need a domain that doesn't exist yet?** Add it to
|
|
232
|
+
`.coding-os/scrumban-config.yaml::swimlanes` (`id` + `label` + `color`).
|
|
233
|
+
Config is re-read live on every call — no restart, and concurrent
|
|
234
|
+
sessions pick it up immediately. Only add a lane when no existing one
|
|
235
|
+
genuinely fits; prefer reuse (anti-overengineering).
|
|
236
|
+
|
|
237
|
+
Ambiguous? Pick the broadest existing lane (commonly `infra` or `shared`
|
|
238
|
+
when present) — the user can re-route.
|
|
239
|
+
|
|
240
|
+
## `kind` (task type) — when to pick which
|
|
241
|
+
|
|
242
|
+
- `feat` — net-new capability. Adds user-visible behavior.
|
|
243
|
+
- `fix` — repair existing broken behavior. Pair with a regression test.
|
|
244
|
+
- `chore` — internal work, no user-visible change (dependency bumps, cleanup).
|
|
245
|
+
- `refactor` — code structure change, no behavior change. Tests must still pass.
|
|
246
|
+
- `docs` — docs-only change. Lint applies; code doesn't.
|
|
247
|
+
- `test` — adds tests to existing code. Often paired with `fix` or `feat`.
|
|
248
|
+
- `spike` — time-boxed research; produces a decision doc, not a feature.
|
|
249
|
+
- `security` — security fix or hardening. Often pairs with private disclosure.
|
|
250
|
+
|
|
251
|
+
The `kind` choice drives commit message prefix (`feat:`, `fix:`, …) and changelog grouping.
|
|
252
|
+
|
|
253
|
+
## Composing with other skills
|
|
254
|
+
|
|
255
|
+
This skill is the entry point for **process**. For **content** of the task, compose with:
|
|
256
|
+
|
|
257
|
+
- `thinking_os` → for the Cynefin classification recorded in the gate before any code edit on a COMPLICATED+ task.
|
|
258
|
+
- `search` → for "is there already a task for this?" via `cos_task_search` before creating.
|
|
259
|
+
- `graph-explorer` → for blast-radius scoping when the task says "rename X" or "refactor Y".
|
|
260
|
+
- `clean-code` → mandatory secondary on any code-touching task.
|
|
261
|
+
- domain skills (e.g. `python-meta-server`, `nextjs-react`) → primary on the implementation phase.
|
|
262
|
+
|
|
263
|
+
The order is fixed: **task-driver lifecycle → thinking_os classify → domain skill → clean-code → search/graph as needed → implementation.**
|
|
264
|
+
|
|
265
|
+
## See also
|
|
266
|
+
|
|
267
|
+
- [Rule 14 — Tasks are pointers](../../../docs/governance/critical-rules.md#rule-14--tasks-are-pointers-not-specs).
|
|
268
|
+
- [Rule 18 — Task reconciliation mandatory](../../../docs/governance/critical-rules.md#rule-18--task-reconciliation-is-mandatory-before-implementation).
|
|
269
|
+
- [docs/governance/task-lifecycle.md](../../../docs/governance/task-lifecycle.md) — canonical lifecycle spec.
|
|
270
|
+
- [thinking_os](../thinking_os/SKILL.md) — Complexity Gate before any code change.
|
|
271
|
+
- [search](../search/SKILL.md) — `cos_task_search` for reconciliation.
|
|
272
|
+
- [src/scripts/task-lint.sh](src/scripts/task-lint.sh) — lint TASK-*.md files (frontmatter + sections + Rule 14 size cap).
|