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,30 @@
|
|
|
1
|
+
<!-- domain:META | layer:asset | ssot:false | updated:2026-06-04 -->
|
|
2
|
+
# Hook Authoring Checklist
|
|
3
|
+
|
|
4
|
+
Run before shipping a new or modified hook. Full procedure: docs/playbooks/hook-authoring.md.
|
|
5
|
+
|
|
6
|
+
## Scaffold + structure
|
|
7
|
+
- [ ] `bash scripts/new_hook.sh --name <id> --category <c>` used (or matches its shape).
|
|
8
|
+
- [ ] `set -euo pipefail` at the top.
|
|
9
|
+
- [ ] Sources `cos-env.sh` (Rule 3); `cos_log_hook` enter/ok/warn calls.
|
|
10
|
+
- [ ] Reads stdin via `cos_read_stdin_bounded`; `jq` with safe defaults.
|
|
11
|
+
|
|
12
|
+
## Agent-agnostic (Rule 1, P2)
|
|
13
|
+
- [ ] Never hardcodes `.claude/` — uses `$COS_AGENT_DIR`/`$COS_STATE_DIR`/`$COS_PANEL_DIR`.
|
|
14
|
+
- [ ] `grep -oE`/`grep -c` wrapped with `|| true` (no pipefail kill on zero match).
|
|
15
|
+
- [ ] No `$(python3 - <<HEREDOC)` — extract to `_helpers/<name>.py` (Rule 8).
|
|
16
|
+
- [ ] `Path(...).resolve()` before `relative_to()` (Rule 5) in any helper.
|
|
17
|
+
|
|
18
|
+
## Exit codes + fail mode
|
|
19
|
+
- [ ] Exit `0` = pass/warn (stderr message); `2` = BLOCK. No other codes.
|
|
20
|
+
- [ ] Enforcement/safety = fail-closed (block); observability/reminder = fail-open (always exit 0).
|
|
21
|
+
- [ ] Debounce via a per-session/per-input marker where it would fire repeatedly.
|
|
22
|
+
|
|
23
|
+
## Registration + render (Rule 10)
|
|
24
|
+
- [ ] Registered ONCE in `src/core/hooks/registry.yaml` with id/script/category/phase/timeout/events.
|
|
25
|
+
- [ ] `make regen-adapter-templates` run; Codex dispatcher updated if the event coalesces.
|
|
26
|
+
- [ ] `bash src/adapters/claude/install.sh` (or `make dogfood-full`) re-rendered.
|
|
27
|
+
|
|
28
|
+
## Verify
|
|
29
|
+
- [ ] `make verify-hooks` (bash -n + shellcheck warning) — clean.
|
|
30
|
+
- [ ] Manual smoke: pipe a synthetic JSON input, assert exit code + stderr.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# new_hook.sh — PURPOSE: scaffold a registry-compliant hook skeleton.
|
|
3
|
+
# INPUT: --name <hook-id> [--category safety|enforcement|observability|reminder|
|
|
4
|
+
# cognition|retrieval|meta] [--root src/core/hooks] [--force].
|
|
5
|
+
# OUTPUT: <root>/<name>.sh (sources cos-env, set -euo pipefail, stdin read,
|
|
6
|
+
# log calls) + the registry.yaml snippet to paste. DEPS: bash. NOTES:
|
|
7
|
+
# idempotent; the script still must be registered by hand in registry.yaml then
|
|
8
|
+
# `make regen-adapter-templates`. Spec: docs/playbooks/hook-authoring.md.
|
|
9
|
+
set -euo pipefail
|
|
10
|
+
IFS=$'\n\t'
|
|
11
|
+
|
|
12
|
+
log() { printf '%s\n' "$*" >&2; }
|
|
13
|
+
usage() { echo "usage: $0 --name <hook-id> [--category C] [--root DIR] [--force]" >&2; exit 2; }
|
|
14
|
+
|
|
15
|
+
name=""
|
|
16
|
+
category="enforcement"
|
|
17
|
+
root="src/core/hooks"
|
|
18
|
+
force=0
|
|
19
|
+
while [[ $# -gt 0 ]]; do
|
|
20
|
+
case "$1" in
|
|
21
|
+
--name) name="${2:?--name needs a value}"; shift 2 ;;
|
|
22
|
+
--category) category="${2:?--category needs a value}"; shift 2 ;;
|
|
23
|
+
--root) root="${2:?--root needs a value}"; shift 2 ;;
|
|
24
|
+
--force) force=1; shift ;;
|
|
25
|
+
-h|--help) usage ;;
|
|
26
|
+
*) echo "unknown arg: $1" >&2; usage ;;
|
|
27
|
+
esac
|
|
28
|
+
done
|
|
29
|
+
[[ -n "$name" ]] || { echo "error: --name is required" >&2; usage; }
|
|
30
|
+
[[ "$name" =~ ^[a-z0-9-]+$ ]] || { echo "error: --name must be kebab-case" >&2; exit 2; }
|
|
31
|
+
|
|
32
|
+
mkdir -p "$root"
|
|
33
|
+
target="$root/$name.sh"
|
|
34
|
+
if [[ -e "$target" && "$force" -ne 1 ]]; then
|
|
35
|
+
echo "error: $target exists (use --force)" >&2
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
{
|
|
40
|
+
printf '#!/usr/bin/env bash\n'
|
|
41
|
+
printf '# %s.sh — <one-line purpose>.\n' "$name"
|
|
42
|
+
printf '#\n# <2-3 line description: events, what it reads/writes, fail-open vs closed.>\n'
|
|
43
|
+
printf 'set -euo pipefail\n\n'
|
|
44
|
+
printf 'source "$(dirname "$0")/cos-env.sh" 2>/dev/null || true\n'
|
|
45
|
+
printf 'if ! command -v cos_log_hook >/dev/null 2>&1; then cos_log_hook() { :; }; fi\n\n'
|
|
46
|
+
printf 'cos_log_hook %s enter || true\n\n' "$name"
|
|
47
|
+
printf 'INPUT="$(cos_read_stdin_bounded 2)"\n'
|
|
48
|
+
printf '# shellcheck disable=SC2034 # placeholders — wire into your decision below\n'
|
|
49
|
+
printf 'FILE_PATH=$(echo "$INPUT" | jq -r '"'"'.tool_input.file_path // empty'"'"' 2>/dev/null || echo "")\n'
|
|
50
|
+
printf '# shellcheck disable=SC2034\n'
|
|
51
|
+
printf 'MARKER="${COS_AGENT_DIR}/.%s-marker" # never hardcode .claude/ (Rule 1)\n\n' "$name"
|
|
52
|
+
printf '# Decide; warn (exit 0) vs block (exit 2).\n'
|
|
53
|
+
printf 'if false; then\n'
|
|
54
|
+
printf ' echo "warning: <message>" >&2\n'
|
|
55
|
+
printf ' cos_log_hook %s warn || true\n' "$name"
|
|
56
|
+
printf ' exit 0\n'
|
|
57
|
+
printf 'fi\n\n'
|
|
58
|
+
printf 'cos_log_hook %s ok || true\n' "$name"
|
|
59
|
+
printf 'exit 0\n'
|
|
60
|
+
} > "$target"
|
|
61
|
+
chmod +x "$target"
|
|
62
|
+
|
|
63
|
+
log "wrote $target"
|
|
64
|
+
log ""
|
|
65
|
+
log "Now register it in src/core/hooks/registry.yaml (SSOT):"
|
|
66
|
+
log " - id: $name"
|
|
67
|
+
log " script: $name.sh"
|
|
68
|
+
log " description: <one line>"
|
|
69
|
+
log " category: $category"
|
|
70
|
+
log " phase: <PreToolUse|PostToolUse|UserPromptSubmit|SessionStart|Stop>"
|
|
71
|
+
log " timeout: 5"
|
|
72
|
+
log " events: [{event: PreToolUse, matcher: 'Write|Edit', status_message: '<msg>'}]"
|
|
73
|
+
log ""
|
|
74
|
+
log "Then: make regen-adapter-templates && make verify-hooks"
|
|
75
|
+
printf '%s\n' "$target"
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mcp-tool-authoring
|
|
3
|
+
tier: stack
|
|
4
|
+
domain: [architecture]
|
|
5
|
+
description: Author production-grade MCP (Model Context Protocol) tools for the coding-os meta-repo. Use when adding a new `cos_*` tool to `src/core/thinking_os/tools/`, `src/core/graph_os/tools/`, `src/core/board_os/mcp_tools.py`, or `src/core/web/routes/` — the four canonical authoring surfaces. Enforces the @safe_tool envelope (Rule 13), name prefix `cos_` (Rule 2), append-only schema migrations (Rule 9), single-line docstring (Rule 12), deferred-tool schema discipline. Pairs with python-meta-server, graph-explorer (load before edits), and clean-code.
|
|
6
|
+
last_reviewed: "2026-05-11"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# mcp-tool-authoring
|
|
10
|
+
|
|
11
|
+
Purpose: Make every new `cos_*` MCP tool match the contract every other tool follows. Drift here breaks the agent (deferred-tool schema lookups), the envelope (Rule 13), or the migration (Rule 9). One canonical authoring path keeps the ~80 tools coherent.
|
|
12
|
+
|
|
13
|
+
Read when: editing files matching:
|
|
14
|
+
- `src/core/thinking_os/tools/*.py` — MCP tools registered with the FastMCP server.
|
|
15
|
+
- `src/core/graph_os/tools/*.py` — graph-side tools (`cos_graph_*`).
|
|
16
|
+
- `src/core/board_os/mcp_tools.py` — Scrumban / task tools.
|
|
17
|
+
- `src/core/web/routes/*.py` — HTTP routes that wrap an MCP tool for the Hub UI.
|
|
18
|
+
- `src/core/thinking_os/server.py` — when registering a new tool module.
|
|
19
|
+
|
|
20
|
+
Skip when: editing tests, helpers, or non-tool internals.
|
|
21
|
+
|
|
22
|
+
## The Five Hard Contracts
|
|
23
|
+
|
|
24
|
+
Every `cos_*` tool MUST satisfy ALL of:
|
|
25
|
+
|
|
26
|
+
### 1. Name prefix `cos_` (Rule 2)
|
|
27
|
+
|
|
28
|
+
```python
|
|
29
|
+
@mcp.tool
|
|
30
|
+
@safe_tool
|
|
31
|
+
async def cos_search(query: str, limit: int = 5) -> dict:
|
|
32
|
+
...
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Names without the `cos_` prefix are silently rejected from the tool inventory. The inventory is the SSOT for `docs/governance/mcp-tool-inventory.md` (regenerated, not hand-edited).
|
|
36
|
+
|
|
37
|
+
### 2. Envelope shape via `@safe_tool` (Rule 13)
|
|
38
|
+
|
|
39
|
+
Every tool returns `ok(data)` or `fail(category, message)`. The decorator does this for you:
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
from core.thinking_os.tools._shared import safe_tool, ok, fail
|
|
43
|
+
|
|
44
|
+
@mcp.tool
|
|
45
|
+
@safe_tool # converts raw exceptions to fail() envelopes
|
|
46
|
+
async def cos_search(query: str, limit: int = 5) -> dict:
|
|
47
|
+
if not query:
|
|
48
|
+
return fail("invalid_input", "query is required")
|
|
49
|
+
|
|
50
|
+
rows = await _db.search(query, limit=limit)
|
|
51
|
+
return ok({"results": rows, "count": len(rows), "meta": {"layer": "memory"}})
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`fail` categories are documented in [docs/engineering/mcp-error-envelope.md](../../../docs/engineering/mcp-error-envelope.md): `invalid_input`, `not_found`, `unavailable`, `permission_denied`, `internal_error`, `rate_limited`. Don't invent new categories without updating the contract doc.
|
|
55
|
+
|
|
56
|
+
### 3. ONE-line docstring (Rule 12)
|
|
57
|
+
|
|
58
|
+
The docstring becomes the FastMCP tool description shown to the agent. It's the agent's only hint about what the tool does. Format:
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
@mcp.tool
|
|
62
|
+
@safe_tool
|
|
63
|
+
async def cos_search(query: str, limit: int = 5) -> dict:
|
|
64
|
+
"""Search agent memory + learned patterns. Returns top-K ranked observations."""
|
|
65
|
+
...
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**No docstrings on internal helpers** (Rule 12). Internal helpers are private and self-documenting via naming.
|
|
69
|
+
|
|
70
|
+
The description body (visible via `ToolSearch` lookup) can be richer — it's the docstring extended in the `description=` argument of `@mcp.tool(description=...)` if you need more than one line.
|
|
71
|
+
|
|
72
|
+
### 4. Append-only schema (Rule 9)
|
|
73
|
+
|
|
74
|
+
If your tool reads/writes the DB and needs a new table or column:
|
|
75
|
+
|
|
76
|
+
- Migrations live as **callable functions in [src/core/thinking_os/database.py](../../../core/thinking_os/database.py)** (the `MIGRATIONS` list), not standalone `.sql` files. Append a new entry at the end of the list — never edit or reorder past entries.
|
|
77
|
+
- **Adding a column to an existing table** → also a new migration entry (`ALTER TABLE ... ADD COLUMN ... NULL`). Backfill in a separate migration if non-trivial.
|
|
78
|
+
- The migration runner (`run_migrations` in `database.py`) is idempotent by `schema_version` row; each entry runs at most once per DB.
|
|
79
|
+
|
|
80
|
+
Verify with `uv run --extra rag pytest src/core/thinking_os/tests/test_db.py -q`.
|
|
81
|
+
|
|
82
|
+
### 5. Type hints, no `Any` for tool args
|
|
83
|
+
|
|
84
|
+
FastMCP introspects type hints to generate the JSON schema agents use. `Any` defeats this. Required:
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
async def cos_doc_search(
|
|
88
|
+
query: str,
|
|
89
|
+
source_types: str = "", # CSV, not list — FastMCP nested-array trap
|
|
90
|
+
limit: int = 5,
|
|
91
|
+
mode: str = "auto", # "auto" | "semantic" | "lexical"
|
|
92
|
+
) -> dict:
|
|
93
|
+
...
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Schema traps** (the ones every author trips):
|
|
97
|
+
|
|
98
|
+
| Trap | Wrong | Right |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| List args break across runtimes | `tags: list[str]` | `tags_csv: str = ""` then split server-side |
|
|
101
|
+
| Optional list | `tags: list[str] \| None = None` | `tags_csv: str = ""` |
|
|
102
|
+
| TaskSignals dict field types | mixed-type dicts | `dict[str, str]` and parse server-side |
|
|
103
|
+
| Pydantic model arg | `task: Task` | flat primitives, construct server-side |
|
|
104
|
+
|
|
105
|
+
See [docs/engineering/mcp-schema-traps.md](../../../docs/engineering/mcp-schema-traps.md) for the live list.
|
|
106
|
+
|
|
107
|
+
## Authoring Steps (in order)
|
|
108
|
+
|
|
109
|
+
### Step 1 — graph-first
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Find related tools
|
|
113
|
+
cos_graph_query "search OR retrieval"
|
|
114
|
+
|
|
115
|
+
# Read the neighborhood of a similar tool you'd model on
|
|
116
|
+
cos_graph_context "code:function:src/core/thinking_os/tools/memory.py::cos_search" depth=1
|
|
117
|
+
|
|
118
|
+
# Confirm no name collision
|
|
119
|
+
cos_graph_references "cos_search" # in case you're tempted to reuse a name
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Step 2 — doc-first (Rule 19)
|
|
123
|
+
|
|
124
|
+
Add the tool to its inventory section in `docs/governance/mcp-tool-inventory.md` **before** writing code. Inventory entry shape:
|
|
125
|
+
|
|
126
|
+
```markdown
|
|
127
|
+
### `cos_my_new_tool`
|
|
128
|
+
- **Category:** memory | retrieval | tasks | graph | cognition | observability | audit
|
|
129
|
+
- **Purpose:** One-sentence what it does.
|
|
130
|
+
- **Args:** `arg1: type — description. arg2: type — description (default).`
|
|
131
|
+
- **Returns:** `ok({data shape})` / `fail(category, message)`.
|
|
132
|
+
- **Source:** [`src/core/thinking_os/tools/<module>.py::cos_my_new_tool`](../../core/thinking_os/tools/<module>.py)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
The doc is the contract. The code below implements it.
|
|
136
|
+
|
|
137
|
+
### Step 3 — choose the home module
|
|
138
|
+
|
|
139
|
+
| Concern | Module |
|
|
140
|
+
|---|---|
|
|
141
|
+
| Agent memory / learning | `src/core/thinking_os/tools/memory.py` |
|
|
142
|
+
| Metrics / observability of agent | `src/core/thinking_os/tools/metrics.py` |
|
|
143
|
+
| Doc / RAG retrieval | `src/core/thinking_os/tools/docs.py` |
|
|
144
|
+
| Tasks / Scrumban | `src/core/board_os/mcp_tools.py` |
|
|
145
|
+
| Knowledge graph queries | `src/core/graph_os/tools/<name>.py` |
|
|
146
|
+
| Routing / classification / cognition | `src/core/thinking_os/tools/routing.py` / `cognition.py` |
|
|
147
|
+
| Hub HTTP wrapper | `src/core/web/routes/<name>.py` |
|
|
148
|
+
|
|
149
|
+
If your tool spans concerns, prefer the most specific module + use cross-imports — don't create a new module unless ≥3 tools justify it.
|
|
150
|
+
|
|
151
|
+
### Step 4 — register the tool
|
|
152
|
+
|
|
153
|
+
The MCP server registers tool modules in [src/core/thinking_os/server.py](../../../core/thinking_os/server.py). New module = new `import_module` call in the registration list.
|
|
154
|
+
|
|
155
|
+
### Step 5 — write the tool
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
# src/core/thinking_os/tools/my_module.py
|
|
159
|
+
from __future__ import annotations
|
|
160
|
+
|
|
161
|
+
from core.thinking_os.tools._shared import fail, ok, safe_tool
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
async def cos_my_new_tool(query: str, limit: int = 5) -> dict:
|
|
165
|
+
"""One-line description shown to the agent."""
|
|
166
|
+
if not query or len(query) > 1024:
|
|
167
|
+
return fail("invalid_input", "query must be 1..1024 chars")
|
|
168
|
+
|
|
169
|
+
rows = await _do_the_work(query, limit)
|
|
170
|
+
return ok({
|
|
171
|
+
"results": rows,
|
|
172
|
+
"count": len(rows),
|
|
173
|
+
"meta": {
|
|
174
|
+
"layer": "memory", # or "docs" / "tasks" / "graph"
|
|
175
|
+
"source": "thinking_os.my_new_tool",
|
|
176
|
+
"tokens_estimated": _estimate_tokens(rows),
|
|
177
|
+
"truncated": len(rows) >= limit,
|
|
178
|
+
},
|
|
179
|
+
})
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
async def _do_the_work(query: str, limit: int) -> list[dict]:
|
|
183
|
+
# Private helper — no docstring.
|
|
184
|
+
...
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def register(mcp) -> None:
|
|
188
|
+
"""Called by server.py during startup."""
|
|
189
|
+
mcp.tool(safe_tool(cos_my_new_tool))
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Step 6 — tests
|
|
193
|
+
|
|
194
|
+
Three tests minimum per tool:
|
|
195
|
+
|
|
196
|
+
```python
|
|
197
|
+
# src/core/thinking_os/tests/test_my_module.py
|
|
198
|
+
import pytest
|
|
199
|
+
|
|
200
|
+
async def test_cos_my_new_tool_returns_envelope_on_success() -> None:
|
|
201
|
+
result = await cos_my_new_tool(query="test")
|
|
202
|
+
assert result["ok"]
|
|
203
|
+
assert "results" in result["data"]
|
|
204
|
+
assert "meta" in result["data"]
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
async def test_cos_my_new_tool_rejects_empty_query() -> None:
|
|
208
|
+
result = await cos_my_new_tool(query="")
|
|
209
|
+
assert not result["ok"]
|
|
210
|
+
assert result["error"]["category"] == "invalid_input"
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
async def test_cos_my_new_tool_rejects_oversize_query() -> None:
|
|
214
|
+
result = await cos_my_new_tool(query="x" * 2000)
|
|
215
|
+
assert not result["ok"]
|
|
216
|
+
assert result["error"]["category"] == "invalid_input"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Matrix command: `uv run --extra rag pytest src/core/thinking_os/tests/test_my_module.py -q`.
|
|
220
|
+
|
|
221
|
+
### Step 7 — regen + smoke
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Regenerate the public tool inventory
|
|
225
|
+
make regen-rules
|
|
226
|
+
|
|
227
|
+
# Re-run MCP server self-test (instantiates server, asserts all tools registered)
|
|
228
|
+
python src/core/thinking_os/server.py --test
|
|
229
|
+
|
|
230
|
+
# Run the matrix command for the module you edited
|
|
231
|
+
uv run --extra rag pytest src/core/thinking_os/tests/ -q
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Deferred-Tool Schema (Claude-specific)
|
|
235
|
+
|
|
236
|
+
All ~80 `cos_*` tools are **deferred** in the Claude adapter — schemas are NOT loaded at session start. Calling a tool the first time in a session requires:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
ToolSearch("select:cos_my_new_tool")
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
This is a runtime concern, not an authoring one — but you should know that adding a tool also means the agent will need a ToolSearch call to use it for the first time per session. The docstring is the tool's only "before-Schema-Load" identifier.
|
|
243
|
+
|
|
244
|
+
## Meta-tool patterns
|
|
245
|
+
|
|
246
|
+
| Pattern | Example | When to use |
|
|
247
|
+
|---|---|---|
|
|
248
|
+
| **Search** | `cos_search`, `cos_doc_search` | Returning ranked rows from one layer |
|
|
249
|
+
| **Get-by-id / get-detail** | `cos_details`, `cos_doc_header` | Single-object fetch |
|
|
250
|
+
| **Mutation** | `cos_observation_record`, `cos_task_create` | Creates a row, returns id |
|
|
251
|
+
| **Action** | `cos_task_move`, `cos_supervise` | Side-effecting state change |
|
|
252
|
+
| **Aggregate / query** | `cos_metric_query`, `cos_log_query` | Filter + group, no mutation |
|
|
253
|
+
| **Composite / router** | `cos_route_skill`, `cos_classify_prompt` | Dispatches/classifies by signal |
|
|
254
|
+
|
|
255
|
+
When in doubt, model your tool on the closest existing one.
|
|
256
|
+
|
|
257
|
+
## Anti-patterns (reject in review)
|
|
258
|
+
|
|
259
|
+
- **Tool without `@safe_tool`** — raw exceptions reach the agent, not the envelope.
|
|
260
|
+
- **Tool name not prefixed `cos_`** — silently dropped from inventory.
|
|
261
|
+
- **Multi-line docstring** — clutters FastMCP description, breaks Rule 12.
|
|
262
|
+
- **Editing a past migration** — Rule 9 violation. New migration only.
|
|
263
|
+
- **`Any` type hints** — defeats schema generation.
|
|
264
|
+
- **List-typed args** — schema flakiness across runtimes; use CSV strings.
|
|
265
|
+
- **`print` in tool body** — pollutes MCP stderr. Use `logger`.
|
|
266
|
+
- **Returning a string instead of `ok(data)`** — every consumer expects the envelope.
|
|
267
|
+
- **Side effects in a "search" tool** — search/get must be read-only. Use a mutation tool for writes.
|
|
268
|
+
- **Tool that requires the client to know an internal id** — return resolvable identifiers (paths, uids, slugs), not row PKs.
|
|
269
|
+
|
|
270
|
+
## Verification (after authoring)
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
# Single-tool test
|
|
274
|
+
uv run --extra rag pytest src/core/thinking_os/tests/test_<your_module>.py -q
|
|
275
|
+
|
|
276
|
+
# Module-level
|
|
277
|
+
uv run --extra rag pytest src/core/thinking_os/tests/ -q
|
|
278
|
+
|
|
279
|
+
# MCP self-test (registers + validates all tools)
|
|
280
|
+
python src/core/thinking_os/server.py --test
|
|
281
|
+
|
|
282
|
+
# Regen inventory
|
|
283
|
+
make regen-rules
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Pre-merge: also `make verify` (full sweep).
|
|
287
|
+
|
|
288
|
+
## Tooling
|
|
289
|
+
|
|
290
|
+
Scaffold a compliant `cos_*` tool stub (cos_ prefix, @safe_tool, ok/fail, one-line docstring):
|
|
291
|
+
`python3 scripts/new_tool.py --name widget --layer graph`
|
|
292
|
+
|
|
293
|
+
## See also
|
|
294
|
+
|
|
295
|
+
- [assets/mcp-tool-checklist.md](assets/mcp-tool-checklist.md) — the authoring + registration gate.
|
|
296
|
+
- [Rule 13 — MCP Envelope](../../../docs/governance/critical-rules.md#rule-13--mcp-tool-response-envelope)
|
|
297
|
+
- [MCP Error Envelope contract](../../../docs/engineering/mcp-error-envelope.md)
|
|
298
|
+
- [MCP Tool Inventory (SSOT)](../../../docs/governance/mcp-tool-inventory.md)
|
|
299
|
+
- [MCP Schema Traps](../../../docs/engineering/mcp-schema-traps.md)
|
|
300
|
+
- [python-meta-server](../python-meta-server/SKILL.md) — Python authoring conventions for this codebase.
|
|
301
|
+
- [graph-explorer](../../../core/skills/graph-explorer/SKILL.md) — pre-edit graph context.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<!-- domain:META | layer:asset | ssot:false | updated:2026-06-04 -->
|
|
2
|
+
# MCP Tool Authoring Checklist
|
|
3
|
+
|
|
4
|
+
Run before shipping a new `cos_*` tool. Full procedure: docs/playbooks/mcp-tool-authoring.md.
|
|
5
|
+
|
|
6
|
+
## Contract
|
|
7
|
+
- [ ] Name prefixed `cos_` (Rule 2).
|
|
8
|
+
- [ ] Wrapped with `@safe_tool`; returns `ok(data)` / `fail(category, message)` (Rule 13).
|
|
9
|
+
- [ ] `fail` category ∈ validation / not_found / unavailable / conflict / internal.
|
|
10
|
+
- [ ] One-line docstring ending in a period (Rule 12) — it's the agent-facing description.
|
|
11
|
+
- [ ] `meta.layer` set on success; `meta.backend_fallback=true` when a fallback answered.
|
|
12
|
+
- [ ] `bash scripts/new_tool.py --name <t> --layer <l>` used (or matches its shape).
|
|
13
|
+
|
|
14
|
+
## Schema (if persistent state)
|
|
15
|
+
- [ ] New table → `src/core/thinking_os/migrations/vN+1_<name>.sql` (append-only, Rule 9).
|
|
16
|
+
- [ ] Never edited a past migration.
|
|
17
|
+
|
|
18
|
+
## Pre-edit graph moves
|
|
19
|
+
- [ ] `cos_graph_context` on the target tools file (depth=1).
|
|
20
|
+
- [ ] `cos_graph_references` if changing an existing tool's signature.
|
|
21
|
+
|
|
22
|
+
## Register + document
|
|
23
|
+
- [ ] Tool importable + registered on the MCP server.
|
|
24
|
+
- [ ] `docs/governance/mcp-tool-inventory.md` updated with the new tool.
|
|
25
|
+
- [ ] Deferred-schema note: callers run `ToolSearch("select:<tool>")` before first use.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
- [ ] `uv run --extra rag pytest src/core/thinking_os/tests/ -q`.
|
|
29
|
+
- [ ] `python src/core/thinking_os/server.py --test` (MCP self-test).
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""Scaffold a compliant cos_* MCP tool stub (envelope + naming + docstring).
|
|
2
|
+
|
|
3
|
+
PURPOSE: Emit a tool that already obeys Rule 2 (cos_ prefix), Rule 12
|
|
4
|
+
(one-line docstring), and Rule 13 (@safe_tool + ok/fail envelope)
|
|
5
|
+
so the author fills logic, not boilerplate.
|
|
6
|
+
INPUT: --name <tool> (without the cos_ prefix; added if missing)
|
|
7
|
+
--layer <memory|docs|tasks|graph|board|cognition|...> (meta.layer)
|
|
8
|
+
[--out <path>] append to a file instead of printing.
|
|
9
|
+
OUTPUT: The tool source on stdout (or appended to --out). Exit 0; 2 usage.
|
|
10
|
+
DEPENDENCIES: stdlib only.
|
|
11
|
+
NOTES: Pure render() is unit-testable. Register the tool + update
|
|
12
|
+
docs/governance/mcp-tool-inventory.md by hand. Spec:
|
|
13
|
+
docs/playbooks/mcp-tool-authoring.md.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import argparse
|
|
19
|
+
import re
|
|
20
|
+
import sys
|
|
21
|
+
|
|
22
|
+
TEMPLATE = '''\
|
|
23
|
+
@safe_tool
|
|
24
|
+
@mcp.tool()
|
|
25
|
+
def {fn}(arg: str) -> dict:
|
|
26
|
+
"""{summary}"""
|
|
27
|
+
if not arg:
|
|
28
|
+
return fail("validation", "arg must be non-empty")
|
|
29
|
+
result = {fn}_impl(arg)
|
|
30
|
+
return ok({{"result": result, "meta": {{"layer": "{layer}"}}}})
|
|
31
|
+
'''
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def normalize(name: str) -> str:
|
|
35
|
+
name = re.sub(r"[^a-z0-9_]", "_", name.lower()).strip("_")
|
|
36
|
+
return name if name.startswith("cos_") else f"cos_{name}"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def render(name: str, layer: str) -> str:
|
|
40
|
+
fn = normalize(name)
|
|
41
|
+
summary = (
|
|
42
|
+
fn.replace("cos_", "").replace("_", " ").strip().capitalize() + " — one-line description."
|
|
43
|
+
)
|
|
44
|
+
return TEMPLATE.format(fn=fn, layer=layer, summary=summary)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def main(argv: list[str]) -> int:
|
|
48
|
+
parser = argparse.ArgumentParser(description=__doc__.split("\n")[0])
|
|
49
|
+
parser.add_argument("--name", required=True)
|
|
50
|
+
parser.add_argument("--layer", default="memory")
|
|
51
|
+
parser.add_argument("--out", default=None)
|
|
52
|
+
args = parser.parse_args(argv)
|
|
53
|
+
|
|
54
|
+
if not args.name.strip():
|
|
55
|
+
print("error: --name must be non-empty", file=sys.stderr)
|
|
56
|
+
return 2
|
|
57
|
+
|
|
58
|
+
code = render(args.name, args.layer)
|
|
59
|
+
if args.out:
|
|
60
|
+
with open(args.out, "a", encoding="utf-8") as fh:
|
|
61
|
+
fh.write("\n\n" + code)
|
|
62
|
+
print(args.out)
|
|
63
|
+
else:
|
|
64
|
+
sys.stdout.write(code)
|
|
65
|
+
print(
|
|
66
|
+
"reminder: add @safe_tool/ok/fail imports from tools._shared; register + "
|
|
67
|
+
"update docs/governance/mcp-tool-inventory.md",
|
|
68
|
+
file=sys.stderr,
|
|
69
|
+
)
|
|
70
|
+
return 0
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
if __name__ == "__main__":
|
|
74
|
+
raise SystemExit(main(sys.argv[1:]))
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: meta-engineering
|
|
3
|
+
tier: stack
|
|
4
|
+
domain: [governance]
|
|
5
|
+
description: Use when authoring inside coding-os itself — core/, cli/, adapters/, templates/, or src/core/hooks/. Enforces three-layer mental model (DNA → mRNA → phenotype), graph-first edit discipline, regen pipelines, dogfood verification, and the contract that meta-repo changes propagate to every consumer project. Pairs with graph-explorer (always primary), clean-code, and thinking_os.
|
|
6
|
+
last_reviewed: "2026-05-11"
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# meta-engineering
|
|
11
|
+
|
|
12
|
+
Purpose: Internalise that **every line of code in this repo eventually
|
|
13
|
+
ships to N consumer projects** and act accordingly. Without this skill,
|
|
14
|
+
agents treat meta-repo files like a normal app — they grep, they edit,
|
|
15
|
+
they break consumers.
|
|
16
|
+
|
|
17
|
+
Read when: editing `src/core/**/*.py`, `src/cli/**/*.py`, `src/adapters/**/*.py`,
|
|
18
|
+
`src/core/hooks/*.sh`, `src/core/hooks/_helpers/*.py`, `src/templates/**/stack.yaml`,
|
|
19
|
+
or `src/core/hooks/registry.yaml`.
|
|
20
|
+
|
|
21
|
+
Skip when: editing `docs/`, `tests/`, or `.coding-os/` runtime state.
|
|
22
|
+
|
|
23
|
+
## The DNA → mRNA → phenotype contract
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
core/ ── DNA ─ agent + stack agnostic
|
|
27
|
+
src/adapters/<id>/ ── mRNA ─ per-agent translation
|
|
28
|
+
src/templates/<id>/ ── phenotype ─ per-stack overlay
|
|
29
|
+
↓ cli/ (factory)
|
|
30
|
+
consumer project ── organism ─ Django+Claude, Next+Codex, …
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Before any edit, ask:** which layer does this belong in? Mis-layering
|
|
34
|
+
is the most common meta-repo bug. If unsure, default to **lower** layer
|
|
35
|
+
(more reuse) and split when a single agent or stack genuinely diverges.
|
|
36
|
+
|
|
37
|
+
## Mandatory pre-edit moves (order matters)
|
|
38
|
+
|
|
39
|
+
1. **Graph context first** — non-negotiable for `src/core/**/*.py`,
|
|
40
|
+
`src/cli/**/*.py`, `src/adapters/**/*.py`:
|
|
41
|
+
- `cos_graph_context(file_or_uid, depth=1)` — what's connected.
|
|
42
|
+
- `cos_graph_references(uid)` — who depends on the symbol.
|
|
43
|
+
- For a rename: `cos_graph_rename_plan(uid, new_name)` BEFORE first Edit.
|
|
44
|
+
- For a refactor: `cos_graph_impact(uid, depth=3)`.
|
|
45
|
+
The `enforce-graph-context.sh` hook records the marker for you.
|
|
46
|
+
|
|
47
|
+
2. **Skill stack** — load `Skill graph-explorer` (primary), then
|
|
48
|
+
`Skill clean-code`. COMPLICATED+ adds `Skill thinking_os`.
|
|
49
|
+
|
|
50
|
+
3. **Doc anchor** — every code edit must trace to a documented spec
|
|
51
|
+
(PRD / playbook / engineering rule). The `enforce-doc-anchor.sh`
|
|
52
|
+
hook BLOCKS edits without a `.doc-anchor` marker.
|
|
53
|
+
|
|
54
|
+
4. **Task marker** — governance / hook-registry / rule-SSOT edits
|
|
55
|
+
require `.task-current` to name a `governance|docs-update|template-update`
|
|
56
|
+
task. `block-protected-files.sh` enforces.
|
|
57
|
+
|
|
58
|
+
5. **Complexity Gate** — record before any `.py` edit:
|
|
59
|
+
`bash src/core/hooks/write-state.sh .coding-os/<agent>/.thinking_os-gate "COMPLICATED 3"`.
|
|
60
|
+
|
|
61
|
+
## Layer-specific rules
|
|
62
|
+
|
|
63
|
+
### `src/core/thinking_os/**`
|
|
64
|
+
- All MCP tools wrapped with `@safe_tool` — return `ok(data) / fail(category, message)` (Rule 13).
|
|
65
|
+
- One-line docstring on `@mcp.tool` only (Rule 12). Internal helpers: no docstrings.
|
|
66
|
+
- Schema migrations append-only — new tables go to `vN+1`, never edit past (Rule 9).
|
|
67
|
+
- Verify: `uv run --extra rag pytest src/core/thinking_os/tests/ -q && python src/core/thinking_os/server.py --test`.
|
|
68
|
+
|
|
69
|
+
### `src/core/graph_os/**`
|
|
70
|
+
- Tool layer stays backend-agnostic — never leak raw SQL into the `cos_graph_*` callers. Single backend today (SQLite); the abstraction stays so a future store can plug in.
|
|
71
|
+
- Extractors idempotent on `uid`, short-circuit via `file_index_state` content hash.
|
|
72
|
+
- Verify: `uv run --extra graph_os pytest src/core/graph_os/tests/ -q`.
|
|
73
|
+
|
|
74
|
+
### `src/core/hooks/**`
|
|
75
|
+
- Every new hook:
|
|
76
|
+
- sources `cos-env.sh` (Rule 3),
|
|
77
|
+
- registered ONCE in `src/core/hooks/registry.yaml` (SSOT),
|
|
78
|
+
- declares `event/matcher` in registry,
|
|
79
|
+
- never hardcodes `.claude/` — use `$COS_AGENT_DIR` / `$COS_STATE_DIR` (Rule 1, P2).
|
|
80
|
+
- After registry edit: `make regen-adapter-templates` then `bash src/adapters/<id>/install.sh`.
|
|
81
|
+
- Verify: `make verify-hooks` (passes shellcheck warning level + bash -n).
|
|
82
|
+
|
|
83
|
+
### `src/cli/**`
|
|
84
|
+
- No hardcoded stack/adapter literals (Rule 11). Data-driven via
|
|
85
|
+
`src/templates/<id>/stack.yaml` and `src/adapters/<id>/adapter.yaml`.
|
|
86
|
+
- Test invariants: `uv run pytest tests/test_no_hardcoded_anthropic.py tests/test_no_hardcoded_stacks.py tests/test_cli.py -q`.
|
|
87
|
+
|
|
88
|
+
### `src/adapters/<id>/**`
|
|
89
|
+
- Adapter parity is bounded by the agent runtime's actual hook
|
|
90
|
+
capabilities — declare them in `adapter.yaml::hook_capabilities`.
|
|
91
|
+
- Never import an adapter SDK from `src/core/**` (P8).
|
|
92
|
+
- After edit: `bash src/adapters/<id>/install.sh` (or `make dogfood-full`).
|
|
93
|
+
|
|
94
|
+
### `src/templates/<id>/**`
|
|
95
|
+
- Conform to `src/core/schemas/stack.schema.json`.
|
|
96
|
+
- After edits to `dimensions:` or `skill_enforcement:`: `make regen-rules`.
|
|
97
|
+
- Hand-editing `src/core/rules/dimension-registry.md` or `skill-enforcement.md` directly is forbidden — both are regen targets.
|
|
98
|
+
|
|
99
|
+
### `src/core/web/**`
|
|
100
|
+
- Routes prefix `/api/` for HTTP, `/api/stream/` for SSE.
|
|
101
|
+
- Every endpoint returns the same MCP envelope shape (`{ok, data|error}`).
|
|
102
|
+
- UI in `src/core/web/ui/` — Vite + React 18 + Sigma.js.
|
|
103
|
+
|
|
104
|
+
## Anti-patterns
|
|
105
|
+
|
|
106
|
+
- **Bypassing graph layer** by loading `clean-code` only and editing
|
|
107
|
+
blindly — `enforce-skill.sh` BLOCKS this for `src/core/**/*.py`.
|
|
108
|
+
- **Adding a hook script without registry entry** — won't be rendered to any adapter.
|
|
109
|
+
- **Hand-editing regenerated rules** — drift from source-of-truth template.
|
|
110
|
+
- **Hardcoding `.claude/` in src/core/** — use `$COS_AGENT_DIR`. Audit
|
|
111
|
+
hook `block-hardcoded-literals.sh` catches most cases.
|
|
112
|
+
- **Running `cos init` inside meta-repo** — would scaffold a duplicate.
|
|
113
|
+
- **Rename without `cos_graph_rename_plan`** — `enforce-rename-plan.sh` warns; expect missed call-sites.
|
|
114
|
+
|
|
115
|
+
## Test discipline (matrix-targeted)
|
|
116
|
+
|
|
117
|
+
Use only the verification matrix command for the layer you changed
|
|
118
|
+
(AGENTS.md § Verification Matrix). Never `pytest tests/ -q` mid-task —
|
|
119
|
+
that runs ~2K tests in ~6 minutes (full sweep is pre-merge only).
|
|
120
|
+
|
|
121
|
+
## Propagation matrix
|
|
122
|
+
|
|
123
|
+
| Edit | Reaches consumer via | Latency |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| `src/core/hooks/*.sh` | Live symlink — no rebuild | Immediate |
|
|
126
|
+
| `src/core/thinking_os/**` | MCP server restart | One restart |
|
|
127
|
+
| `src/core/rules/*.md`, `src/core/skills/**` | Live symlink + `cos update` | `cos update` |
|
|
128
|
+
| `src/adapters/<agent>/**` | `bash src/adapters/<agent>/install.sh` | Manual |
|
|
129
|
+
| `src/templates/<stack>/**` | `cos update` + `make manifest-regen` | Manual |
|
|
130
|
+
| `src/cli/**` | new `cos` invocations pick up changes | Immediate (after `uv tool install --editable .`) |
|
|
131
|
+
|
|
132
|
+
## When to escalate
|
|
133
|
+
|
|
134
|
+
Stop and surface to user when:
|
|
135
|
+
- A `core/` change breaks backward compatibility.
|
|
136
|
+
- An adapter change affects another adapter.
|
|
137
|
+
- An MCP tool signature changes without a migration plan.
|
|
138
|
+
- You discover a stack-specific assumption inside `core/`.
|
|
139
|
+
|
|
140
|
+
## Tooling
|
|
141
|
+
|
|
142
|
+
Classify a path's layer + how an edit reaches consumers:
|
|
143
|
+
`python3 scripts/which_layer.py src/core/hooks/foo.sh`
|
|
144
|
+
|
|
145
|
+
## See also
|
|
146
|
+
|
|
147
|
+
- [assets/meta-edit-checklist.md](assets/meta-edit-checklist.md) — the pre/post edit gate.
|
|
148
|
+
- [docs/architecture/meta-project.md](../../../docs/architecture/meta-project.md) — full meta-project architecture.
|
|
149
|
+
- [docs/governance/critical-rules.md](../../../docs/governance/critical-rules.md) — all 21 critical rules.
|
|
150
|
+
- [docs/engineering/graph-hallucination-cures.md](../../../docs/engineering/graph-hallucination-cures.md) — why and when to call `cos_graph_*`.
|
|
151
|
+
- [src/core/skills/graph-explorer/SKILL.md](../../../core/skills/graph-explorer/SKILL.md) — graph decision ladder.
|