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,117 @@
|
|
|
1
|
+
# Mobile Security Pre-Submission Checklist
|
|
2
|
+
|
|
3
|
+
Run before TestFlight / Play Internal Testing. Each item is a concrete check; uncheck → block release.
|
|
4
|
+
|
|
5
|
+
## Storage
|
|
6
|
+
|
|
7
|
+
- [ ] All auth tokens stored via `react-native-keychain` (NOT `AsyncStorage`, NOT plain `MMKV`).
|
|
8
|
+
- [ ] Refresh tokens stored same way.
|
|
9
|
+
- [ ] OAuth tokens (Google/Apple ID tokens) NEVER persisted client-side after exchange.
|
|
10
|
+
- [ ] Per-install MMKV encryption key stored in Keychain (if encrypted MMKV used).
|
|
11
|
+
- [ ] PII in encrypted DB (SQLCipher) OR clearly classified as non-sensitive.
|
|
12
|
+
- [ ] No hardcoded API secrets in source / build artifacts.
|
|
13
|
+
- [ ] No `.env` checked into the repo (every dev key separate from prod).
|
|
14
|
+
- [ ] Backup excluded for sensitive files: iOS sets `WHEN_UNLOCKED_THIS_DEVICE_ONLY`; Android `<exclude>` rules set.
|
|
15
|
+
|
|
16
|
+
## Network
|
|
17
|
+
|
|
18
|
+
- [ ] HTTPS-only — `Info.plist` ATS unrelaxed.
|
|
19
|
+
- [ ] Android `network_security_config.xml` rejects cleartext traffic globally.
|
|
20
|
+
- [ ] Certificate pinning decision documented (pinned with rotation plan, OR explicit "not pinning, here's why").
|
|
21
|
+
- [ ] If pinning: 2 SPKI hashes (current + backup), pin failure shows recoverable error.
|
|
22
|
+
- [ ] No HTTP fallback for any API endpoint.
|
|
23
|
+
- [ ] mitmproxy / Charles dev test: only TLS traffic, no cleartext.
|
|
24
|
+
- [ ] No PII in URL query parameters (logs, history leak).
|
|
25
|
+
- [ ] No tokens in URL paths.
|
|
26
|
+
|
|
27
|
+
## Authentication
|
|
28
|
+
|
|
29
|
+
- [ ] Sign In with Apple offered if any other social provider is offered (App Store rule).
|
|
30
|
+
- [ ] OAuth flows use PKCE.
|
|
31
|
+
- [ ] OAuth callbacks open in native browser tab (Custom Tabs / SFSafariViewController), NOT WebView.
|
|
32
|
+
- [ ] Magic-link / password-reset deep links validate token shape before action.
|
|
33
|
+
- [ ] Magic-link / password-reset show confirmation UI before mutating state ("you'll sign in as user@example.com").
|
|
34
|
+
- [ ] Biometric prompt for app unlock with passcode fallback.
|
|
35
|
+
- [ ] Re-prompt biometric on background > 60 seconds (banking-style).
|
|
36
|
+
- [ ] Step-up authentication for sensitive ops (transfer, change password, disable 2FA).
|
|
37
|
+
|
|
38
|
+
## Permissions
|
|
39
|
+
|
|
40
|
+
- [ ] iOS: every permission has `NSXxxUsageDescription` explaining WHY.
|
|
41
|
+
- [ ] Android: every permission has clear justification; sensitive ones (BIND_ACCESSIBILITY_SERVICE, QUERY_ALL_PACKAGES) declared in Play Console form.
|
|
42
|
+
- [ ] Permissions requested in context, not on first launch.
|
|
43
|
+
- [ ] Soft-prompt before OS prompt for non-trivial permissions.
|
|
44
|
+
- [ ] No third-party SDK silently adding permissions you don't need (audit merged manifest).
|
|
45
|
+
|
|
46
|
+
## Code Quality
|
|
47
|
+
|
|
48
|
+
- [ ] `console.*` stripped from release builds (`babel-plugin-transform-remove-console`).
|
|
49
|
+
- [ ] Sensitive headers (Authorization) NOT logged by API client even in dev.
|
|
50
|
+
- [ ] Sentry / Crashlytics `beforeSend` scrubs PII.
|
|
51
|
+
- [ ] `__DEV__` guard around dev-only screens / panels (Reactotron, debug menus).
|
|
52
|
+
- [ ] No `debuggable=true` in release Android build.
|
|
53
|
+
- [ ] R8/ProGuard enabled with rules for native modules + reflection-using libs.
|
|
54
|
+
- [ ] iOS app NOT signed with development cert in release (Distribution cert from team).
|
|
55
|
+
|
|
56
|
+
## WebViews (if used)
|
|
57
|
+
|
|
58
|
+
- [ ] WebView allowlist of acceptable origins.
|
|
59
|
+
- [ ] `setAllowFileAccess(false)` (Android), `WKWebViewConfiguration.allowsContentJavaScript=true` only when needed (iOS).
|
|
60
|
+
- [ ] No app credentials (cookies / tokens) leaked into WebView origin.
|
|
61
|
+
- [ ] PostMessage handlers validate `event.origin`.
|
|
62
|
+
|
|
63
|
+
## Deep Links
|
|
64
|
+
|
|
65
|
+
- [ ] Universal Links / App Links configured (HTTPS-served, AASA + assetlinks.json verified).
|
|
66
|
+
- [ ] Custom-scheme fallback validated; no auth flows rely solely on `app://` scheme.
|
|
67
|
+
- [ ] Every deep-link param shape regex-validated.
|
|
68
|
+
- [ ] NotFound route catches malformed URLs without crashing.
|
|
69
|
+
|
|
70
|
+
## App-Switcher / Background
|
|
71
|
+
|
|
72
|
+
- [ ] Sensitive screens redact in `inactive` state (iOS app switcher).
|
|
73
|
+
- [ ] Optional: Android `FLAG_SECURE` on screens with extreme sensitivity.
|
|
74
|
+
|
|
75
|
+
## SDK / Dependency Audit
|
|
76
|
+
|
|
77
|
+
- [ ] `yarn audit` / `npm audit` passes with no high-severity issues.
|
|
78
|
+
- [ ] No new dependencies added without 1-paragraph justification in PR.
|
|
79
|
+
- [ ] Major-version locked in `package.json`; minor/patch reviewed before bump.
|
|
80
|
+
- [ ] No SDK that requests permissions unrelated to its job (analytics asking for location, etc.).
|
|
81
|
+
|
|
82
|
+
## Build / Release
|
|
83
|
+
|
|
84
|
+
- [ ] iOS: deployment target ≥ 16. Distribution cert + provisioning profile valid.
|
|
85
|
+
- [ ] Android: `targetSdkVersion` = current Play floor, `minSdkVersion` ≥ 24.
|
|
86
|
+
- [ ] App Bundle (`.aab`) for Play, IPA for App Store.
|
|
87
|
+
- [ ] Play App Signing enabled.
|
|
88
|
+
- [ ] dSYM (iOS) + mapping file (Android) uploaded to crash reporter for symbolication.
|
|
89
|
+
- [ ] No `* (Apple Wildcard)` provisioning profile in release build.
|
|
90
|
+
- [ ] No production API URL accidentally in dev build (and vice versa).
|
|
91
|
+
|
|
92
|
+
## Pre-Flight Verification
|
|
93
|
+
|
|
94
|
+
- [ ] **MobSF scan** of release build — no high-severity issues.
|
|
95
|
+
- [ ] **Filesystem audit** — install on test device, inspect app sandbox, confirm no plaintext tokens / PII.
|
|
96
|
+
- [ ] **Backup audit** — back up to iCloud/Google, restore on fresh device, confirm no sensitive data crosses.
|
|
97
|
+
- [ ] **mitmproxy capture** — only TLS, no PII in URLs, all expected headers present.
|
|
98
|
+
- [ ] **OS-level smoke** — VoiceOver/TalkBack passes on auth flows; Dynamic Type ≤ accessibility5 doesn't break.
|
|
99
|
+
- [ ] **Cold-start crash check** — install fresh, launch, verify no crash on the slowest supported device.
|
|
100
|
+
|
|
101
|
+
## Logout / Account Deletion
|
|
102
|
+
|
|
103
|
+
- [ ] Logout button visible in Settings.
|
|
104
|
+
- [ ] Logout calls server `/auth/logout` AND wipes Keychain AND resets Zustand stores AND navigates to sign-in.
|
|
105
|
+
- [ ] Account deletion path exists (App Store + Play Store BOTH require this).
|
|
106
|
+
- [ ] Account deletion confirms with "this is permanent" prompt.
|
|
107
|
+
- [ ] Account deletion server-side: revokes all sessions + refresh tokens, marks user `deleted_at`, schedules data purge per data-retention policy.
|
|
108
|
+
|
|
109
|
+
## Failure Surfaces
|
|
110
|
+
|
|
111
|
+
- [ ] Network failure shows actionable error (not "Error" with no detail).
|
|
112
|
+
- [ ] Pin failure shows "couldn't verify connection — please update".
|
|
113
|
+
- [ ] Sign-in failure shows generic "couldn't sign in" (no enumeration via "user not found" vs "wrong password").
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
If any box is unchecked, document the reason in a tracking issue with an ETA. Mobile security bugs ship for the lifetime of an app version — slow to recall, slow to update.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# OWASP MASVS L1 — Per-Requirement Checklist
|
|
2
|
+
|
|
3
|
+
OWASP MASVS v2.0 Level 1 covers the security baseline for all mobile apps. Higher levels (L2 = sensitive data, L3 = nation-state) layer on top. Most consumer apps meet L1.
|
|
4
|
+
|
|
5
|
+
Each requirement maps to a concrete check or implementation.
|
|
6
|
+
|
|
7
|
+
## MASVS-STORAGE — Secure Data Storage
|
|
8
|
+
|
|
9
|
+
- [ ] **MASVS-STORAGE-1**: The app uses an appropriate platform mechanism (Keychain / Keystore) to store sensitive data.
|
|
10
|
+
- Tokens in `react-native-keychain`, never in `AsyncStorage` or unencrypted MMKV.
|
|
11
|
+
- TOTP shared secrets NOT stored on the device — server-side only, KMS-encrypted.
|
|
12
|
+
|
|
13
|
+
- [ ] **MASVS-STORAGE-2**: The app does not write sensitive data to system logs or shared storage.
|
|
14
|
+
- `console.*` stripped from release builds.
|
|
15
|
+
- No `Log.d(TAG, sessionToken)`, no `NSLog(@"%@", token)`.
|
|
16
|
+
- SQLite databases either NOT containing sensitive data, or encrypted (SQLCipher).
|
|
17
|
+
- `android:allowBackup="false"` OR `<exclude domain="sharedpref" path="auth.xml" />` in backup rules.
|
|
18
|
+
- iOS: sensitive Keychain items use `WHEN_UNLOCKED_THIS_DEVICE_ONLY` (not backed up).
|
|
19
|
+
|
|
20
|
+
## MASVS-CRYPTO — Cryptography
|
|
21
|
+
|
|
22
|
+
- [ ] **MASVS-CRYPTO-1**: The app uses cryptography for an explicit security need (no "encryption theater").
|
|
23
|
+
- You can articulate WHY each crypto operation exists.
|
|
24
|
+
- You're not "obfuscating" data with XOR or base64 and calling it encryption.
|
|
25
|
+
|
|
26
|
+
- [ ] **MASVS-CRYPTO-2**: The app uses current, industry-vetted cryptographic primitives.
|
|
27
|
+
- AES-GCM, not AES-ECB.
|
|
28
|
+
- Key derivation: PBKDF2 (≥600k iterations in 2026) or scrypt or Argon2.
|
|
29
|
+
- No MD5, SHA-1, RC4, DES, 3DES.
|
|
30
|
+
- No homegrown crypto.
|
|
31
|
+
|
|
32
|
+
## MASVS-AUTH — Authentication and Session Management
|
|
33
|
+
|
|
34
|
+
- [ ] **MASVS-AUTH-1**: The app uses secure authentication and authorization protocols.
|
|
35
|
+
- See `auth-patterns` skill — passkeys / OAuth 2.1+PKCE / opaque sessions.
|
|
36
|
+
- No HTTP Basic Auth.
|
|
37
|
+
|
|
38
|
+
- [ ] **MASVS-AUTH-2**: Local authentication (biometric / passcode) is invocable when needed.
|
|
39
|
+
- `BIOMETRY_ANY_OR_DEVICE_PASSCODE` for app unlock.
|
|
40
|
+
- Step-up auth for sensitive ops.
|
|
41
|
+
|
|
42
|
+
- [ ] **MASVS-AUTH-3**: The app secures sensitive operations and data with additional authentication.
|
|
43
|
+
- Money transfers, password change, 2FA disable: re-prompt biometric or password.
|
|
44
|
+
|
|
45
|
+
## MASVS-NETWORK — Network Communication
|
|
46
|
+
|
|
47
|
+
- [ ] **MASVS-NETWORK-1**: The app secures all network traffic according to the current best practices.
|
|
48
|
+
- HTTPS-only (TLS 1.2+; prefer TLS 1.3).
|
|
49
|
+
- iOS ATS enabled, no exemption domains.
|
|
50
|
+
- Android Network Security Config with `cleartextTrafficPermitted=false`.
|
|
51
|
+
|
|
52
|
+
- [ ] **MASVS-NETWORK-2**: The app performs identity pinning where applicable.
|
|
53
|
+
- Pin SPKI hashes (current + backup key) for high-value endpoints.
|
|
54
|
+
- OR: explicit decision to NOT pin, documented, with rationale.
|
|
55
|
+
|
|
56
|
+
## MASVS-PLATFORM — Platform Interaction
|
|
57
|
+
|
|
58
|
+
- [ ] **MASVS-PLATFORM-1**: The app uses IPC mechanisms securely.
|
|
59
|
+
- Android: `exported="false"` on all Activities/Services/Receivers/Providers unless you mean to expose them.
|
|
60
|
+
- iOS: URL scheme handlers validate input; no blind dispatch.
|
|
61
|
+
|
|
62
|
+
- [ ] **MASVS-PLATFORM-2**: The app only uses WebViews securely.
|
|
63
|
+
- `setJavaScriptEnabled(true)` only when needed.
|
|
64
|
+
- `setAllowFileAccess(false)`, `setAllowContentAccess(false)`, `setAllowFileAccessFromFileURLs(false)`.
|
|
65
|
+
- Origin allowlist for `postMessage` recipients.
|
|
66
|
+
- No mixing app credentials into WebView (cookies, localStorage).
|
|
67
|
+
|
|
68
|
+
- [ ] **MASVS-PLATFORM-3**: The app protects against deep-link / Intent injection.
|
|
69
|
+
- Validate every deep-link param shape (regex / type guards).
|
|
70
|
+
- Authentication-relevant deep links (magic link, password reset): single-use server-side, render confirmation UI before action.
|
|
71
|
+
|
|
72
|
+
## MASVS-CODE — Code Quality
|
|
73
|
+
|
|
74
|
+
- [ ] **MASVS-CODE-1**: The app requires up-to-date platform versions.
|
|
75
|
+
- iOS deployment target ≥ 16 (covers passkeys + modern privacy APIs).
|
|
76
|
+
- Android `minSdkVersion` ≥ 24, `targetSdkVersion` = current Play requirement (35 in 2026).
|
|
77
|
+
|
|
78
|
+
- [ ] **MASVS-CODE-2**: The app has a mechanism for forcing app updates.
|
|
79
|
+
- Server returns a `min_app_version` header / endpoint.
|
|
80
|
+
- Client refuses to function (or shows update prompt) when below.
|
|
81
|
+
- Use force-update sparingly; only for security fixes.
|
|
82
|
+
|
|
83
|
+
- [ ] **MASVS-CODE-3**: The app is signed and provisioned correctly.
|
|
84
|
+
- iOS: distribution certificate from your team, no jailbroken bypasses.
|
|
85
|
+
- Android: Play App Signing enabled.
|
|
86
|
+
|
|
87
|
+
- [ ] **MASVS-CODE-4**: The app uses up-to-date third-party libraries with known vulnerabilities patched.
|
|
88
|
+
- `yarn audit` / `npm audit` weekly, with a clear "no high-severity unfixed" policy.
|
|
89
|
+
- Pin major versions; review minor/patch upgrades.
|
|
90
|
+
- Cap transitive dependencies via `resolutions` in `package.json`.
|
|
91
|
+
|
|
92
|
+
## MASVS-RESILIENCE — Resilience
|
|
93
|
+
|
|
94
|
+
(L1 doesn't require RESILIENCE; included for completeness if you target L2.)
|
|
95
|
+
|
|
96
|
+
- **MASVS-RESILIENCE-1**: The app validates the integrity of the platform.
|
|
97
|
+
- Optional root/jailbreak detection (JailMonkey).
|
|
98
|
+
- Optional integrity attestation (Play Integrity API on Android, DeviceCheck / App Attest on iOS).
|
|
99
|
+
|
|
100
|
+
- **MASVS-RESILIENCE-2**: The app implements anti-tampering / anti-debug.
|
|
101
|
+
- Optional. Most consumer apps skip. Add for high-value targets.
|
|
102
|
+
|
|
103
|
+
- **MASVS-RESILIENCE-3**: The app implements anti-static-analysis.
|
|
104
|
+
- R8/ProGuard for Android (most apps).
|
|
105
|
+
- iOS Swift code is harder to reverse than Obj-C; standard.
|
|
106
|
+
- Don't bother with serious obfuscation unless threat model demands it.
|
|
107
|
+
|
|
108
|
+
- **MASVS-RESILIENCE-4**: The app detects and responds to runtime tampering.
|
|
109
|
+
- Optional. Frida detection, debugger detection, etc. Brittle — best-effort.
|
|
110
|
+
|
|
111
|
+
## Production Verification
|
|
112
|
+
|
|
113
|
+
Before each release, run:
|
|
114
|
+
|
|
115
|
+
1. **MobSF** (`docker run -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest`) — upload the IPA / AAB and review the report.
|
|
116
|
+
2. **`yarn audit --groups dependencies` / `pnpm audit`** — fail the build on high-severity.
|
|
117
|
+
3. **`grep -r "console\." mobile/src/` after build** — should be zero in release bundle.
|
|
118
|
+
4. **Network capture with mitmproxy** in dev — verify TLS, no cleartext, no PII in URLs.
|
|
119
|
+
5. **Backup audit** — restore from iCloud / Google to a fresh device; verify no sensitive data crosses.
|
|
120
|
+
|
|
121
|
+
## Source Material
|
|
122
|
+
|
|
123
|
+
- OWASP — *MASVS v2.0*: <https://mas.owasp.org/MASVS/>
|
|
124
|
+
- OWASP — *MASTG*: <https://mas.owasp.org/MASTG/> (test cases per requirement)
|
|
125
|
+
- *MobSF* — automated scanner: <https://github.com/MobSF/Mobile-Security-Framework-MobSF>
|
|
126
|
+
- Apple — *Security Overview*: <https://support.apple.com/guide/security/welcome/web>
|
|
127
|
+
- Android — *App Security Best Practices*: <https://developer.android.com/topic/security/best-practices>
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-web
|
|
3
|
+
tier: cross-cutting
|
|
4
|
+
domain: [security]
|
|
5
|
+
description: Server-side / API-side security per OWASP Top-10 (2025 release). Use when writing or reviewing backend code (Go+Fiber business core, Python+FastAPI AI adapter, Node) for broken access control, security misconfiguration, supply-chain failures, cryptographic mistakes, injection, insecure design, authentication failures, integrity failures, logging/alerting gaps, mishandling of exceptional conditions, plus SSRF/CSRF/XXE/SSTI/secrets/headers (CSP/HSTS/COOP/COEP) and JWT pitfalls. Pairs with auth-patterns and security-mobile.
|
|
6
|
+
last_reviewed: "2026-05-11"
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Web / Backend Security — OWASP Top-10 (2025) + 2026 Practice
|
|
11
|
+
|
|
12
|
+
A practical playbook for hardening server-side code. Anchored on **OWASP Top-10 (2025)** — released November 2025, the current standard, replaces the 2021 list. Targets the project's stack — Go+Fiber business backend + Python+FastAPI AI adapter + PostgreSQL — with concrete code per category.
|
|
13
|
+
|
|
14
|
+
## When to Use This Skill
|
|
15
|
+
|
|
16
|
+
- Writing or reviewing any backend route / handler / middleware.
|
|
17
|
+
- Adding a new third-party SDK / dependency.
|
|
18
|
+
- Setting up TLS / HSTS / CSP headers.
|
|
19
|
+
- Auditing existing code for OWASP categories.
|
|
20
|
+
- Pre-launch security review.
|
|
21
|
+
- Investigating a security incident or pentest finding.
|
|
22
|
+
|
|
23
|
+
For client-side mobile hardening, see `security-mobile`. For auth specifically, see `auth-patterns`.
|
|
24
|
+
|
|
25
|
+
## OWASP Top-10 (2025) — Per Category
|
|
26
|
+
|
|
27
|
+
The full per-category walk-through with concrete defenses + code samples is in [references/owasp-top-10.md](references/owasp-top-10.md). The skim summary, in 2025 ranking order:
|
|
28
|
+
|
|
29
|
+
| ID | Category | 2021 → 2025 change | Top defense |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| A01 | **Broken Access Control** | same #1 | Default deny; use case asserts ownership; multi-tenant via Postgres RLS |
|
|
32
|
+
| A02 | **Security Misconfiguration** | ↑ from #5 to #2 | Security headers; no DEBUG in prod; default admin paths protected; least-privilege containers |
|
|
33
|
+
| A03 | **Software Supply Chain Failures** | renamed + expanded from "Vulnerable & Outdated Components" (was #6) | SBOM per release; pin commits not tags in CI; OIDC short-lived tokens; staged rollouts; MFA on registry/repo accounts |
|
|
34
|
+
| A04 | **Cryptographic Failures** | ↓ from #2 to #4 | TLS 1.2+; Argon2id for passwords; SHA-256 for refresh-token hashing; KMS-encrypted PII |
|
|
35
|
+
| A05 | **Injection** | ↓ from #3 to #5 | Parameterized queries everywhere; never concat user input into SQL/shell/templates |
|
|
36
|
+
| A06 | **Insecure Design** | ↓ from #4 to #6 | Server-authoritative checks; idempotency; rate limiting; threat modeling |
|
|
37
|
+
| A07 | **Authentication Failures** | renamed (was "Identification and Authentication Failures") | See `auth-patterns` skill |
|
|
38
|
+
| A08 | **Software or Data Integrity Failures** | same #8 | No insecure deserialization; signed updates; pinned action SHAs |
|
|
39
|
+
| A09 | **Security Logging and Alerting Failures** | renamed (was "Monitoring") | Auth events logged with request_id; alerts on anomalies; runbooks per alert |
|
|
40
|
+
| A10 | **Mishandling of Exceptional Conditions** | **NEW in 2025** | Catch at source; fail-closed transactions; centralized error handler; resource cleanup in `finally` |
|
|
41
|
+
|
|
42
|
+
**SSRF** (A10:2021) **dropped out** of the Top 10 — still a real risk, now treated under **Insecure Design (A06:2025)** for URL-fetching endpoints. The mitigations don't change; just the top-level numbering.
|
|
43
|
+
|
|
44
|
+
## Beyond OWASP Top-10 — Common Bonus Risks
|
|
45
|
+
|
|
46
|
+
- **SSRF** (now under A06): allowlist target hosts; block private IP ranges; re-resolve DNS; short timeouts. See [references/owasp-top-10.md](references/owasp-top-10.md) section A06 for full code.
|
|
47
|
+
- **CSRF** (cookie-auth web only): SameSite=Strict + double-submit token / custom header.
|
|
48
|
+
- **XXE**: defusedxml (Python); Go encoding/xml safe by default.
|
|
49
|
+
- **SSTI**: parameter binding only, never string-concat user input into templates.
|
|
50
|
+
- **Mass assignment**: explicit DTOs at the boundary; never `model.update(**body)`.
|
|
51
|
+
- **Path traversal**: `Path.resolve().is_relative_to(base)` check on every user-supplied path.
|
|
52
|
+
- **Open redirect**: allowlist destinations on `?return_to=` and OAuth callback URLs.
|
|
53
|
+
|
|
54
|
+
## Security Headers — JSON API Defaults
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
|
|
58
|
+
X-Content-Type-Options: nosniff
|
|
59
|
+
X-Frame-Options: DENY
|
|
60
|
+
Referrer-Policy: strict-origin-when-cross-origin
|
|
61
|
+
Permissions-Policy: camera=(), microphone=(), geolocation=(), interest-cohort=()
|
|
62
|
+
Content-Security-Policy: default-src 'none'; frame-ancestors 'none'
|
|
63
|
+
Cross-Origin-Opener-Policy: same-origin
|
|
64
|
+
Cross-Origin-Resource-Policy: same-site
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
For HTML pages, replace CSP with a per-page policy using nonces (NOT `unsafe-inline`).
|
|
68
|
+
|
|
69
|
+
Set as middleware that runs on every response. Don't trust devs to remember per-route.
|
|
70
|
+
|
|
71
|
+
## CORS — Default Deny
|
|
72
|
+
|
|
73
|
+
```go
|
|
74
|
+
import "github.com/gofiber/fiber/v3/middleware/cors"
|
|
75
|
+
|
|
76
|
+
app.Use(cors.New(cors.Config{
|
|
77
|
+
AllowOrigins: []string{"https://app.com", "https://admin.app.com"},
|
|
78
|
+
AllowCredentials: true,
|
|
79
|
+
AllowMethods: []string{"GET", "POST", "PATCH", "DELETE"},
|
|
80
|
+
AllowHeaders: []string{"Authorization", "Content-Type", "Idempotency-Key"},
|
|
81
|
+
MaxAge: 600,
|
|
82
|
+
}))
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
NEVER `AllowOrigins: ["*"]` with `AllowCredentials: true`. The browser refuses, but the misconfig is a smell.
|
|
86
|
+
|
|
87
|
+
## Secrets Management
|
|
88
|
+
|
|
89
|
+
- **NEVER** in source code, Dockerfiles, env vars committed to repos.
|
|
90
|
+
- **Use a secrets manager**: AWS Secrets Manager / GCP Secret Manager / HashiCorp Vault / 1Password Connect.
|
|
91
|
+
- **App fetches secrets at startup** (or via short-lived token from secrets manager).
|
|
92
|
+
- **Rotate**: quarterly + immediately on any access by someone who shouldn't have it.
|
|
93
|
+
- **Audit access logs** of the secrets manager.
|
|
94
|
+
- **Don't proliferate** — one secret per purpose, no "shared utility token".
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
async def lifespan(app):
|
|
98
|
+
config = await load_config_with_secrets() # at startup, not import-time
|
|
99
|
+
app.state.config = config
|
|
100
|
+
yield
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Supply-Chain Hardening
|
|
104
|
+
|
|
105
|
+
For the layered defense (lockfiles → vulnerability scanning → dep review → minimization → confusion defense → provenance/sigstore → CI hardening → runtime detection → SBOM), see [references/supply-chain.md](references/supply-chain.md).
|
|
106
|
+
|
|
107
|
+
Mandatory minimum:
|
|
108
|
+
|
|
109
|
+
- All lockfiles committed.
|
|
110
|
+
- CI runs `osv-scanner --recursive .` — fails on high.
|
|
111
|
+
- GitHub Actions pinned to commit SHA, not tag.
|
|
112
|
+
- Short-lived OIDC tokens for cloud auth.
|
|
113
|
+
- SBOM per release (CycloneDX or SPDX).
|
|
114
|
+
|
|
115
|
+
## Dependency Vulnerability Process
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Go
|
|
119
|
+
govulncheck ./...
|
|
120
|
+
|
|
121
|
+
# Python
|
|
122
|
+
pip-audit # PyPI vulnerabilities
|
|
123
|
+
# OR
|
|
124
|
+
safety check
|
|
125
|
+
|
|
126
|
+
# Node
|
|
127
|
+
yarn npm audit --severity high --recursive
|
|
128
|
+
|
|
129
|
+
# Cross-platform (preferred — single tool, all ecosystems via OSV database)
|
|
130
|
+
osv-scanner --recursive .
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
CI: fail the build on `severity >= high`. Ignore via explicit allowlist with expiration date.
|
|
134
|
+
|
|
135
|
+
## Incident Response
|
|
136
|
+
|
|
137
|
+
- **Logs centralized** + retained 90+ days.
|
|
138
|
+
- **Runbook** for "user reports account takeover" / "leaked secret detected" / "PII data leak suspected".
|
|
139
|
+
- **Disclosure channel** (`security@app.com`) with 48-hour SLA.
|
|
140
|
+
- **Rotate** affected secrets immediately on detection.
|
|
141
|
+
- **Notify** affected users per regulatory requirements (GDPR: 72h to authority; CPRA: prompt user notice).
|
|
142
|
+
|
|
143
|
+
## A10:2025 Mishandling of Exceptional Conditions — The New One
|
|
144
|
+
|
|
145
|
+
NEW in 2025. Most teams have never explicitly defended against this category. Three failure modes:
|
|
146
|
+
|
|
147
|
+
1. **Resource leaks** on exception → file uploads don't close handles, eventually OOM the process.
|
|
148
|
+
2. **Information leak** in error responses → DB error message exposes table names → SQLi reconnaissance.
|
|
149
|
+
3. **Partial commits** on transaction failure → attacker exploits the half-applied state (drained accounts, duplicate transfers).
|
|
150
|
+
|
|
151
|
+
**Defenses**:
|
|
152
|
+
|
|
153
|
+
- **Catch at source, not at the top-level handler.** A 200-line `try/except Exception` in the route is a smell.
|
|
154
|
+
- **`with` / `defer` / `finally` for ALL resource acquisition** — file handles, DB connections, locks, GPU/ML buffers.
|
|
155
|
+
- **Atomic transaction OR full rollback** — `UnitOfWork.run(...)` per `hexagonal-architecture` skill. Never partial commit.
|
|
156
|
+
- **Centralized error envelope** — RFC 9457 (per `api-design`) — DON'T construct error JSON ad-hoc per route.
|
|
157
|
+
- **Fail-closed in security-relevant code**: if auth check throws, return 401 — never default to "allow because exception".
|
|
158
|
+
- **Resource quotas** at the framework: max body size, max upload count, max concurrent connections per user.
|
|
159
|
+
- **Test the unhappy path**: pytest fixtures that throw mid-transaction, mid-stream, mid-write — assert state stays clean.
|
|
160
|
+
|
|
161
|
+
```python
|
|
162
|
+
# BAD — leaks file handle on exception, leaks SQL detail on response
|
|
163
|
+
@app.post("/upload")
|
|
164
|
+
async def upload(file: UploadFile):
|
|
165
|
+
f = open("/var/uploads/" + file.filename, "wb")
|
|
166
|
+
while chunk := await file.read(1 << 16):
|
|
167
|
+
f.write(chunk)
|
|
168
|
+
await db.execute("INSERT INTO files (path) VALUES ($1)", file.filename)
|
|
169
|
+
f.close()
|
|
170
|
+
|
|
171
|
+
# GOOD — context-managed file, validated path, generic error
|
|
172
|
+
@app.post("/upload")
|
|
173
|
+
async def upload(file: UploadFile):
|
|
174
|
+
safe = safe_upload_path(file.filename) # raises on traversal
|
|
175
|
+
try:
|
|
176
|
+
async with aiofiles.open(safe, "wb") as f:
|
|
177
|
+
while chunk := await file.read(1 << 16):
|
|
178
|
+
await f.write(chunk)
|
|
179
|
+
await db.execute("INSERT INTO files (path) VALUES ($1)", safe.name)
|
|
180
|
+
except DBError as exc:
|
|
181
|
+
logger.error("file insert failed", extra={"path_hash": h(safe), "exc": str(exc)})
|
|
182
|
+
await aiofiles.os.remove(safe) # rollback the side effect
|
|
183
|
+
raise HTTPException(500, detail="upload failed") from exc
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Common Backend-Security Mistakes
|
|
187
|
+
|
|
188
|
+
1. **Trusting client-side data** — client is hostile by default.
|
|
189
|
+
2. **No input validation** — every external string is potentially malicious.
|
|
190
|
+
3. **String interpolation in SQL** — SQLi waiting to happen.
|
|
191
|
+
4. **`eval` / `exec` / dynamic code** — almost never the right answer.
|
|
192
|
+
5. **Sensitive data in logs / error responses** — incident waiting to happen.
|
|
193
|
+
6. **Rate limit per IP only** — IPv6 makes this useless; rate limit per user too.
|
|
194
|
+
7. **No CSRF defense on cookie auth** — drive-by sites take action as the user.
|
|
195
|
+
8. **CORS `*` with credentials** — browser blocks, but the intent leaked.
|
|
196
|
+
9. **Long-lived secrets in env vars** — first leak forever.
|
|
197
|
+
10. **No security headers** — XSS / clickjacking / MIME-sniffing trivial.
|
|
198
|
+
11. **Outdated dependencies** — known CVEs unfixed for months.
|
|
199
|
+
12. **No SSRF protection** on URL-fetching endpoints.
|
|
200
|
+
13. **Mass assignment** without DTO — privilege escalation via crafted body.
|
|
201
|
+
14. **Path traversal** in upload / download endpoints.
|
|
202
|
+
15. **Open redirect** in OAuth callback / login flow.
|
|
203
|
+
|
|
204
|
+
## Pre-Production Checklist
|
|
205
|
+
|
|
206
|
+
See [assets/security-web-checklist.md](assets/security-web-checklist.md) — gate runs through every category with concrete checks. Unchecked items block release.
|
|
207
|
+
|
|
208
|
+
## Source Material
|
|
209
|
+
|
|
210
|
+
- *OWASP Top-10 (2025)*: <https://owasp.org/Top10/2025/> (released November 2025; current standard).
|
|
211
|
+
- *OWASP API Security Top-10 (2023)*: <https://owasp.org/API-Security/> (separate list specifically for APIs).
|
|
212
|
+
- *OWASP ASVS v5.0* (Application Security Verification Standard, 2024+).
|
|
213
|
+
- *OWASP Cheat Sheet Series*: <https://cheatsheetseries.owasp.org/>
|
|
214
|
+
- *NIST SP 800-218* — Secure Software Development Framework.
|
|
215
|
+
- *NIST SP 800-61* — Computer Security Incident Handling Guide (for A09 alerting / runbooks).
|
|
216
|
+
- *PortSwigger Web Security Academy* — best free training.
|
|
217
|
+
- *CISA Known Exploited Vulnerabilities catalog* — for prioritizing patch work.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Server-Side Security Pre-Production Checklist (OWASP Top-10 2025)
|
|
2
|
+
|
|
3
|
+
Run before promoting a backend service to production traffic. Each item is a concrete check; uncheck → block release.
|
|
4
|
+
|
|
5
|
+
Sections in 2025 ranking order.
|
|
6
|
+
|
|
7
|
+
## Broken Access Control (A01:2025) — still #1
|
|
8
|
+
|
|
9
|
+
- [ ] Every endpoint requires explicit auth check.
|
|
10
|
+
- [ ] Role/scope validated server-side, never trusted from client.
|
|
11
|
+
- [ ] Use cases assert resource ownership (or admin) before mutating.
|
|
12
|
+
- [ ] Multi-tenant: tenant_id filter in every query OR Postgres RLS active.
|
|
13
|
+
- [ ] IDOR test: enumerate IDs as user A, verify all reads/writes for user B return 403/404.
|
|
14
|
+
- [ ] Admin endpoints behind separate auth + IP allowlist.
|
|
15
|
+
|
|
16
|
+
## Security Misconfiguration (A02:2025) — ↑ from #5
|
|
17
|
+
|
|
18
|
+
- [ ] Security headers set on every response (HSTS, CSP, COOP, CORP, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-Frame-Options).
|
|
19
|
+
- [ ] CORS allowlist; no `*` with credentials.
|
|
20
|
+
- [ ] No `DEBUG=True` in production.
|
|
21
|
+
- [ ] Stack traces never returned to clients.
|
|
22
|
+
- [ ] Default admin paths (`/admin`, `/swagger`) gated by auth + IP allowlist.
|
|
23
|
+
- [ ] Container: minimal base image, non-root user, read-only FS, dropped capabilities (`--cap-drop=ALL`).
|
|
24
|
+
- [ ] Kubernetes `securityContext`: `runAsNonRoot: true`, `readOnlyRootFilesystem: true`.
|
|
25
|
+
- [ ] Cloud IAM: principle of least privilege; no wildcard policies.
|
|
26
|
+
- [ ] No leftover dev tools / debug endpoints / test data in production.
|
|
27
|
+
|
|
28
|
+
## Software Supply Chain Failures (A03:2025) — renamed + expanded; ↑ from #6
|
|
29
|
+
|
|
30
|
+
- [ ] All lockfiles committed (`go.sum`, `uv.lock`, `yarn.lock`, etc.). CI uses `--frozen-lockfile`.
|
|
31
|
+
- [ ] CI runs `osv-scanner --recursive .` (cross-ecosystem) — fails on high.
|
|
32
|
+
- [ ] Plus per-ecosystem: `govulncheck` / `pip-audit` / `yarn npm audit`.
|
|
33
|
+
- [ ] No deps unpatched > 30 days for high-severity CVEs.
|
|
34
|
+
- [ ] No abandoned deps (last commit > 2 years).
|
|
35
|
+
- [ ] Dependency PRs reviewed (Dependabot / Renovate not auto-merged blindly).
|
|
36
|
+
- [ ] SBOM generated per release (CycloneDX or SPDX); attached to GitHub release.
|
|
37
|
+
- [ ] **GitHub Actions pinned to commit SHA, not tag** (e.g., `actions/checkout@8e5e7e5...`).
|
|
38
|
+
- [ ] **Short-lived OIDC tokens** for cloud auth in CI (no long-lived AWS/GCP keys in env).
|
|
39
|
+
- [ ] **MFA + IAM lockdown** on registry accounts (npm, PyPI, Docker Hub, Releases).
|
|
40
|
+
- [ ] **Separation of duties**: no single person writes code AND promotes to prod.
|
|
41
|
+
- [ ] **Two-person rule** for high-impact package publishes.
|
|
42
|
+
- [ ] Components only from official registries over HTTPS; no `curl | sh`.
|
|
43
|
+
- [ ] Private packages: scoped (`@app/*`) + private registry first in `.npmrc`.
|
|
44
|
+
- [ ] Container images scanned (Trivy/Grype) on every build.
|
|
45
|
+
- [ ] Staged rollouts (canary + automated rollback) for vendor-update consumption.
|
|
46
|
+
|
|
47
|
+
## Cryptographic Failures (A04:2025) — ↓ from #2
|
|
48
|
+
|
|
49
|
+
- [ ] TLS 1.2+ everywhere (TLS 1.3 preferred). HSTS header set.
|
|
50
|
+
- [ ] No mixed content (HTTP assets on HTTPS pages).
|
|
51
|
+
- [ ] PII encrypted at rest where applicable (KMS-encrypted columns / SQLCipher).
|
|
52
|
+
- [ ] Passwords hashed with Argon2id (≥250ms / hash on prod hardware).
|
|
53
|
+
- [ ] Refresh tokens stored as SHA-256 hash, not plain.
|
|
54
|
+
- [ ] No deprecated crypto (MD5, SHA-1, RC4, DES, 3DES, AES-ECB, RSA-1024).
|
|
55
|
+
- [ ] AEAD ciphers only (AES-GCM or ChaCha20-Poly1305).
|
|
56
|
+
- [ ] `crypto/rand` (Go) / `secrets` (Python) for any token generation.
|
|
57
|
+
|
|
58
|
+
## Injection (A05:2025) — ↓ from #3
|
|
59
|
+
|
|
60
|
+
- [ ] All SQL via parameterized queries / prepared statements / sqlc.
|
|
61
|
+
- [ ] All NoSQL via parameterized API; no string interpolation; no `$where` with user input.
|
|
62
|
+
- [ ] No `os.system` / `exec.Command(shell)` with user input concatenated.
|
|
63
|
+
- [ ] All XML parsing via `defusedxml` or equivalent (XXE off).
|
|
64
|
+
- [ ] All template rendering uses parameter binding, not string concat.
|
|
65
|
+
- [ ] Mass assignment blocked: explicit DTO at the boundary.
|
|
66
|
+
- [ ] GraphQL: depth + complexity limits set; field-level authz.
|
|
67
|
+
- [ ] **LLM prompt injection**: user input never substituted into system prompt; structured roles (system/user/assistant); output filtered for sensitive patterns.
|
|
68
|
+
|
|
69
|
+
## Insecure Design (A06:2025) — ↓ from #4 (now also covers SSRF)
|
|
70
|
+
|
|
71
|
+
- [ ] Server-authoritative checks for prices, quantities, totals, role flags.
|
|
72
|
+
- [ ] Idempotency keys on all mutations.
|
|
73
|
+
- [ ] Rate limiting on auth + sensitive endpoints (per-user AND per-IP).
|
|
74
|
+
- [ ] Failure modes for cache miss, DB timeout, third-party failure planned + tested.
|
|
75
|
+
- [ ] Privacy: collect minimum data, retain minimum time, delete on request.
|
|
76
|
+
- [ ] Threat model documented for new features.
|
|
77
|
+
- [ ] **SSRF** (was A10:2021, now under here): URL-fetching endpoints validate target host, block private IPs (10/8, 172.16/12, 192.168/16, 127/8, 169.254/16, fc00::/7, cloud metadata 169.254.169.254), re-resolve DNS, short timeouts (5s).
|
|
78
|
+
|
|
79
|
+
## Authentication Failures (A07:2025) — renamed (was "Identification & Authentication")
|
|
80
|
+
|
|
81
|
+
(Refer to `auth-patterns` checklist when present — full auth audit.)
|
|
82
|
+
|
|
83
|
+
- [ ] Passwords with Argon2id, no enumeration on login / reset.
|
|
84
|
+
- [ ] Rate-limit login (per-user + per-IP).
|
|
85
|
+
- [ ] Refresh-token rotation with theft detection.
|
|
86
|
+
- [ ] Session cookies: Secure + HttpOnly + SameSite.
|
|
87
|
+
- [ ] OAuth uses 2.1 + PKCE.
|
|
88
|
+
- [ ] Passkeys / WebAuthn offered where possible (preferred default 2026).
|
|
89
|
+
|
|
90
|
+
## Software or Data Integrity Failures (A08:2025) — same
|
|
91
|
+
|
|
92
|
+
- [ ] No insecure deserialization (`pickle`, native serialization) of untrusted data.
|
|
93
|
+
- [ ] CI/CD uses short-lived tokens (OIDC) — no long-lived secrets in env.
|
|
94
|
+
- [ ] GitHub Actions pinned to commit SHA, not tag.
|
|
95
|
+
- [ ] Code-signing verified for app artifacts.
|
|
96
|
+
- [ ] Webhooks: HMAC signature verification on every incoming call.
|
|
97
|
+
- [ ] No `eval` anywhere.
|
|
98
|
+
|
|
99
|
+
## Security Logging and Alerting Failures (A09:2025) — renamed (Monitoring → Alerting)
|
|
100
|
+
|
|
101
|
+
- [ ] Auth events logged with `request_id`, `user_id`, `event_type`.
|
|
102
|
+
- [ ] Authorization denials logged.
|
|
103
|
+
- [ ] No tokens / passwords / 2FA codes / full PII in logs (CWE-532).
|
|
104
|
+
- [ ] Sensitive headers (Authorization, Cookie) scrubbed in framework logs + APM.
|
|
105
|
+
- [ ] **Alerts** configured (the 2025 emphasis): auth-failure spikes, 403-spike, rate-limit triggers, outbound-traffic anomaly, new CVE matches your SBOM.
|
|
106
|
+
- [ ] **Each alert has a runbook** — page-without-runbook = alarm fatigue.
|
|
107
|
+
- [ ] Incident-response framework adopted (NIST 800-61 or equivalent).
|
|
108
|
+
- [ ] Log retention ≥ 90 days for security events.
|
|
109
|
+
|
|
110
|
+
## Mishandling of Exceptional Conditions (A10:2025) — NEW
|
|
111
|
+
|
|
112
|
+
- [ ] **Catch at source**, not just at top-level handler.
|
|
113
|
+
- [ ] **Resource cleanup** in `with` / `defer` / `finally` for ALL handles (file, DB, lock, GPU buffer).
|
|
114
|
+
- [ ] **Atomic transactions** — `UnitOfWork.run(...)` per `hexagonal-architecture`; no partial commit.
|
|
115
|
+
- [ ] **Fail-closed** in security code (auth check exception → deny, not allow).
|
|
116
|
+
- [ ] **Centralized error envelope** (RFC 9457 ProblemDetails per `api-design`); never construct error JSON ad-hoc per route.
|
|
117
|
+
- [ ] **No `str(exc)` in client-facing detail** (CWE-209: information leak).
|
|
118
|
+
- [ ] **Resource quotas** at framework: max body, max upload count, max concurrent connections, max LLM context tokens.
|
|
119
|
+
- [ ] **Unhappy-path tests**: pytest fixtures that throw mid-transaction / mid-stream / mid-write — assert state stays clean.
|
|
120
|
+
- [ ] **Global exception handler** as a safety net (sanitized response + full log + alert).
|
|
121
|
+
|
|
122
|
+
## CSRF (cookie-auth web clients only)
|
|
123
|
+
|
|
124
|
+
- [ ] `SameSite=Strict` (or `Lax` justified) on session cookies.
|
|
125
|
+
- [ ] Double-submit token OR custom-header check on state-changing endpoints.
|
|
126
|
+
- [ ] Origin/Referer validation on POST.
|
|
127
|
+
|
|
128
|
+
## Path Traversal / Open Redirect
|
|
129
|
+
|
|
130
|
+
- [ ] No user input concatenated into filesystem paths without `is_relative_to(base)` check.
|
|
131
|
+
- [ ] Open-redirect endpoints (`?return_to=`) restricted to allowlist (relative paths or specific hosts).
|
|
132
|
+
- [ ] OAuth callback `redirect_uri` allowlist enforced server-side.
|
|
133
|
+
|
|
134
|
+
## Secrets Management
|
|
135
|
+
|
|
136
|
+
- [ ] No secrets in source code, lockfiles, Dockerfiles, config files in repo.
|
|
137
|
+
- [ ] Secrets manager (AWS / GCP / Vault) used; app fetches at startup.
|
|
138
|
+
- [ ] Secrets rotated quarterly + on suspected leak.
|
|
139
|
+
- [ ] Access to secrets audited.
|
|
140
|
+
- [ ] No "shared utility token" — one secret per purpose.
|
|
141
|
+
|
|
142
|
+
## Network
|
|
143
|
+
|
|
144
|
+
- [ ] Outbound-traffic allowlist at network layer (egress firewall).
|
|
145
|
+
- [ ] Database not internet-reachable (private VPC).
|
|
146
|
+
- [ ] Internal services use mTLS or service-mesh equivalent.
|
|
147
|
+
|
|
148
|
+
## Operational
|
|
149
|
+
|
|
150
|
+
- [ ] Incident runbook documented (account takeover, leaked secret, suspected breach).
|
|
151
|
+
- [ ] `security@app.com` mailbox monitored; SLA documented.
|
|
152
|
+
- [ ] Pentest within last 12 months OR scoped engagement queued.
|
|
153
|
+
- [ ] On-call playbook covers security incidents (not just availability).
|
|
154
|
+
|
|
155
|
+
## Pre-Production Verification
|
|
156
|
+
|
|
157
|
+
- [ ] **OWASP ZAP** baseline scan against staging — no high.
|
|
158
|
+
- [ ] **`osv-scanner` recursive** — zero high.
|
|
159
|
+
- [ ] **`govulncheck ./...`** — clean.
|
|
160
|
+
- [ ] **Manual auth bypass attempt** — try to access endpoints without auth, with wrong scope, with expired token.
|
|
161
|
+
- [ ] **mitmproxy capture** of typical traffic — verify no PII in URLs, no tokens in logs, headers correct.
|
|
162
|
+
- [ ] **Dependency review** of any new direct deps in this release.
|
|
163
|
+
- [ ] **SBOM diff** vs previous release — flag major dependency changes.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
Unchecked items block release. Document waivers in a tracking issue with an ETA.
|