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,133 @@
|
|
|
1
|
+
<!-- domain:ALL | layer:policy | ssot:true | updated:2026-03-16 -->
|
|
2
|
+
# Backend Engineering Rules
|
|
3
|
+
|
|
4
|
+
Purpose: Canonical backend implementation policy for Django, DRF, Celery, PostgreSQL, and Redis work.
|
|
5
|
+
Read when: The task changes backend models, services, serializers, endpoints, auth, payments, downloads, or backend ops behavior.
|
|
6
|
+
Skip when: The task is frontend-only, docs-only, or pure content work.
|
|
7
|
+
Read next: `../architecture/00-index.md` and the matching domain architecture doc.
|
|
8
|
+
|
|
9
|
+
> Nav: [Docs Index](../00-index.md) | [CodeStyle](../../CodeStyle.md) | [Architecture](../architecture/00-index.md)
|
|
10
|
+
|
|
11
|
+
## Core Rules
|
|
12
|
+
|
|
13
|
+
- Schema changes happen through Django migrations only.
|
|
14
|
+
- Read operations use selectors in `apps/*/selectors/`. Never query ORM directly in views.
|
|
15
|
+
- Write operations use services in `apps/*/services/`. Views delegate, never mutate.
|
|
16
|
+
- Views are thin: parse request, call selector/service, return serialized response.
|
|
17
|
+
- Use integer cents for all monetary values.
|
|
18
|
+
- Payment and fulfillment flows must be idempotent.
|
|
19
|
+
- Long-running or retryable work goes through Celery tasks.
|
|
20
|
+
|
|
21
|
+
## Migration Rules
|
|
22
|
+
|
|
23
|
+
- Every migration must be reversible (`RunPython` requires `reverse_code`; `RunSQL` requires `reverse_sql`).
|
|
24
|
+
- Separate schema migrations from data migrations.
|
|
25
|
+
- Review generated SQL before production: `python manage.py sqlmigrate <app> <number>`.
|
|
26
|
+
- Test rollback locally: `migrate <app> <previous>` then re-apply.
|
|
27
|
+
- Migration-producing changes: agent creates files, **user runs `make migrate`**.
|
|
28
|
+
- **Add field with default:** `AddField(null=True)` → `RunPython(backfill)` → `AlterField(null=False)`.
|
|
29
|
+
- **Rename field:** `AddField(new_name)` → `RunPython(copy_data)` → `RemoveField(old_name)`.
|
|
30
|
+
- **Remove field:** stop reading/writing in code → deploy → `RemoveField` in next deploy.
|
|
31
|
+
- For large tables (>1M rows), test migration timing on staging before production.
|
|
32
|
+
- `django-pg-zero-downtime-migrations` prevents table locks; do not add manual `LOCK TABLE`.
|
|
33
|
+
- Never combine schema and data changes in the same migration file.
|
|
34
|
+
|
|
35
|
+
## Validation and Contracts
|
|
36
|
+
|
|
37
|
+
- Validate request payloads with DRF serializers.
|
|
38
|
+
- Validate cross-entity business rules in services.
|
|
39
|
+
- Use explicit error codes and the standard DRF exception wrapper from the common app.
|
|
40
|
+
- Keep API routes under `/api/v1/` unless versioning policy says otherwise.
|
|
41
|
+
|
|
42
|
+
## Security Baseline
|
|
43
|
+
|
|
44
|
+
- Use Django permissions and DRF permission classes; keep access-control language aligned with the current backend stack.
|
|
45
|
+
- Resolve client IPs through `django-ipware`, not `REMOTE_ADDR`.
|
|
46
|
+
- Keep JWT/session cookies `httpOnly`, `secure` in production, and `SameSite=Strict`.
|
|
47
|
+
- Validate uploaded files by content, not extension alone.
|
|
48
|
+
- Never expose internal stack traces or provider secrets in API responses.
|
|
49
|
+
|
|
50
|
+
## Error Handling Policy
|
|
51
|
+
|
|
52
|
+
- **Fail-closed default:** if verification/validation cannot complete, reject the operation. Never log-and-allow.
|
|
53
|
+
- Use typed exceptions from `apps/<domain>/exceptions.py`, inheriting `rest_framework.exceptions.APIException`.
|
|
54
|
+
- Never raise bare `ValueError` or `Exception` from service layer code.
|
|
55
|
+
- Never expose `str(exc)`, database column names, or third-party service details in API responses.
|
|
56
|
+
- Error responses must match the standard envelope in `docs/api-contracts/error-format.md`.
|
|
57
|
+
- The custom exception handler in `apps/common/exception_handler.py` formats all DRF exceptions automatically — use typed exceptions and it works.
|
|
58
|
+
- **Never manually build error envelopes** — do not write `return Response({"error_code": ..., "message": ...})`. Raise a typed exception instead; the handler produces the envelope.
|
|
59
|
+
- Every `except` block must either re-raise, raise a typed exception, or reject the operation. No silent `pass` or `return None`.
|
|
60
|
+
- Log internal error details at WARNING/ERROR level for debugging — generic message to client.
|
|
61
|
+
|
|
62
|
+
## Observability and Operations
|
|
63
|
+
|
|
64
|
+
- Log security-relevant events such as login failures, payment mutations, permission changes, and download denials.
|
|
65
|
+
- Capture 5xx failures through the analytics/error pipeline defined in architecture docs.
|
|
66
|
+
- Record architectural tradeoffs in the task file and `changes.log`, not in shadow logging files outside the task system.
|
|
67
|
+
- Use `.env` plus environment-specific Django settings modules for backend configuration.
|
|
68
|
+
|
|
69
|
+
## 8) System Health Diagnostics
|
|
70
|
+
|
|
71
|
+
The `systemhealth` Django management command validates the entire backend:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
python manage.py systemhealth # Full report (5 categories)
|
|
75
|
+
python manage.py systemhealth --json # JSON output for CI
|
|
76
|
+
python manage.py systemhealth --category=security # Single category
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Categories checked:**
|
|
80
|
+
|
|
81
|
+
- ENV VARIABLES: Stripe, Email, Turnstile, Storage, OAuth, PostHog
|
|
82
|
+
- CONNECTIONS: PostgreSQL (with latency), Redis (with latency)
|
|
83
|
+
- QUEUE & SCHEDULER: Celery broker, workers, beat, queue depth, failed tasks
|
|
84
|
+
- SECURITY: DEBUG, SECRET_KEY, HTTPS, CORS, CSRF, cookies
|
|
85
|
+
- MIGRATIONS: pending migration detection
|
|
86
|
+
|
|
87
|
+
**Makefile targets:**
|
|
88
|
+
|
|
89
|
+
- `make diagnose-backend` — run systemhealth in Docker
|
|
90
|
+
- `make diagnose-frontend` — validate frontend env vars + API reachability
|
|
91
|
+
- `make diagnose` — both combined
|
|
92
|
+
- `make ci-gate` — full pipeline including diagnostics
|
|
93
|
+
|
|
94
|
+
**When to run diagnostics:**
|
|
95
|
+
|
|
96
|
+
- After cloning the repo (verify env setup)
|
|
97
|
+
- During task verification (ensure services are healthy)
|
|
98
|
+
- Before deploy (part of `make ci-gate`)
|
|
99
|
+
- When debugging connection issues
|
|
100
|
+
|
|
101
|
+
## Required Security Review
|
|
102
|
+
|
|
103
|
+
Perform an explicit security review when the task touches: auth/sessions, payments/webhooks, file upload/download, HTML rendering/UGC, admin/privileged actions, redirects, CAPTCHA, rate limiting, or permission boundaries.
|
|
104
|
+
|
|
105
|
+
## Comments
|
|
106
|
+
|
|
107
|
+
- Comment **why**, not **what**. If the code is self-evident, no comment is needed.
|
|
108
|
+
- Use `Ref:` to trace decisions back to architecture docs (e.g. `# Ref: architecture/04a-auth-security.md`).
|
|
109
|
+
- Use `TODO: TASK-###` with a task number. Bare TODOs without a task reference are not allowed.
|
|
110
|
+
- Comment non-obvious ordering constraints, security rationale, and business rules.
|
|
111
|
+
- Do not add docstrings that restate the function name or arguments.
|
|
112
|
+
|
|
113
|
+
## Testing Standards
|
|
114
|
+
|
|
115
|
+
- **Infrastructure tests are mandatory**: `tests/test_infrastructure.py` must include `call_command("check", "--fail-level", "ERROR")` (catches admin field errors before they crash `runserver`) and `call_command("makemigrations", "--check", "--dry-run")` (catches missing migrations).
|
|
116
|
+
- For seeded data (permissions, feature flags, site settings): always use `get_or_create()` in tests, never `create()`, to avoid IntegrityError conflicts with data migrations.
|
|
117
|
+
- Every app must include: `tests/conftest.py` (shared fixtures), `tests/factories.py` (factory_boy factories), `tests/test_selectors.py`, `tests/test_api.py` (integration), `tests/test_contract.py` (schema assertions).
|
|
118
|
+
- Use `factory_boy` for test data. Avoid raw `Model.objects.create()` except in legacy fixtures.
|
|
119
|
+
- Factories live in `apps/<app>/tests/factories.py`; use `factory.Faker` for realistic values.
|
|
120
|
+
- Avoid hardcoded magic values — use factories with explicit overrides only for the fields under test.
|
|
121
|
+
- Verify N+1 prevention with `django_assert_num_queries` for selectors using `select_related`/`prefetch_related`; document expected query count in a comment.
|
|
122
|
+
- Define expected field sets as module-level constants; contract tests verify API response keys match exactly.
|
|
123
|
+
- Update contract field sets whenever a serializer changes.
|
|
124
|
+
- Target: 80%+ line coverage per app. Measure with `pytest --cov=apps/<app>`.
|
|
125
|
+
|
|
126
|
+
## Edge Case Testing
|
|
127
|
+
|
|
128
|
+
- Test null/None/empty inputs for every public service function and selector.
|
|
129
|
+
- Test boundary values (0, max allowed, max+1, negative for unsigned fields).
|
|
130
|
+
- Test error paths: what happens when the DB is down, Redis unavailable, Stripe returns 500?
|
|
131
|
+
- Test concurrent mutations for payment/order flows (idempotency verification).
|
|
132
|
+
- Never write a test that asserts "does not crash" — assert the correct behavior (correct error type, correct status code, correct state).
|
|
133
|
+
- Name edge-case tests descriptively: `test_create_order_when_cart_empty_returns_400`.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!-- domain:ALL | layer:reference | ssot:true | updated:2026-03-13 -->
|
|
2
|
+
# Project Glossary
|
|
3
|
+
|
|
4
|
+
Purpose: Canonical project terminology — use when a term is ambiguous in context.
|
|
5
|
+
Read when: A term in architecture, playbooks, or PRD is unclear or ambiguous.
|
|
6
|
+
Skip when: Terminology is obvious from context.
|
|
7
|
+
Read next: The specific architecture domain or playbook clarifying the term.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
> Purpose: Domain language dictionary. Use these terms consistently across all docs.
|
|
11
|
+
> Nav: [Docs Index](../00-index.md) | [Code Style](../../CodeStyle.md)
|
|
12
|
+
|
|
13
|
+
## Business Domain
|
|
14
|
+
|
|
15
|
+
- **Entitlement** → a user's right to download a purchased product. Created after successful payment. Stored in `downloads.Entitlement` model.
|
|
16
|
+
- **Fulfillment** → the process of creating Order, OrderItems, and Entitlements after payment succeeds. Triggered by webhook, executed in `OrderService.fulfill_order()`.
|
|
17
|
+
- **Guest checkout** → purchase without an account. Uses email for order association. Guest can later register and link orders via `AccountLinkingService`.
|
|
18
|
+
- **Price snapshot** → the `price_at_purchase` field on OrderItem. Preserves the price at time of purchase, independent of future price changes.
|
|
19
|
+
- **Digital product** → a downloadable file (template, design, script, tool). No physical shipping.
|
|
20
|
+
|
|
21
|
+
## Technical Domain
|
|
22
|
+
|
|
23
|
+
- **BaseModel** → abstract Django model providing `id` (UUID), `created_at`, `updated_at`. All models inherit from it.
|
|
24
|
+
- **Bounded context** → a DDD concept. Each Django app (`accounts`, `catalog`, `commerce`, etc.) is a bounded context with its own models and services.
|
|
25
|
+
- **PaymentPort** → abstract interface (`apps/payments/ports.py`) defining `create_payment_intent()`, `verify_webhook()`, `refund()`. Adapters implement it for each provider.
|
|
26
|
+
- **Service layer** → business logic lives in `apps/*/services/`, never in views or serializers. Services are the only place that orchestrates multi-model operations.
|
|
27
|
+
- **Selector (query layer)** → pattern for database queries. Complex queries go in `apps/*/selectors/`, not in views or services directly.
|
|
28
|
+
|
|
29
|
+
## Infrastructure
|
|
30
|
+
|
|
31
|
+
- **ISR (Incremental Static Regeneration)** → Next.js feature. Pages are statically generated and revalidated at intervals (30 min for blog, 30 min for products).
|
|
32
|
+
- **Celery task** → async background job. Used for: email sending, analytics events, file processing. Never for synchronous request-response.
|
|
33
|
+
- **Health check** → `GET /ht/` endpoint. Checks DB, Redis, Celery, S3. Used by Docker, Nginx, and monitoring.
|
|
34
|
+
|
|
35
|
+
## Payment
|
|
36
|
+
|
|
37
|
+
- **PaymentIntent** → Stripe object representing a payment attempt. Created by backend, confirmed by frontend via Payment Element.
|
|
38
|
+
- **client_secret** → Stripe token passed to frontend to render Payment Element. Never store or log.
|
|
39
|
+
- **Idempotency** → webhook handler checks `StripeEvent.stripe_id` before processing. Duplicate webhooks are safely ignored.
|
|
40
|
+
- **SAQ-A** → PCI compliance level. Applies when card data never touches our servers (Stripe Payment Element handles it).
|
|
41
|
+
|
|
42
|
+
## Abbreviations
|
|
43
|
+
|
|
44
|
+
- DRF → Django REST Framework
|
|
45
|
+
- DDD → Domain-Driven Design
|
|
46
|
+
- SSOT → Single Source of Truth
|
|
47
|
+
- UFS → Universal File Standard (our doc header format)
|
|
48
|
+
- REF → Reference shortcode (see `foundation-map.md`)
|
|
49
|
+
- PRD → Product Requirements Document
|
|
50
|
+
- MVP → Minimum Viable Product (V1 launch scope)
|
|
51
|
+
- LCP → Largest Contentful Paint (Core Web Vital)
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
<!-- domain:ALL | layer:policy | ssot:true | updated:2026-03-14 -->
|
|
2
|
+
# Logging Standards
|
|
3
|
+
|
|
4
|
+
Purpose: Structured logging format, log levels, and PII exclusion rules for all backend services.
|
|
5
|
+
Read when: Adding logging to any backend code or configuring log infrastructure.
|
|
6
|
+
Skip when: Frontend-only changes.
|
|
7
|
+
Read next: `backend-rules.md` for general backend engineering rules.
|
|
8
|
+
|
|
9
|
+
> Nav: [Docs Index](../00-index.md) | [Code Style](../../CodeStyle.md)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Format
|
|
14
|
+
|
|
15
|
+
- **Production**: JSON via `python-json-logger` (already configured in `production.py`)
|
|
16
|
+
- **Development**: Standard text format for readability
|
|
17
|
+
- **Fields per log entry**: timestamp, level, logger_name, message, request_id (if available), user_id (if authenticated)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Log Levels by Event Type
|
|
22
|
+
|
|
23
|
+
| Level | When to Use | Examples |
|
|
24
|
+
|:------|:------------|:--------|
|
|
25
|
+
| DEBUG | Development-only detailed traces | SQL queries, template rendering, cache hits |
|
|
26
|
+
| INFO | Normal business operations | User registered, order created, email sent, download completed |
|
|
27
|
+
| WARNING | Recoverable issues that need attention | Rate limit hit, soft email bounce, deprecated API usage |
|
|
28
|
+
| ERROR | Failed operations that need investigation | Payment failed, webhook processing error, file validation failure |
|
|
29
|
+
| CRITICAL | System-level failures | Database connection lost, Redis unreachable, Celery worker crash |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Error Logging Patterns
|
|
34
|
+
|
|
35
|
+
- Log the full exception context (`exc_info=True`) at ERROR level for unexpected failures.
|
|
36
|
+
- Log expected business errors (validation, permission denied) at WARNING level without stack trace.
|
|
37
|
+
- **No PII in any `logger.*` call** — never pass `user.email`, full name, phone, or raw IP to any log level. Use `user.id` (UUID) only. For debugging that requires email context, use masked form (`j***@example.com`).
|
|
38
|
+
- Include request context (endpoint, method, user UUID) in error logs for traceability.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Security Event Logging
|
|
43
|
+
|
|
44
|
+
These events MUST be logged at INFO or WARNING level for audit:
|
|
45
|
+
|
|
46
|
+
- Login success/failure (WARNING for failures)
|
|
47
|
+
- Password reset request
|
|
48
|
+
- Account creation
|
|
49
|
+
- Permission denied (403)
|
|
50
|
+
- Rate limit exceeded (429)
|
|
51
|
+
- CAPTCHA validation failure
|
|
52
|
+
- Download access denied
|
|
53
|
+
- Admin actions (create/update/delete)
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## PII Exclusion Rules (CRITICAL)
|
|
58
|
+
|
|
59
|
+
**NEVER log:**
|
|
60
|
+
|
|
61
|
+
- Passwords (raw or hashed)
|
|
62
|
+
- Full credit card numbers (Stripe handles payment — we never see them)
|
|
63
|
+
- JWT tokens or refresh tokens
|
|
64
|
+
- API keys or secrets
|
|
65
|
+
- Full email addresses in ERROR/CRITICAL logs (use `j***@example.com` masking)
|
|
66
|
+
- IP addresses in logs retained > 90 days (anonymize for compliance)
|
|
67
|
+
|
|
68
|
+
**OK to log:**
|
|
69
|
+
|
|
70
|
+
- User IDs (UUIDs)
|
|
71
|
+
- Order IDs
|
|
72
|
+
- Product IDs
|
|
73
|
+
- Event types
|
|
74
|
+
- Status codes
|
|
75
|
+
- Masked emails in INFO logs (first char + *** + domain)
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Django LOGGING Configuration
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
LOGGING = {
|
|
83
|
+
"version": 1,
|
|
84
|
+
"disable_existing_loggers": False,
|
|
85
|
+
"formatters": {
|
|
86
|
+
"json": {
|
|
87
|
+
"()": "pythonjsonlogger.json.JsonFormatter",
|
|
88
|
+
"format": "%(asctime)s %(levelname)s %(name)s %(message)s",
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
"handlers": {
|
|
92
|
+
"console": {
|
|
93
|
+
"class": "logging.StreamHandler",
|
|
94
|
+
"formatter": "json",
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
"loggers": {
|
|
98
|
+
"apps": {"level": "INFO", "handlers": ["console"], "propagate": False},
|
|
99
|
+
"django.security": {"level": "WARNING", "handlers": ["console"], "propagate": False},
|
|
100
|
+
"celery": {"level": "INFO", "handlers": ["console"], "propagate": False},
|
|
101
|
+
},
|
|
102
|
+
"root": {"level": "WARNING", "handlers": ["console"]},
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
[Docs Index](../00-index.md)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<!-- domain:ALL | layer:policy | ssot:true | updated:2026-03-13 -->
|
|
2
|
+
# Naming Conventions & Project Structure
|
|
3
|
+
|
|
4
|
+
Purpose: Canonical naming and placement policy for the actual ExampleApp monorepo.
|
|
5
|
+
Read when: Deciding where files belong, how they should be named, or how route/API names should look.
|
|
6
|
+
Skip when: The task already targets an existing file and no placement/naming decision is needed.
|
|
7
|
+
Read next: `../architecture/03-project-structure.md` or the relevant engineering rules file.
|
|
8
|
+
|
|
9
|
+
> Nav: [Docs Index](../00-index.md) | [CodeStyle](../../CodeStyle.md) | [Architecture](../architecture/00-index.md)
|
|
10
|
+
|
|
11
|
+
## Monorepo Anchors
|
|
12
|
+
|
|
13
|
+
- `src/frontend/` → Next.js application
|
|
14
|
+
- `src/backend/` → Django application
|
|
15
|
+
- `src/shared/` → shared contracts/constants
|
|
16
|
+
- `docs/` → SSOT docs
|
|
17
|
+
- `infrastructure/` → deploy, nginx, and operational scripts
|
|
18
|
+
|
|
19
|
+
## Frontend Placement
|
|
20
|
+
|
|
21
|
+
- Routes live in `src/frontend/app/`
|
|
22
|
+
- Shared UI primitives live in `src/frontend/components/ui/`
|
|
23
|
+
- Shared page sections live in `src/frontend/components/sections/`
|
|
24
|
+
- Feature-specific composite components live in domain folders such as `src/frontend/components/admin/`
|
|
25
|
+
- Message files live in `src/frontend/messages/`
|
|
26
|
+
- Route metadata and AI-discovery files follow Next.js conventions or `src/frontend/public/` where appropriate
|
|
27
|
+
|
|
28
|
+
## Backend Placement
|
|
29
|
+
|
|
30
|
+
- Django apps live in `src/backend/apps/`
|
|
31
|
+
- App-local business logic lives in `src/backend/apps/<domain>/services/`
|
|
32
|
+
- App-local tests live in `src/backend/apps/<domain>/tests/`
|
|
33
|
+
- Cross-app integration tests live in `src/backend/tests/`
|
|
34
|
+
- Settings live in `src/backend/config/settings/`
|
|
35
|
+
|
|
36
|
+
## Naming Rules
|
|
37
|
+
|
|
38
|
+
- Directories and non-class files → `kebab-case` for frontend, `snake_case` for backend Python modules
|
|
39
|
+
- React components, serializers, models, viewsets → `PascalCase`
|
|
40
|
+
- Functions and variables → `camelCase` in TypeScript, `snake_case` in Python
|
|
41
|
+
- Booleans → `is*`, `has*`, `can*`
|
|
42
|
+
- Django apps → `snake_case` singular names such as `accounts`, `catalog`, `admin_dashboard`
|
|
43
|
+
- URL paths → `kebab-case`
|
|
44
|
+
- API base path → `/api/v1/`
|
|
45
|
+
- Exception classes → `DomainActionError` pattern (e.g., `CartEmptyError`, `PaymentFailedError`, `EntitlementRevokedError`)
|
|
46
|
+
- Error codes → SCREAMING_SNAKE_CASE matching `docs/api-contracts/error-format.md` (e.g., `CART_EMPTY`, `PAYMENT_FAILED`)
|
|
47
|
+
- Validation functions → `validate_*` prefix (e.g., `validate_upload`, `validate_coupon_code`)
|
|
48
|
+
- Edge case tests → `test_<action>_when_<condition>_<expected>` (e.g., `test_create_order_when_cart_empty_returns_400`)
|
|
49
|
+
|
|
50
|
+
## Route Naming
|
|
51
|
+
|
|
52
|
+
- Frontend admin application routes use `/admin/*`
|
|
53
|
+
- Django admin stays at `/back-office/`
|
|
54
|
+
- Public product routes use slugs, not IDs, where the route contract already defines slugs
|
|
55
|
+
|
|
56
|
+
## Task and Doc Naming
|
|
57
|
+
|
|
58
|
+
- Task files → `TASK-###-slug.md`
|
|
59
|
+
- ADRs → `ADR-###-slug.md`
|
|
60
|
+
- Index files → `00-index.md`
|
|
61
|
+
- Historical governance docs → `YYYY-MM-topic.md`
|
|
62
|
+
|
|
63
|
+
## Import Order
|
|
64
|
+
|
|
65
|
+
1. React / Next.js
|
|
66
|
+
2. Third-party packages
|
|
67
|
+
3. Internal modules
|
|
68
|
+
4. Types
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
<!-- domain:INFRA | layer:reference | ssot:true | updated:2026-03-29 -->
|
|
2
|
+
# Secrets Rotation Runbook
|
|
3
|
+
|
|
4
|
+
Purpose: Step-by-step procedures for rotating all production secrets with zero downtime.
|
|
5
|
+
Read when: A secret has been exposed, a rotation schedule triggers, or onboarding a new team member to ops procedures.
|
|
6
|
+
Skip when: No secrets need rotation and no exposure has occurred.
|
|
7
|
+
Read next: `../architecture/04a-auth-security.md` for auth architecture details.
|
|
8
|
+
|
|
9
|
+
> Nav: [Docs Index](../00-index.md) | [Backend Rules](./backend-rules.md)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Django SECRET_KEY
|
|
14
|
+
|
|
15
|
+
**Automated rotation available.** Django 4.1+ supports `SECRET_KEY_FALLBACKS` for zero-downtime key rotation.
|
|
16
|
+
|
|
17
|
+
### Automated (recommended)
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
make rotate-secret-key
|
|
21
|
+
# or with custom .env path:
|
|
22
|
+
bash infrastructure/scripts/rotate-secrets.sh --env-file src/backend/.env
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The script:
|
|
26
|
+
1. Generates a new 50-character random key
|
|
27
|
+
2. Moves the current key to `DJANGO_SECRET_KEY_FALLBACKS`
|
|
28
|
+
3. Sets the new key as `DJANGO_SECRET_KEY`
|
|
29
|
+
4. Creates a timestamped backup of `.env`
|
|
30
|
+
|
|
31
|
+
### Post-rotation
|
|
32
|
+
|
|
33
|
+
1. Deploy the application (existing sessions remain valid via fallback)
|
|
34
|
+
2. After 7+ days with no session errors: remove the old key from `DJANGO_SECRET_KEY_FALLBACKS`
|
|
35
|
+
3. Monitor Django logs for `Signature verification failed` warnings
|
|
36
|
+
|
|
37
|
+
### Manual (if script unavailable)
|
|
38
|
+
|
|
39
|
+
1. Generate: `python3 -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"`
|
|
40
|
+
2. Set `DJANGO_SECRET_KEY=<new_key>` in `.env`
|
|
41
|
+
3. Set `DJANGO_SECRET_KEY_FALLBACKS=<old_key>` in `.env` (comma-separated if multiple)
|
|
42
|
+
4. Deploy
|
|
43
|
+
5. After 7 days, remove old key from `DJANGO_SECRET_KEY_FALLBACKS`
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Stripe API Keys
|
|
48
|
+
|
|
49
|
+
Stripe keys support a 24-hour grace period where both old and new keys work.
|
|
50
|
+
|
|
51
|
+
### Steps
|
|
52
|
+
|
|
53
|
+
1. Go to Stripe Dashboard -> Developers -> API keys
|
|
54
|
+
2. Click "Roll key" on the secret key (`sk_live_...`)
|
|
55
|
+
3. Stripe provides the new key immediately; old key works for 24 hours
|
|
56
|
+
4. Validate the new key:
|
|
57
|
+
```bash
|
|
58
|
+
make rotate-secret WHICH=stripe
|
|
59
|
+
```
|
|
60
|
+
5. Update `STRIPE_LIVE_SECRET_KEY` (or `STRIPE_TEST_SECRET_KEY`) in `.env`
|
|
61
|
+
6. Deploy within 24 hours
|
|
62
|
+
7. Verify webhook signatures still work (webhook signing secret is separate)
|
|
63
|
+
|
|
64
|
+
### Webhook signing secret
|
|
65
|
+
|
|
66
|
+
1. Go to Stripe Dashboard -> Developers -> Webhooks -> your endpoint
|
|
67
|
+
2. Click "Reveal" on signing secret, then "Roll secret"
|
|
68
|
+
3. Update `STRIPE_WEBHOOK_SECRET` in `.env`
|
|
69
|
+
4. Deploy immediately (no grace period for webhook secrets)
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Postmark API Token
|
|
74
|
+
|
|
75
|
+
Postmark invalidates the old token immediately on regeneration. Schedule maintenance window.
|
|
76
|
+
|
|
77
|
+
### Steps
|
|
78
|
+
|
|
79
|
+
1. Go to Postmark -> Servers -> your server -> API Tokens
|
|
80
|
+
2. Click "Regenerate" (old token invalidated instantly)
|
|
81
|
+
3. Update `POSTMARK_SERVER_TOKEN` in `.env`
|
|
82
|
+
4. Deploy immediately
|
|
83
|
+
5. Verify email delivery by checking Postmark activity log
|
|
84
|
+
|
|
85
|
+
### Risk mitigation
|
|
86
|
+
|
|
87
|
+
- Schedule during low-traffic hours
|
|
88
|
+
- Have the new token ready to paste before regenerating
|
|
89
|
+
- Deploy within 2-3 minutes of regeneration
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Sentry DSN
|
|
94
|
+
|
|
95
|
+
Sentry DSN rotation is rarely needed. The DSN contains only the project ID and public key (no secret material). Rotate only if the DSN was accidentally exposed in client-side code alongside private data.
|
|
96
|
+
|
|
97
|
+
### Steps
|
|
98
|
+
|
|
99
|
+
1. Go to Sentry -> Settings -> Projects -> your project -> Client Keys
|
|
100
|
+
2. Click "Generate new key" (creates a new DSN; old remains active)
|
|
101
|
+
3. Update `SENTRY_DSN` in `.env`
|
|
102
|
+
4. Deploy
|
|
103
|
+
5. After confirming new DSN works: disable the old key in Sentry
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## PostHog API Key
|
|
108
|
+
|
|
109
|
+
PostHog project API keys are public by design (used in client-side analytics). Rotation is only needed if the project itself needs to change.
|
|
110
|
+
|
|
111
|
+
### Steps
|
|
112
|
+
|
|
113
|
+
1. Go to PostHog -> Settings -> Project -> API Key
|
|
114
|
+
2. Regenerate the project API key
|
|
115
|
+
3. Update `NEXT_PUBLIC_POSTHOG_KEY` in frontend `.env`
|
|
116
|
+
4. Rebuild and deploy the frontend
|
|
117
|
+
5. Old events may still arrive on the old key until all clients refresh
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Cloudflare Turnstile
|
|
122
|
+
|
|
123
|
+
### Steps
|
|
124
|
+
|
|
125
|
+
1. Go to Cloudflare Dashboard -> Turnstile -> your site
|
|
126
|
+
2. Click "Rotate secret key" (both keys valid for 24 hours)
|
|
127
|
+
3. Update `TURNSTILE_SECRET_KEY` in backend `.env`
|
|
128
|
+
4. Deploy backend within 24 hours
|
|
129
|
+
5. Site key (`NEXT_PUBLIC_TURNSTILE_SITE_KEY`) does not change during rotation
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Rotation Schedule
|
|
134
|
+
|
|
135
|
+
Recommended rotation cadence:
|
|
136
|
+
|
|
137
|
+
- **Django SECRET_KEY**: every 90 days or on suspected exposure
|
|
138
|
+
- **Stripe keys**: every 90 days or on suspected exposure
|
|
139
|
+
- **Postmark token**: only on suspected exposure (no grace period makes routine rotation risky)
|
|
140
|
+
- **Sentry DSN**: only on suspected exposure
|
|
141
|
+
- **PostHog key**: only if project change needed
|
|
142
|
+
- **Turnstile secret**: every 90 days or on suspected exposure
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<!-- domain:ALL | layer:playbook | ssot:true | updated:2026-03-17 -->
|
|
2
|
+
# Backend API Playbook
|
|
3
|
+
|
|
4
|
+
Purpose: Execute Django/DRF work using architecture, schema, and service-layer SSOT without scanning unrelated docs.
|
|
5
|
+
Read when: The task touches backend apps, models, services, serializers, auth, payments, downloads, or admin APIs.
|
|
6
|
+
Skip when: The task is frontend-only, docs-only, or pure content work.
|
|
7
|
+
Read next: `docs/architecture/00-index.md`, then the relevant domain architecture doc.
|
|
8
|
+
|
|
9
|
+
> Nav: [Docs Index](../00-index.md) | [Architecture Index](../architecture/00-index.md)
|
|
10
|
+
|
|
11
|
+
## Task-to-File Mapping
|
|
12
|
+
|
|
13
|
+
Use this to select the exact architecture doc(s). If a task spans multiple domains, read the architecture doc for **each** domain — do not limit to one.
|
|
14
|
+
|
|
15
|
+
- Auth / login / registration / JWT → `architecture/04a-auth-security.md`
|
|
16
|
+
- Rate limiting / throttling / abuse protection → `architecture/04a-auth-security.md` + `architecture/04b-web-security.md`
|
|
17
|
+
- CSP / CORS / XSS / web security → `architecture/04b-web-security.md`
|
|
18
|
+
- File downloads / signed URLs → `architecture/04c-download-security.md`
|
|
19
|
+
- Payment / Stripe / checkout flow → `architecture/08-payment-architecture.md`
|
|
20
|
+
- Email / notifications / MJML → `architecture/07-email-notifications.md`
|
|
21
|
+
- Analytics / PostHog / events → `architecture/09-analytics-posthog.md`
|
|
22
|
+
- Blog / i18n / content backend → `architecture/10-blog-content-i18n.md`
|
|
23
|
+
- Testing / pytest / factories → `architecture/05-testing-strategy.md`
|
|
24
|
+
- Docker / infra / deployment → `architecture/06a-infrastructure.md` + `06b-docker-services.md`
|
|
25
|
+
- Identity / RBAC / roles / permissions → `PRD/12-schema-erd.md`
|
|
26
|
+
- New model / schema change → `architecture/03a-monorepo-layout.md` + `PRD/09-data-model-apis.md`
|
|
27
|
+
- Tech stack / dependency question → `architecture/02a-core-dependencies.md`
|
|
28
|
+
|
|
29
|
+
## Read Selection Guide
|
|
30
|
+
|
|
31
|
+
> Complete lookup: AGENTS.md § Dimension Type Registry (auto-loaded). This section adds domain-specific detail for Orient phase.
|
|
32
|
+
|
|
33
|
+
The Classify phase generates a Read List. Use this mapping to select files — do NOT read all entries. Read only what matches your task's dimensions and unknowns.
|
|
34
|
+
|
|
35
|
+
### By Dimension Type
|
|
36
|
+
|
|
37
|
+
| If task involves... | Read these files |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| Schema / model changes | `PRD/12-schema-erd.md` + `PRD/12c-indexing-strategy.md` |
|
|
40
|
+
| Business logic | `PRD/08-functional-requirements.md` |
|
|
41
|
+
| API contract shape | `api-contracts/{domain}.md` + `PRD/09-data-model-apis.md` |
|
|
42
|
+
| Auth / security | `architecture/04a-auth-security.md` + `security-review.md` |
|
|
43
|
+
| Payments | `architecture/08-payment-architecture.md` |
|
|
44
|
+
| Scheduled tasks / expiry | `architecture/06c-scheduled-tasks.md` |
|
|
45
|
+
| Frontend page context | `pages-content-spec/{page}.md` |
|
|
46
|
+
| Error handling patterns | `engineering/backend-rules.md` § Error Handling Policy |
|
|
47
|
+
| Testing patterns | `engineering/backend-rules.md` § Edge Case Testing |
|
|
48
|
+
|
|
49
|
+
### Always Read (for any backend task)
|
|
50
|
+
|
|
51
|
+
1. The exact architecture doc(s) from the Task-to-File Mapping above
|
|
52
|
+
2. `docs/engineering/backend-rules.md`
|
|
53
|
+
|
|
54
|
+
### Read Only If Relevant
|
|
55
|
+
|
|
56
|
+
- `docs/prd/12-schema-erd.md` — only if models/columns are touched
|
|
57
|
+
- `docs/prd/08-functional-requirements.md` — only if business logic involved
|
|
58
|
+
- `docs/playbooks/security-review.md` — only if the change is security-sensitive
|
|
59
|
+
- `docs/pages-content-spec/{page}.md` — only if the API serves a specific frontend page
|
|
60
|
+
|
|
61
|
+
## Execution Rules
|
|
62
|
+
|
|
63
|
+
- Business logic lives in `src/backend/apps/*/services/`.
|
|
64
|
+
- Schema names come from `PRD/12-schema-erd.md`; never invent model or field names.
|
|
65
|
+
- Monetary values stay in integer cents.
|
|
66
|
+
- Webhooks and payment truth come from provider webhooks, not client callbacks.
|
|
67
|
+
- Use `/api/v1/` routes and keep API changes version-safe.
|
|
68
|
+
- When existing code is found (Orient phase — repo search step), read existing serializers, tests, and factories in the same app to identify spec-vs-implementation gaps before writing new code.
|
|
69
|
+
- If task involves error handling or validation: also read `backend-rules.md` § Error Handling Policy
|
|
70
|
+
- If task involves testing: also read `backend-rules.md` § Edge Case Testing
|
|
71
|
+
|
|
72
|
+
## Verification
|
|
73
|
+
|
|
74
|
+
**Required** (enforced by `enforce-verify.sh` domain-aware hook):
|
|
75
|
+
1. `make lint-backend` — ruff + mypy
|
|
76
|
+
2. `make test-backend` — pytest (1178+ tests)
|
|
77
|
+
3. Both must show PASS in `.claude/.last-verify.json` within 30 min
|
|
78
|
+
|
|
79
|
+
**Additional**: if migrations created, agent prepares files but user runs `make migrate`. See AGENTS.md § Verification Matrix for full domain mapping.
|
|
80
|
+
|
|
81
|
+
## MVP Task Sequencing
|
|
82
|
+
|
|
83
|
+
Backend tasks are grouped by dependency order. Complete earlier groups before later ones:
|
|
84
|
+
|
|
85
|
+
1. **Foundation** (TASK-043, 044) → project structure, base models, settings
|
|
86
|
+
2. **Identity & Auth** (TASK-045–048) → user model, JWT, OAuth, email verification
|
|
87
|
+
3. **Catalog & Products** (TASK-049–051) → product model, categories, search
|
|
88
|
+
4. **Commerce & Cart** (TASK-052–054) → cart, checkout flow, order model
|
|
89
|
+
5. **Payments & Fulfillment** (TASK-055–057) → Stripe integration, webhooks, entitlements
|
|
90
|
+
6. **Downloads & Delivery** (TASK-058–059) → signed URLs, download tracking
|
|
91
|
+
7. **Content & Blog** (TASK-060–061) → blog backend, content API
|
|
92
|
+
8. **Notifications** (TASK-062–063) → email templates, notification service
|
|
93
|
+
9. **Reviews & Engagement** (TASK-064–065) → review system, favorites
|
|
94
|
+
10. **Analytics** (TASK-066–067) → PostHog events, tracking
|
|
95
|
+
11. **Admin Dashboard** (TASK-068–069) → admin APIs, dashboard data
|
|
96
|
+
12. **SEO & Technical** (TASK-070–071) → backend-owned sitemap, structured data
|
|
97
|
+
13. **Security & QA** (TASK-072–074) → security hardening, penetration testing
|
|
98
|
+
14. **Deployment** (TASK-075–077) → staging, production, monitoring
|
|
99
|
+
|
|
100
|
+
## Migration Workflow
|
|
101
|
+
|
|
102
|
+
Agent creates migration files; user runs `make migrate`. For safety rules, multi-step patterns, and rollback procedures, see `docs/engineering/backend-rules.md` § Migration Rules.
|
|
103
|
+
|
|
104
|
+
## SSOT Transition — Docs to Code
|
|
105
|
+
|
|
106
|
+
Design docs are read-once blueprints. After implementation, code is the living truth:
|
|
107
|
+
|
|
108
|
+
- Table schema → `models.py` (not `docs/prd/12a`, `12b`)
|
|
109
|
+
- Indexes → `models.py Meta.indexes` (not `docs/prd/12c`)
|
|
110
|
+
- API endpoints → `drf-spectacular` at `/api/v1/schema/` (not `docs/api-contracts/`)
|
|
111
|
+
- Business logic → `services.py` (not `docs/architecture/`)
|
|
112
|
+
|
|
113
|
+
Do NOT update design docs after implementation — code is SSOT. Live API docs: `/api/v1/docs/` (Swagger UI).
|
|
114
|
+
|
|
115
|
+
## Stop and Escalate If
|
|
116
|
+
|
|
117
|
+
- architecture docs conflict with schema docs
|
|
118
|
+
- the endpoint contract is missing from PRD/architecture — **do not infer endpoints from page specs alone; log a blocker via `cos task-move TASK-NNN --to blocked`**
|
|
119
|
+
- the change requires undocumented security behavior or provider semantics
|
|
File without changes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
5
|
+
|
|
6
|
+
SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "dev-insecure-change-me")
|
|
7
|
+
DEBUG = os.environ.get("DJANGO_DEBUG", "true").lower() == "true"
|
|
8
|
+
ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "*").split(",")
|
|
9
|
+
|
|
10
|
+
INSTALLED_APPS = [
|
|
11
|
+
"django.contrib.contenttypes",
|
|
12
|
+
"django.contrib.auth",
|
|
13
|
+
"rest_framework",
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
MIDDLEWARE = [
|
|
17
|
+
"django.middleware.common.CommonMiddleware",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
ROOT_URLCONF = "config.urls"
|
|
21
|
+
WSGI_APPLICATION = "config.wsgi.application"
|
|
22
|
+
|
|
23
|
+
DATABASES = {
|
|
24
|
+
"default": {
|
|
25
|
+
"ENGINE": "django.db.backends.sqlite3",
|
|
26
|
+
"NAME": BASE_DIR / "db.sqlite3",
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
|
31
|
+
USE_TZ = True
|