foundry-mcp 0.3.2__tar.gz → 0.7.4__tar.gz
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.
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/.gitignore +4 -0
- foundry_mcp-0.7.4/CHANGELOG.md +275 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/PKG-INFO +7 -1
- foundry_mcp-0.7.4/PLAN.md +96 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/README.md +6 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/codebase_standards/naming-conventions.md +1 -1
- foundry_mcp-0.7.4/docs/guides/intake.md +436 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/foundry-mcp.toml +18 -9
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/mcp/capabilities_manifest.json +502 -14
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/pyproject.toml +8 -1
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/pytest.ini +4 -2
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/samples/foundry-mcp.toml +151 -14
- foundry_mcp-0.7.4/specs/.plans/bikelane.md +503 -0
- foundry_mcp-0.7.4/specs/.plans/dashboard_improvement.md +326 -0
- foundry_mcp-0.7.4/specs/.plans/research-router-implementation.md +234 -0
- foundry_mcp-0.7.4/specs/.plans/test-coverage-parity.md +128 -0
- foundry_mcp-0.7.4/specs/active/research-router-2025-12-29-001.json +1407 -0
- foundry_mcp-0.7.4/specs/active/spec-modification-capabilities-2025-12-23-001.json +2566 -0
- foundry_mcp-0.7.4/specs/completed/bikelane-intake-2025-12-28-001.json +1173 -0
- foundry_mcp-0.7.4/specs/completed/phase-first-spec-authoring-improvements-2025-12-23-001.json +1405 -0
- foundry_mcp-0.7.4/specs/pending/validate-fix-auto-cleanup-2025-12-15-001.json +143 -0
- foundry_mcp-0.7.4/src/foundry_mcp/__init__.py +13 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/plan.py +10 -3
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/review.py +19 -4
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/specs.py +38 -208
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/output.py +3 -3
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/config.py +235 -5
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/ai_consultation.py +146 -9
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/discovery.py +6 -6
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/error_store.py +9 -4
- foundry_mcp-0.7.4/src/foundry_mcp/core/intake.py +933 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/llm_config.py +32 -12
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/metrics_store.py +17 -2
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/observability.py +21 -5
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/progress.py +70 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/prompts/fidelity_review.py +149 -4
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/prompts/markdown_plan_review.py +5 -1
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/prompts/plan_review.py +5 -1
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/claude.py +12 -52
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/codex.py +33 -59
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/cursor_agent.py +3 -44
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/detectors.py +32 -7
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/gemini.py +10 -60
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/opencode.py +38 -8
- foundry_mcp-0.7.4/src/foundry_mcp/core/providers/opencode_wrapper.js +302 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/providers/package-lock.json +24 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/providers/package.json +25 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/research/__init__.py +68 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/research/memory.py +425 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/research/models.py +437 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/research/workflows/__init__.py +22 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/research/workflows/base.py +204 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/research/workflows/chat.py +271 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/research/workflows/consensus.py +396 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/research/workflows/ideate.py +682 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/research/workflows/thinkdeep.py +405 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/responses.py +450 -0
- foundry_mcp-0.7.4/src/foundry_mcp/core/spec.py +3852 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/task.py +1064 -19
- foundry_mcp-0.7.4/src/foundry_mcp/core/testing.py +839 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/validation.py +313 -42
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/dashboard/app.py +3 -4
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/dashboard/components/charts.py +0 -57
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/dashboard/data/stores.py +94 -32
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/dashboard/launcher.py +129 -18
- foundry_mcp-0.7.4/src/foundry_mcp/dashboard/views/__init__.py +12 -0
- {foundry_mcp-0.3.2/src/foundry_mcp/dashboard/pages → foundry_mcp-0.7.4/src/foundry_mcp/dashboard/views}/errors.py +2 -2
- foundry_mcp-0.7.4/src/foundry_mcp/dashboard/views/metrics.py +164 -0
- foundry_mcp-0.7.4/src/foundry_mcp/dashboard/views/overview.py +96 -0
- foundry_mcp-0.7.4/src/foundry_mcp/dashboard/views/tool_usage.py +139 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/resources/specs.py +25 -25
- foundry_mcp-0.7.4/src/foundry_mcp/schemas/intake-schema.json +89 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/schemas/sdd-spec-schema.json +33 -5
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/server.py +38 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/__init__.py +4 -2
- foundry_mcp-0.7.4/src/foundry_mcp/tools/unified/authoring.py +3643 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/documentation_helpers.py +69 -6
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/environment.py +235 -6
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/error.py +18 -1
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/lifecycle.py +8 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/plan.py +132 -2
- foundry_mcp-0.7.4/src/foundry_mcp/tools/unified/research.py +658 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/review.py +374 -17
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/spec.py +367 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/task.py +1163 -48
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/test.py +69 -8
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/conftest.py +19 -1
- foundry_mcp-0.7.4/tests/fixtures/intake/README.md +58 -0
- foundry_mcp-0.7.4/tests/fixtures/intake/edge_cases.jsonl +13 -0
- foundry_mcp-0.7.4/tests/fixtures/intake/empty.jsonl +0 -0
- foundry_mcp-0.7.4/tests/fixtures/intake/malformed.jsonl +12 -0
- foundry_mcp-0.7.4/tests/fixtures/intake/sample_items.jsonl +6 -0
- foundry_mcp-0.7.4/tests/integration/providers/conftest.py +254 -0
- foundry_mcp-0.7.4/tests/integration/providers/fixtures/simple_plan.md +18 -0
- foundry_mcp-0.7.4/tests/integration/providers/fixtures/simple_spec.json +33 -0
- foundry_mcp-0.7.4/tests/integration/providers/test_fidelity_review_flow.py +264 -0
- foundry_mcp-0.7.4/tests/integration/providers/test_plan_review_flow.py +265 -0
- foundry_mcp-0.7.4/tests/integration/providers/test_provider_smoke.py +250 -0
- foundry_mcp-0.7.4/tests/integration/providers/test_router_smoke.py +325 -0
- foundry_mcp-0.7.4/tests/integration/providers/test_synthesis_flow.py +750 -0
- foundry_mcp-0.7.4/tests/integration/test_ai_consultation_e2e.py +717 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/integration/test_authoring_tools.py +24 -11
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/integration/test_mcp_smoke.py +1 -1
- foundry_mcp-0.7.4/tests/integration/test_research_e2e.py +701 -0
- foundry_mcp-0.7.4/tests/tools/__init__.py +0 -0
- foundry_mcp-0.7.4/tests/tools/unified/__init__.py +0 -0
- foundry_mcp-0.7.4/tests/tools/unified/test_research.py +869 -0
- foundry_mcp-0.7.4/tests/unit/test_ai_consultation.py +2033 -0
- foundry_mcp-0.7.4/tests/unit/test_contracts/__init__.py +1 -0
- foundry_mcp-0.7.4/tests/unit/test_contracts/test_phase3_contracts.py +1010 -0
- foundry_mcp-0.7.4/tests/unit/test_contracts/test_phase4_contracts.py +1474 -0
- foundry_mcp-0.7.4/tests/unit/test_contracts/test_phase5_contracts.py +1338 -0
- foundry_mcp-0.7.4/tests/unit/test_contracts/test_phase6_contracts.py +1126 -0
- foundry_mcp-0.7.4/tests/unit/test_contracts/test_phase7_contracts.py +524 -0
- foundry_mcp-0.7.4/tests/unit/test_core/research/__init__.py +1 -0
- foundry_mcp-0.7.4/tests/unit/test_core/research/test_memory.py +789 -0
- foundry_mcp-0.7.4/tests/unit/test_core/research/test_models.py +633 -0
- foundry_mcp-0.7.4/tests/unit/test_core/research/test_workflows.py +706 -0
- foundry_mcp-0.7.4/tests/unit/test_core/test_intake.py +821 -0
- foundry_mcp-0.7.4/tests/unit/test_core/test_phase_metadata_update.py +384 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_provider_spec.py +18 -17
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_spec.py +615 -2
- foundry_mcp-0.7.4/tests/unit/test_core/test_spec_find_replace.py +290 -0
- foundry_mcp-0.7.4/tests/unit/test_core/test_spec_history.py +780 -0
- foundry_mcp-0.7.4/tests/unit/test_core/test_spec_validation.py +422 -0
- foundry_mcp-0.7.4/tests/unit/test_core/test_task.py +1610 -0
- foundry_mcp-0.7.4/tests/unit/test_core/test_task_batch_update.py +527 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_validation.py +66 -5
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_environment.py +426 -6
- foundry_mcp-0.7.4/tests/unit/test_fix_verification_types.py +351 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_llm_provider.py +8 -0
- foundry_mcp-0.7.4/tests/unit/test_phase_add_bulk.py +252 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_providers_implementations.py +20 -43
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_sdd_cli_runtime.py +4 -2
- foundry_mcp-0.7.4/tests/unit/test_task_metadata_batch.py +236 -0
- foundry_mcp-0.3.2/CHANGELOG.md +0 -55
- foundry_mcp-0.3.2/src/foundry_mcp/__init__.py +0 -7
- foundry_mcp-0.3.2/src/foundry_mcp/core/spec.py +0 -1650
- foundry_mcp-0.3.2/src/foundry_mcp/core/testing.py +0 -450
- foundry_mcp-0.3.2/src/foundry_mcp/dashboard/pages/__init__.py +0 -20
- foundry_mcp-0.3.2/src/foundry_mcp/dashboard/pages/metrics.py +0 -128
- foundry_mcp-0.3.2/src/foundry_mcp/dashboard/pages/overview.py +0 -128
- foundry_mcp-0.3.2/src/foundry_mcp/tools/unified/authoring.py +0 -1487
- foundry_mcp-0.3.2/tests/unit/test_ai_consultation.py +0 -892
- foundry_mcp-0.3.2/tests/unit/test_core/test_task.py +0 -613
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/.github/workflows/publish.yml +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/AGENTS.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/CLAUDE.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/LICENSE +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/bin/foundry-mcp +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/architecture/adr-001-cli-architecture.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/cli_best_practices/01-cli-runtime.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/cli_best_practices/02-command-shaping.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/cli_best_practices/03-shared-services.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/cli_best_practices/04-testing-parity.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/cli_best_practices/README.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/codebase_standards/cli-output.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/codebase_standards/mcp_response_schema.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/concepts/sdd-philosophy.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/dashboards/README.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/dashboards/foundry-mcp-errors.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/dashboards/foundry-mcp-overview.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/dashboards/foundry-mcp-slo.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/dashboards/foundry-mcp-tools.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/dashboards/prometheus-rules/README.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/dashboards/prometheus-rules/foundry-mcp-alerting-rules.yaml +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/dashboards/prometheus-rules/foundry-mcp-recording-rules.yaml +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/guides/ai-consultation.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/guides/development-guide.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/guides/llm-configuration.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/guides/observability.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/guides/testing.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/01-versioned-contracts.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/02-envelopes-metadata.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/03-serialization-helpers.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/04-validation-input-hygiene.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/05-observability-telemetry.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/06-pagination-streaming.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/07-error-semantics.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/08-security-trust-boundaries.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/09-spec-driven-development.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/10-testing-fixtures.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/11-ai-llm-integration.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/12-timeout-resilience.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/13-tool-discovery.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/14-feature-flags.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/15-concurrency-patterns.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/docs/mcp_best_practices/README.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/ai-consultation-layer-2025-12-03-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/cli-provider-abstraction-2025-11-30-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/foundry-cli-gap-remediation-2025-12-02-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/foundry-mcp-2025-01-25-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/internal-cli-elimination-2025-12-01-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/mcp-best-practices-remediation-2025-11-26-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/mcp-tool-consolidation-2025-12-10-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/multi-model-consensus-2025-12-05-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/observability-stack-2025-12-05-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/parity-testing-framework-2025-01-26-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/phase-remove-tool-2025-12-05-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/remove-docquery-rendering-docgen-2025-12-09-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/response-schema-standardization-2025-11-26-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/sdd-cli-native-parity-2025-11-27-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/sdd-core-operations-2025-11-27-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/specs/completed/sdd-llm-features-2025-11-27-001.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/__main__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/agent.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/cache.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/dashboard.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/dev.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/journal.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/lifecycle.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/modify.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/pr.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/session.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/tasks.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/testing.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/commands/validate.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/config.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/context.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/flags.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/logging.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/main.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/registry.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/resilience.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/cli/transcript.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/cache.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/capabilities.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/concurrency.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/context.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/error_collection.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/feature_flags.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/health.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/journal.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/lifecycle.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/llm_patterns.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/llm_provider.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/logging_config.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/metrics_persistence.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/metrics_registry.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/modifications.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/naming.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/otel.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/otel_stubs.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/pagination.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/prometheus.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/prompts/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/base.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/registry.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/test_provider.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/providers/validation.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/rate_limit.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/resilience.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/review.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/core/security.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/dashboard/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/dashboard/components/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/dashboard/components/cards.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/dashboard/components/filters.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/dashboard/components/tables.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/dashboard/data/__init__.py +0 -0
- {foundry_mcp-0.3.2/src/foundry_mcp/dashboard/pages → foundry_mcp-0.7.4/src/foundry_mcp/dashboard/views}/providers.py +0 -0
- {foundry_mcp-0.3.2/src/foundry_mcp/dashboard/pages → foundry_mcp-0.7.4/src/foundry_mcp/dashboard/views}/sdd_workflow.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/prompts/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/prompts/workflows.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/resources/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/schemas/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/context_helpers.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/health.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/journal.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/metrics.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/pr.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/provider.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/review_helpers.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/router.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/server.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/src/foundry_mcp/tools/unified/verification.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/contract/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/contract/response_schema.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/contract/test_response_schema.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/ai_responses/fidelity_review_response.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/ai_responses/plan_review_response.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/context_tracker/transcript.jsonl +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/README.md +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/error_not_found.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/error_validation_failure.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/provider_execute_missing_prompt.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/provider_execute_success.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/provider_execute_timeout.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/provider_execute_unavailable.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/provider_list_success.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/provider_list_with_unavailable.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/provider_status_missing_id.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/provider_status_not_found.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/provider_status_success.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/success_specs_list.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/success_task_progress.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/success_test_presets.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/fixtures/golden/success_validation.json +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/integration/test_environment_tools.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/integration/test_fallback_integration.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/integration/test_mcp_tools.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/integration/test_notifications_sampling.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/integration/test_prepare_task_cli.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/integration/test_provider_tools.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/integration/test_sdd_cli_advanced.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/integration/test_sdd_cli_parity.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/property/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/property/test_input_validation.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/test_responses.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/core/test_review.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_cli_review_helpers.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/__init__.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_concurrency.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_discovery.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_feature_flags.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_journal.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_lifecycle.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_llm_patterns.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_pagination.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_resilience.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_core/test_security.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_error_collection.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_golden_fixtures.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_metrics_persistence.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_observability_graceful.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_providers_base.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_providers_detectors.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_providers_registry.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_review.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_sdd_cli_core.py +0 -0
- {foundry_mcp-0.3.2 → foundry_mcp-0.7.4}/tests/unit/test_transcript.py +0 -0
|
@@ -51,6 +51,8 @@ settings.json
|
|
|
51
51
|
|
|
52
52
|
# Ignore all dotfolders under specs/ (reports, reviews, etc.)
|
|
53
53
|
specs/.*/
|
|
54
|
+
!specs/.plans/
|
|
55
|
+
!specs/.plans/**
|
|
54
56
|
|
|
55
57
|
# ModelChorus configuration
|
|
56
58
|
.model-chorusrc
|
|
@@ -62,3 +64,5 @@ uv.lock
|
|
|
62
64
|
.venv
|
|
63
65
|
.hypothesis/
|
|
64
66
|
.ruff_cache/
|
|
67
|
+
node_modules/
|
|
68
|
+
.opencode/
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **AI Consultation Config Loading**: Fixed issue where AI consultation features returned `model_used: "none"` because config was loaded from CWD instead of workspace path
|
|
13
|
+
- `review.py`: Now loads `foundry-mcp.toml` from workspace path for fidelity reviews
|
|
14
|
+
- `plan.py`: Added `_find_config_file()` helper to walk up directories and find config
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **Provider Availability Caching**: Cache provider detection results to speed up MCP tool calls
|
|
19
|
+
- New `[providers] availability_cache_ttl` config option (default: 3600 seconds)
|
|
20
|
+
- Reduces repeated calls from ~5s to ~0s
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- **Provider Model Validation Removed**: Model allowlists removed from all CLI providers
|
|
25
|
+
- Providers no longer pre-register or validate model IDs against hardcoded lists
|
|
26
|
+
- Any model string is now passed through to the underlying CLI for validation
|
|
27
|
+
- Eliminates sync issues when providers release new models
|
|
28
|
+
- Affected providers: `claude`, `gemini`, `codex`, `cursor-agent`
|
|
29
|
+
- Default models remain as fallbacks: opus, pro, gpt-5.2, composer-1
|
|
30
|
+
|
|
31
|
+
- **BREAKING: Simplified Spec Templates**: Removed pre-baked spec templates (simple, medium, complex, security)
|
|
32
|
+
- Only `empty` template is now supported - creates a blank spec with no phases
|
|
33
|
+
- Use phase templates (`planning`, `implementation`, `testing`, `security`, `documentation`) to add structure
|
|
34
|
+
- Default template changed from `medium` to `empty`
|
|
35
|
+
- Mission statement no longer required (was required for medium/complex)
|
|
36
|
+
- `_requires_rich_task_fields()` now checks explicit `complexity` metadata instead of template
|
|
37
|
+
- Passing deprecated templates (simple, medium, complex, security) returns validation error
|
|
38
|
+
|
|
39
|
+
### Migration
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
# Old approach (no longer works)
|
|
43
|
+
authoring(action="spec-create", name="my-feature", template="medium", mission="...")
|
|
44
|
+
|
|
45
|
+
# New approach
|
|
46
|
+
authoring(action="spec-create", name="my-feature")
|
|
47
|
+
authoring(action="phase-template", template_action="apply", template_name="planning", spec_id="...")
|
|
48
|
+
authoring(action="phase-template", template_action="apply", template_name="implementation", spec_id="...")
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## [0.7.0] - 2025-12-30
|
|
52
|
+
|
|
53
|
+
### Added
|
|
54
|
+
|
|
55
|
+
- **Research Router**: New unified research tool providing multi-model orchestration capabilities
|
|
56
|
+
- **chat**: Single-model conversation with thread persistence
|
|
57
|
+
- Thread creation with title and system prompt
|
|
58
|
+
- Conversation continuation via thread_id
|
|
59
|
+
- Token budgeting for context management
|
|
60
|
+
- Thread CRUD operations (list, get, delete)
|
|
61
|
+
- **consensus**: Multi-model parallel consultation with synthesis
|
|
62
|
+
- Parallel execution via asyncio.gather with semaphore limiting
|
|
63
|
+
- Four synthesis strategies: all_responses, synthesize, majority, first_valid
|
|
64
|
+
- Partial failure handling with min_responses and require_all options
|
|
65
|
+
- Configurable timeout per provider
|
|
66
|
+
- **thinkdeep**: Hypothesis-driven systematic investigation
|
|
67
|
+
- Investigation step execution with state persistence
|
|
68
|
+
- Hypothesis creation and tracking with evidence accumulation
|
|
69
|
+
- Confidence level progression (speculation -> confirmed)
|
|
70
|
+
- Convergence detection based on depth and confidence
|
|
71
|
+
- **ideate**: Creative brainstorming with idea clustering
|
|
72
|
+
- Four-phase workflow: divergent, convergent, selection, elaboration
|
|
73
|
+
- Multi-perspective idea generation
|
|
74
|
+
- Automatic clustering and scoring
|
|
75
|
+
- Detailed plan elaboration for selected clusters
|
|
76
|
+
- **ResearchConfig**: New configuration section for research workflows
|
|
77
|
+
- Configurable storage path, TTL, max messages per thread
|
|
78
|
+
- Default provider and consensus provider list
|
|
79
|
+
- ThinkDeep max depth and Ideate perspectives
|
|
80
|
+
- **Research Data Models**: Pydantic models for all workflow states
|
|
81
|
+
- Enums: WorkflowType, ConfidenceLevel, ConsensusStrategy, ThreadStatus, IdeationPhase
|
|
82
|
+
- Conversation, ThinkDeep, Ideate, and Consensus state models
|
|
83
|
+
- **File-Based Memory Storage**: Persistent state management for research sessions
|
|
84
|
+
- FileStorageBackend with CRUD operations
|
|
85
|
+
- File locking via filelock for thread safety
|
|
86
|
+
- TTL-based cleanup for expired sessions
|
|
87
|
+
- **Research Test Suite**: 149 tests covering models, memory, and router
|
|
88
|
+
- **Feature Flag**: `research_tools` flag (experimental) gates research tool access
|
|
89
|
+
|
|
90
|
+
## [0.6.0] - 2025-12-29
|
|
91
|
+
|
|
92
|
+
### Added
|
|
93
|
+
|
|
94
|
+
- **Bikelane Intake System**: Fast-capture queue for rapid idea/task capture with automatic triage workflow
|
|
95
|
+
- **intake-add**: Add items to the intake queue with title, description, priority (p0-p4), tags, source, and requester fields
|
|
96
|
+
- Idempotency key support for deduplication (checks last 100 items)
|
|
97
|
+
- Tag normalization to lowercase
|
|
98
|
+
- Full dry-run support for validation without persistence
|
|
99
|
+
- **intake-list**: List pending intake items in FIFO order with cursor-based pagination
|
|
100
|
+
- Configurable page size (1-200, default 50)
|
|
101
|
+
- Efficient line-hint seeking with fallback to full scan
|
|
102
|
+
- Returns total_count for queue size visibility
|
|
103
|
+
- **intake-dismiss**: Mark items as dismissed with optional reason
|
|
104
|
+
- Atomic file rewrite pattern for data integrity
|
|
105
|
+
- Supports dry-run mode
|
|
106
|
+
- JSONL-based storage at `specs/.bikelane/intake.jsonl` with fcntl file locking
|
|
107
|
+
- Automatic file rotation at 1000 items or 1MB
|
|
108
|
+
- Thread-safe and cross-process safe with 5-second lock timeout
|
|
109
|
+
- Security hardening: path traversal prevention, prompt injection sanitization, control character stripping
|
|
110
|
+
- Feature flag gated: `intake_tools` (experimental, opt-in)
|
|
111
|
+
- **Intake Schema**: JSON Schema for intake-v1 format with comprehensive validation constraints
|
|
112
|
+
- **Intake Documentation**: User guide at `docs/guides/intake.md`
|
|
113
|
+
- **RESOURCE_BUSY Error Code**: New error code for lock contention scenarios
|
|
114
|
+
|
|
115
|
+
## [0.5.1] - 2025-12-27
|
|
116
|
+
|
|
117
|
+
### Added
|
|
118
|
+
|
|
119
|
+
- **Phase Metadata Updates**: New `authoring action=phase-update-metadata` for updating phase-level metadata
|
|
120
|
+
- Supports updating `estimated_hours`, `description`, and `purpose` fields
|
|
121
|
+
- Full dry-run support for previewing changes
|
|
122
|
+
- Tracks previous values for audit purposes
|
|
123
|
+
- Core function `update_phase_metadata()` in `spec.py` with comprehensive validation
|
|
124
|
+
|
|
125
|
+
### Fixed
|
|
126
|
+
|
|
127
|
+
- **Lifecycle Tool Router Compatibility**: Fixed `_handle_move()` and other lifecycle handlers receiving unexpected keyword arguments (`force`, `to_folder`) from the unified router dispatch
|
|
128
|
+
- All lifecycle handlers now accept full parameter set for router compatibility
|
|
129
|
+
- Resolves errors like `_handle_move() got an unexpected keyword argument 'force'`
|
|
130
|
+
|
|
131
|
+
## [0.5.0] - 2025-12-27
|
|
132
|
+
|
|
133
|
+
### Added
|
|
134
|
+
|
|
135
|
+
- **Spec Modification Capabilities**: Complete implementation of dynamic spec modification (7 phases, 54 tasks)
|
|
136
|
+
- **Task Hierarchy Mutations**: `task action=move` for repositioning tasks within/across phases with circular reference prevention
|
|
137
|
+
- **Dependency Management**: `task action=add-dependency`, `task action=remove-dependency` for blocks/blocked_by/depends relationships
|
|
138
|
+
- **Task Requirements**: `task action=add-requirement` for adding structured requirements to tasks
|
|
139
|
+
- **Bulk Operations**: `authoring action=phase-add-bulk` for batch phase creation, `authoring action=phase-template` for applying predefined structures
|
|
140
|
+
- **Metadata Batch Updates**: `task action=metadata-batch` with AND-based filtering by node_type, phase_id, or pattern regex
|
|
141
|
+
- **Find-Replace**: `authoring action=spec-find-replace` with regex support and scope filtering for bulk spec modifications
|
|
142
|
+
- **Spec Rollback**: `authoring action=spec-rollback` for restoring specs from automatic backups
|
|
143
|
+
- **Spec History & Diff**: `spec action=history` for backup timeline, `spec action=diff` for comparing specs
|
|
144
|
+
- **Validation Enhancements**: `spec action=completeness-check` with weighted scoring (0-100), `spec action=duplicate-detection` with configurable similarity threshold
|
|
145
|
+
- **Standardized Error Codes**: New `ErrorCode` enum with semantic error codes per 07-error-semantics.md
|
|
146
|
+
- **Contract Tests**: Comprehensive test suite for response-v2 envelope compliance across all phases
|
|
147
|
+
|
|
148
|
+
### Changed
|
|
149
|
+
|
|
150
|
+
- Updated capabilities manifest with 15 new actions documented
|
|
151
|
+
- Spec modification spec moved from pending to active (100% complete)
|
|
152
|
+
|
|
153
|
+
## [0.4.2] - 2025-12-24
|
|
154
|
+
|
|
155
|
+
### Added
|
|
156
|
+
|
|
157
|
+
- **Preflight Validation**: `authoring action=spec-create dry_run=true` now generates and validates the full spec, returning `is_valid`, `error_count`, `warning_count`, and detailed diagnostics before actual creation
|
|
158
|
+
- **Schema Introspection**: New `spec action=schema` returns all valid enum values (templates, node_types, statuses, task_categories, verification_types, journal_entry_types, blocker_types, status_folders) for LLM/client discovery
|
|
159
|
+
|
|
160
|
+
### Changed
|
|
161
|
+
|
|
162
|
+
- **Spec Field Requirements**: Medium/complex specs now require `metadata.mission` and task metadata for `task_category`, `description`, and `acceptance_criteria`; implementation/refactoring tasks must include `file_path`
|
|
163
|
+
- **Task Metadata Updates**: `task update-metadata` now accepts `acceptance_criteria` and aligns task category validation with the canonical spec categories
|
|
164
|
+
|
|
165
|
+
## [0.4.1] - 2025-12-24
|
|
166
|
+
|
|
167
|
+
### Added
|
|
168
|
+
|
|
169
|
+
- **Batch Metadata Utilities**: New task actions for bulk operations
|
|
170
|
+
- `task action=metadata-batch`: Apply metadata updates to multiple nodes with AND-based filtering by `node_type`, `phase_id`, or `pattern` regex
|
|
171
|
+
- `task action=fix-verification-types`: Auto-fix invalid/missing verification types on verify nodes with legacy mapping support
|
|
172
|
+
- Both actions support `dry_run` mode for previewing changes
|
|
173
|
+
- **Phase-First Authoring**: New `authoring action=phase-add-bulk` for creating multiple phases at once with metadata defaults
|
|
174
|
+
- **Spec Mission Field**: Added `mission` field to spec metadata schema for concise goal statements
|
|
175
|
+
- **Workflow Timeout Override**: AI consultation now supports workflow-specific timeout configuration
|
|
176
|
+
|
|
177
|
+
### Changed
|
|
178
|
+
|
|
179
|
+
- **JSON Output Optimization**: CLI and MCP server now emit minified JSON (no indentation) for smaller payloads
|
|
180
|
+
- **Fidelity Review Improvements**: Better path resolution with workspace_root support, graceful handling of non-JSON provider responses
|
|
181
|
+
- **Provider Configuration**: Updated OpenCode model IDs and default model; reordered provider priority
|
|
182
|
+
- **Claude Provider Tests**: Updated to use Haiku model for faster test execution
|
|
183
|
+
|
|
184
|
+
### Fixed
|
|
185
|
+
|
|
186
|
+
- Fixed parameter filtering in error_list handler to prevent unexpected argument errors
|
|
187
|
+
- Fixed duplicate file paths in fidelity review implementation artifacts
|
|
188
|
+
- Synced `__init__.py` version with `pyproject.toml`
|
|
189
|
+
|
|
190
|
+
## [0.4.0] - 2025-12-23
|
|
191
|
+
|
|
192
|
+
### Changed
|
|
193
|
+
|
|
194
|
+
- **Verification Types**: Aligned task API and spec validator to use canonical values (`run-tests`, `fidelity`, `manual`)
|
|
195
|
+
- Task API now accepts `run-tests`, `fidelity`, `manual` (previously `auto`, `manual`, `none`)
|
|
196
|
+
- Spec validator updated to match canonical schema values
|
|
197
|
+
- Legacy values automatically mapped: `test` → `run-tests`, `auto` → `run-tests`
|
|
198
|
+
|
|
199
|
+
### Added
|
|
200
|
+
|
|
201
|
+
- **Auto-fix for `INVALID_VERIFICATION_TYPE`**: Specs with legacy verification types are now auto-fixable via `validate-fix`
|
|
202
|
+
- **Auto-fix for `INVALID_ROOT_PARENT`**: Specs where spec-root has non-null parent are now auto-fixable
|
|
203
|
+
|
|
204
|
+
### Removed
|
|
205
|
+
|
|
206
|
+
- Removed `foundry-mcp-ctl` package and mode-toggling feature - server now always runs with all tools registered
|
|
207
|
+
|
|
208
|
+
## [0.3.4] - 2025-12-21
|
|
209
|
+
|
|
210
|
+
_Note: Mode toggling features added in this version were subsequently removed._
|
|
211
|
+
|
|
212
|
+
## [0.3.3] - 2025-12-17
|
|
213
|
+
|
|
214
|
+
### Changed
|
|
215
|
+
- **Dashboard**: Refactored pages module to views with cleaner organization
|
|
216
|
+
- **Dashboard**: Improved data stores with better caching and filtering
|
|
217
|
+
- **Observability**: Added action label to tool metrics for router-level granularity
|
|
218
|
+
- **Providers**: Codex CLI now ignores unsupported parameters (warning instead of error)
|
|
219
|
+
|
|
220
|
+
### Added
|
|
221
|
+
- Dashboard PID file tracking for cross-CLI process management
|
|
222
|
+
- Tool usage dashboard view with action-level breakdown
|
|
223
|
+
- OpenCode Node.js wrapper for subprocess execution
|
|
224
|
+
- Integration tests for provider smoke testing, fidelity review flow, and plan review flow
|
|
225
|
+
|
|
226
|
+
### Fixed
|
|
227
|
+
- Codex provider environment handling (unsets OPENAI_API_KEY/OPENAI_BASE_URL that interfere with CLI)
|
|
228
|
+
- Minor fixes to Claude and Gemini providers
|
|
229
|
+
|
|
230
|
+
## [0.3.2] - 2025-12-16
|
|
231
|
+
|
|
232
|
+
### Added
|
|
233
|
+
- Launcher script (`bin/foundry-mcp`) for configurable Python interpreter selection
|
|
234
|
+
- `FOUNDRY_MCP_PYTHON` environment variable to override the default Python interpreter
|
|
235
|
+
|
|
236
|
+
### Fixed
|
|
237
|
+
- Removed duplicate `spec_id` and `node_id` fields from task progress response
|
|
238
|
+
|
|
239
|
+
## [0.3.1] - 2025-12-16
|
|
240
|
+
|
|
241
|
+
### Removed
|
|
242
|
+
- Removed `code` unified tool (find-class, find-function, callers, callees, trace, impact actions) from MCP surface. Unified manifest reduced from 17 to 16 tools.
|
|
243
|
+
|
|
244
|
+
## [0.3.0] - 2025-12-15
|
|
245
|
+
|
|
246
|
+
### Changed
|
|
247
|
+
- Consolidated the MCP tool surface into 17 unified routers (tool + `action`) and aligned CLI/MCP naming.
|
|
248
|
+
- Updated documentation and manifests to reflect the unified router contract.
|
|
249
|
+
|
|
250
|
+
### Added
|
|
251
|
+
- New completed specs documenting MCP tool consolidation and removal of docquery/rendering/docgen.
|
|
252
|
+
- Unified-manifest budget telemetry (Prometheus metrics, recording rules, alerting rules, and dashboard panels).
|
|
253
|
+
|
|
254
|
+
### Removed
|
|
255
|
+
- Legacy per-tool MCP modules and legacy CLI command surfaces in favor of unified routers.
|
|
256
|
+
- Docquery/rendering/docgen modules and generated docs previously under `docs/generated/`.
|
|
257
|
+
|
|
258
|
+
## [0.2.1] - 2025-12-08
|
|
259
|
+
|
|
260
|
+
### Changed
|
|
261
|
+
- **Dashboard**: Replaced aiohttp+vanilla JS dashboard with Streamlit for better visualizations and interactivity
|
|
262
|
+
- Dashboard dependencies changed from `aiohttp` to `streamlit`, `plotly`, `pandas`
|
|
263
|
+
- Default dashboard port changed from 8080 to 8501 (Streamlit default)
|
|
264
|
+
|
|
265
|
+
### Added
|
|
266
|
+
- New Streamlit dashboard with 5 pages: Overview, Errors, Metrics, Providers, SDD Workflow
|
|
267
|
+
- Interactive Plotly charts with zoom, pan, and hover tooltips
|
|
268
|
+
- Data export functionality (CSV/JSON download buttons)
|
|
269
|
+
- Cached data access via `@st.cache_data` for performance
|
|
270
|
+
- CLI commands: `dashboard start`, `dashboard stop`, `dashboard status`
|
|
271
|
+
- New SDD Workflow page for spec progress tracking, phase burndown, task status
|
|
272
|
+
- Plan review tool (`plan-review`) for AI-assisted specification review
|
|
273
|
+
|
|
274
|
+
### Removed
|
|
275
|
+
- Old aiohttp-based dashboard server and static JS/CSS files
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: foundry-mcp
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.4
|
|
4
4
|
Summary: MCP server for SDD toolkit spec management
|
|
5
5
|
Project-URL: Homepage, https://github.com/tylerburleigh/foundry-mcp
|
|
6
6
|
Project-URL: Repository, https://github.com/tylerburleigh/foundry-mcp
|
|
@@ -125,6 +125,11 @@ specs/
|
|
|
125
125
|
- `plan(action=create|list|review)` supports lightweight planning and review flows.
|
|
126
126
|
- Notifications and sampling channels surface phase completions to MCP clients.
|
|
127
127
|
|
|
128
|
+
### Batch metadata utilities
|
|
129
|
+
|
|
130
|
+
- `task(action=metadata-batch)` — Apply metadata updates (e.g., `file_path`, `estimated_hours`) to multiple nodes at once. Supports flexible AND-based filtering by `node_type`, `phase_id`, or `pattern` regex. Includes `dry_run` mode for previewing changes.
|
|
131
|
+
- `task(action=fix-verification-types)` — Auto-fix invalid or missing `verification_type` on verify nodes. Supports legacy mappings (`test` → `run-tests`, `auto` → `run-tests`) and defaults unknown types to `manual`. Includes `dry_run` mode for previewing fixes.
|
|
132
|
+
|
|
128
133
|
### Code, docs, and testing intelligence
|
|
129
134
|
|
|
130
135
|
- Code navigation tools via `code(action=...)` support symbol lookup and call-graph tracing.
|
|
@@ -199,6 +204,7 @@ All MCP tools emit the standardized envelope defined in `docs/codebase_standards
|
|
|
199
204
|
| `FOUNDRY_MCP_API_KEYS` | Comma-separated API keys required for tool access | Disabled |
|
|
200
205
|
| `FOUNDRY_MCP_FEATURE_FLAGS` | Additional feature flags to enable (e.g., `planning_tools`) | Based on spec rollout |
|
|
201
206
|
| `FOUNDRY_MCP_RESPONSE_CONTRACT` | Force response contract version (`v2`) | Auto-negotiated |
|
|
207
|
+
| `FOUNDRY_MODE` | Server mode: `full` (16 tools) or `minimal` (1 wake tool) | `full` |
|
|
202
208
|
| `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | LLM provider credentials | Not set |
|
|
203
209
|
|
|
204
210
|
### TOML configuration
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# PLAN: Phase-First Spec Authoring Improvements
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Deliver three coordinated enhancements that reduce manual MCP calls without relying on Markdown parsing:
|
|
5
|
+
1. **Phase authoring macros** that create entire phases (plus starter tasks/placeholders) in a single command.
|
|
6
|
+
2. **Updated documentation** clarifying the supported schema creation/export workflow.
|
|
7
|
+
3. **Batch metadata utilities** so spec authors can update large sets of tasks/verify nodes at once.
|
|
8
|
+
|
|
9
|
+
## Goals & Non-Goals
|
|
10
|
+
- **Goals**
|
|
11
|
+
- Let authors scaffold a whole phase (title, summary, default tasks) with one operation.
|
|
12
|
+
- Align the sdd-plan documentation with the current set of `spec`/`authoring` commands.
|
|
13
|
+
- Provide tooling to fix metadata-only validation issues through bulk operations.
|
|
14
|
+
- **Non-Goals**
|
|
15
|
+
- Markdown/import parsing of plan documents.
|
|
16
|
+
- Full redesign of task authoring flows; individual task commands still exist for fine tuning.
|
|
17
|
+
- GUI experiences or IDE plugins.
|
|
18
|
+
|
|
19
|
+
## Success Metrics
|
|
20
|
+
- A complete phase can be added with <=2 commands (phase macro + optional metadata tweak).
|
|
21
|
+
- Skill docs contain no references to deprecated actions and include copy/pasteable workflows.
|
|
22
|
+
- Batch metadata command can fix all verification/file_path errors in <3 commands even on large specs.
|
|
23
|
+
|
|
24
|
+
## Work Breakdown
|
|
25
|
+
|
|
26
|
+
### 1. Phase Authoring Macros (High Priority)
|
|
27
|
+
- **API Design**
|
|
28
|
+
- Extend authoring plugin with `phase-add-bulk` that accepts a JSON payload describing phase name, summary, and an ordered list of task/verify placeholders.
|
|
29
|
+
- Allow reuse of predefined phase templates (e.g., “Labeling App Phase 1”) stored with the skill.
|
|
30
|
+
- **Implementation Steps**
|
|
31
|
+
- Add server-side handler that creates the phase node and loops through provided child definitions, creating tasks/verify nodes atomically.
|
|
32
|
+
- Support optional metadata defaults (e.g., default owner, spec section) applied to all generated tasks.
|
|
33
|
+
- Provide dry-run output so authors can inspect the structure before creation.
|
|
34
|
+
- **Skill Integration**
|
|
35
|
+
- Update sdd-plan commands to surface macros (e.g., `phase add template 1`, `phase add custom` with inline JSON editor).
|
|
36
|
+
- Include helper snippets for copying a plan section and pasting it into the macro payload.
|
|
37
|
+
- **Testing**
|
|
38
|
+
- Unit coverage for payload validation (missing titles, duplicated IDs).
|
|
39
|
+
- Integration test that creates phases 1–3 of the labeling spec using only macro calls.
|
|
40
|
+
- **Example Tool Calls**
|
|
41
|
+
```bash
|
|
42
|
+
mcp__plugin_foundry_foundry-mcp__authoring phase-add-bulk '{"spec_id":"spec-ai-labeling-001","phase":{"phase_id":"phase-3","title":"Integrate Ingestion","summary":"Hook labelers into scoring app"},"children":[{"type":"task","title":"Wire ingestion API","metadata":{"file_path":"src/ingestion/api.py","estimated_hours":3}},{"type":"verify","title":"Regression suite","metadata":{"verification_type":"run-tests","mcp_tool":"mcp__foundry-mcp__test-run"}}]}'
|
|
43
|
+
mcp__plugin_foundry_foundry-mcp__authoring phase-add-template '{"spec_id":"spec-ai-labeling-001","template_id":"labeling-phase-1","phase_id":"phase-1"}'
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 2. Documentation Update for Schema Export Flow (Medium Priority)
|
|
47
|
+
- **Audit** existing `spec`/`authoring` features to ensure docs reflect reality.
|
|
48
|
+
- **Doc Changes**
|
|
49
|
+
- Remove references to `spec schema-export` in `skills/sdd-plan/SKILL.md` and related references.
|
|
50
|
+
- Add a “Phase-first authoring” section walking through: create spec from template → run phase macro → fine tune tasks → run metadata batch.
|
|
51
|
+
- Highlight fallback commands (manual `task add`) for edge cases.
|
|
52
|
+
- **Changelog & Guidance**
|
|
53
|
+
- Document the rationale for retiring schema-export and link to the new macro workflow in troubleshooting guides.
|
|
54
|
+
- **Example Tool Calls**
|
|
55
|
+
```bash
|
|
56
|
+
mcp__plugin_foundry_foundry-mcp__authoring spec-create '{"name":"spec-ai-labeling-001","template":"medium","category":"implementation"}'
|
|
57
|
+
mcp__skill_sdd-plan doc-open 'phase-first-authoring'
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 3. Batch Metadata Utilities (High Priority)
|
|
61
|
+
- **Command Surface**
|
|
62
|
+
- Introduce `task metadata-batch` that targets nodes by phase ID, task name regex, or node type.
|
|
63
|
+
- Support multiple metadata keys per invocation (`file_path`, `verification_type`, owners, labels).
|
|
64
|
+
- **Verification Fixers**
|
|
65
|
+
- Provide canned operations, e.g., `fix-verification-types phase=verify` to rewrite enums to `test/fidelity` values.
|
|
66
|
+
- Ensure validator and metadata API share a single source of truth for allowed values.
|
|
67
|
+
- **Safety & UX**
|
|
68
|
+
- Add dry-run flag and summary output (count of nodes updated, diff preview).
|
|
69
|
+
- Support rollback on partial failure (transaction or revert copy of previous metadata).
|
|
70
|
+
- **Testing**
|
|
71
|
+
- Regression tests confirming bulk updates succeed on 50+ tasks and gracefully handle invalid filters.
|
|
72
|
+
- **Example Tool Calls**
|
|
73
|
+
```bash
|
|
74
|
+
mcp__plugin_foundry_foundry-mcp__task metadata-batch '{"spec_id":"spec-ai-labeling-001","filter":{"phase_id":"phase-4","node_type":"task"},"metadata":{"file_path":"src/labeling/phase4.py"}}'
|
|
75
|
+
mcp__plugin_foundry_foundry-mcp__task metadata-batch '{"spec_id":"spec-ai-labeling-001","filter":{"node_type":"verify"},"metadata":{"verification_type":"fidelity"},"dry_run":true}'
|
|
76
|
+
mcp__plugin_foundry_foundry-mcp__task metadata-batch '{"spec_id":"spec-ai-labeling-001","filter":{"phase_id":"phase-7","node_type":"verify"},"metadata":{"verification_type":"run-tests"}}'
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Dependencies & Risks
|
|
80
|
+
- **Dependencies**
|
|
81
|
+
- MCP authoring/task routes that can accept batch payloads.
|
|
82
|
+
- Maintained phase templates stored in the repo/skill.
|
|
83
|
+
- **Risks**
|
|
84
|
+
- Large payloads might hit RPC limits; mitigate with pagination or per-phase batching.
|
|
85
|
+
- Batch metadata ops could overwrite intentional differences; dry-run and filter validation are critical.
|
|
86
|
+
- Documentation must stay in sync as new macros ship; add owner to review doc updates alongside code changes.
|
|
87
|
+
|
|
88
|
+
## Timeline (Rough)
|
|
89
|
+
1. **Week 1**: Finalize phase macro payload schema; stub batch metadata command; draft doc updates.
|
|
90
|
+
2. **Week 2**: Implement phase macros + tests; build metadata-batch backend with dry-run support.
|
|
91
|
+
3. **Week 3**: Integrate macros into sdd-plan skill, update documentation, run end-to-end scenario tests.
|
|
92
|
+
|
|
93
|
+
## Validation & Rollout
|
|
94
|
+
- Dogfood on the labeling spec workflow to confirm each phase can be authored in a single macro call plus metadata fix.
|
|
95
|
+
- Update release notes + sdd-plan changelog; provide short Loom/demo if useful.
|
|
96
|
+
- Track telemetry (MCP call counts per spec) to confirm reduction after rollout.
|
|
@@ -82,6 +82,11 @@ specs/
|
|
|
82
82
|
- `plan(action=create|list|review)` supports lightweight planning and review flows.
|
|
83
83
|
- Notifications and sampling channels surface phase completions to MCP clients.
|
|
84
84
|
|
|
85
|
+
### Batch metadata utilities
|
|
86
|
+
|
|
87
|
+
- `task(action=metadata-batch)` — Apply metadata updates (e.g., `file_path`, `estimated_hours`) to multiple nodes at once. Supports flexible AND-based filtering by `node_type`, `phase_id`, or `pattern` regex. Includes `dry_run` mode for previewing changes.
|
|
88
|
+
- `task(action=fix-verification-types)` — Auto-fix invalid or missing `verification_type` on verify nodes. Supports legacy mappings (`test` → `run-tests`, `auto` → `run-tests`) and defaults unknown types to `manual`. Includes `dry_run` mode for previewing fixes.
|
|
89
|
+
|
|
85
90
|
### Code, docs, and testing intelligence
|
|
86
91
|
|
|
87
92
|
- Code navigation tools via `code(action=...)` support symbol lookup and call-graph tracing.
|
|
@@ -156,6 +161,7 @@ All MCP tools emit the standardized envelope defined in `docs/codebase_standards
|
|
|
156
161
|
| `FOUNDRY_MCP_API_KEYS` | Comma-separated API keys required for tool access | Disabled |
|
|
157
162
|
| `FOUNDRY_MCP_FEATURE_FLAGS` | Additional feature flags to enable (e.g., `planning_tools`) | Based on spec rollout |
|
|
158
163
|
| `FOUNDRY_MCP_RESPONSE_CONTRACT` | Force response contract version (`v2`) | Auto-negotiated |
|
|
164
|
+
| `FOUNDRY_MODE` | Server mode: `full` (16 tools) or `minimal` (1 wake tool) | `full` |
|
|
159
165
|
| `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | LLM provider credentials | Not set |
|
|
160
166
|
|
|
161
167
|
### TOML configuration
|
|
@@ -20,7 +20,7 @@ Consistent naming shortens discovery time, improves LLM selection accuracy, and
|
|
|
20
20
|
|--------------|------------------|-------|
|
|
21
21
|
| `environment` | `init`, `verify-env`, `verify-toolchain`, `setup`, `detect` | Workspace + toolchain hygiene |
|
|
22
22
|
| `spec` | `find`, `list`, `validate`, `fix`, `stats`, `validate-fix`, `analyze`, `analyze-deps` | Discovery/validation/analysis |
|
|
23
|
-
| `authoring` | `spec-create`, `spec-template`, `spec-update-frontmatter`, `phase-add`, `phase-remove`, `assumption-add`, `assumption-list`, `revision-add` | Spec mutations |
|
|
23
|
+
| `authoring` | `spec-create`, `spec-template`, `spec-update-frontmatter`, `phase-add`, `phase-add-bulk`, `phase-remove`, `phase-move`, `phase-template`, `phase-update-metadata`, `assumption-add`, `assumption-list`, `revision-add`, `spec-find-replace`, `spec-rollback` | Spec mutations |
|
|
24
24
|
| `task` | `next`, `prepare`, `start`, `complete`, `progress`, `query`, `hierarchy`, `block`, `unblock` | Task execution surface |
|
|
25
25
|
| `lifecycle` | `activate`, `complete`, `archive`, `move`, `state` | Spec folder/state transitions |
|
|
26
26
|
| `journal` | `add`, `list`, `list-unjournaled` | Journal records |
|