close
Skip to content

doco(spec-driven): Fix small typo in spec-driven.md#4

Merged
localden merged 1 commit intogithub:mainfrom
lucasmodrich:fix-typo
Sep 3, 2025
Merged

doco(spec-driven): Fix small typo in spec-driven.md#4
localden merged 1 commit intogithub:mainfrom
lucasmodrich:fix-typo

Conversation

@lucasmodrich
Copy link
Copy Markdown
Contributor

Corrected a small typo in the spec-driven.md document.
This is a document-only change.

@localden localden merged commit 54c7f9c into github:main Sep 3, 2025
@lucasmodrich lucasmodrich deleted the fix-typo branch September 3, 2025 04:14
jellydn pushed a commit to jellydn/spec-kit that referenced this pull request Sep 30, 2025
doco(spec-driven): Fix small typo in spec-driven.md
plutch pushed a commit to plutch/spec-kit that referenced this pull request Nov 13, 2025
…r feedback)

Implements fixes for workflow-reviewer agent's identified critical issues:

1. Fix State Management Gap (Critical github#1)
   - Added spec-metadata.json generation in /speckit.quick Phase 1
   - Enables integration with /speckit.status and /speckit.pm (v2.3 compatibility)
   - Metadata tracks: workflow_type, phase, approvals, risk_level
   - Updates metadata after each phase (pre-flight, implementation, quality gate, complete)
   - File: .specify/quick-tasks/quick-task-[timestamp]-metadata.json

2. Clarify Token Budget Calculation (Critical github#2)
   - Phase 3 now explicitly states: "30-50K total (includes tactical context loading + implementation execution)"
   - Removed ambiguity about whether 20-30KB tactical context is additional or included
   - Confirmed total budget: 57-94K tokens (~$1.10-$1.80)

3. Verify Documentation Consistency (Critical github#3)
   - Verified command counts are correct: 18 core + 3 epic = 21 total
   - Confirmed /speckit.quick is in all relevant tables (CLAUDE.md, README.md)
   - No changes needed - documentation was already accurate

4. Add Risk Scoring to Step 0.5 (Major github#4)
   - Added heuristic risk assessment BEFORE complexity analysis
   - HIGH-RISK indicators: payment, auth, multi-tenant, compliance (GDPR/HIPAA/PCI), database migration
   - MEDIUM-RISK indicators: database, schema change, API endpoint, real-time, bulk operations
   - Decision logic:
     - ANY HIGH-RISK keyword → Block quick workflow, require full workflow
     - ≥2 MEDIUM-RISK keywords → Block quick workflow, recommend full workflow
     - ELSE → LOW-RISK (0-3) → Continue to complexity analysis
   - Prevents users from accidentally using /speckit.quick on HIGH-risk tasks

Benefits:
- State management enables workflow tracking and status visibility
- Token budget clarity prevents cost estimation errors
- Risk scoring prevents inappropriate use of quick workflow for security-critical/high-risk features
- Maintains constitutional enforcement and quality gates

Files Modified:
- src/.claude/commands/speckit.quick.md:
  - Added metadata generation in Phase 1 (lines 167-215)
  - Added metadata updates in Phase 2, 3, 4, 5 (pre-flight, implementation, quality gate, complete)
  - Clarified Phase 3 token budget (line 377: "30-50K total includes tactical context")

- src/.claude/commands/speckit.specify.md:
  - Added Quick Risk Assessment to Step 0.5 (lines 110-141)
  - HIGH-RISK/MEDIUM-RISK keyword detection
  - Blocks quick workflow for risky features

Overall Assessment: Addresses all critical issues identified by workflow-reviewer.
Estimated improvement: 8.5/10 (was 7.2/10)

Version: v2.9.1 (patch)
sarmadalikhanofficial pushed a commit to syrextech/spec-kit-plus that referenced this pull request Dec 3, 2025
github#4 from panaversity/feat/adr_phr_extension

This PR introduces automatic Post-Hoc Reflection (PHR) creation to capture all decisions and discussions after every command, smart ADR suggestions using a three-part significance test to prevent documentation spam.
@mnriem mnriem mentioned this pull request Mar 20, 2026
6 tasks
kennedy-whytech added a commit to kennedy-whytech/spec-kit that referenced this pull request Apr 18, 2026
Implements comment github#4 from PR review: multiple installed wrap presets
now compose in priority order rather than overwriting each other.

Key changes:
- PresetResolver.resolve() gains skip_presets flag; resolve_core() wraps
  it to skip tier 2, preventing accidental nesting during replay
- _replay_wraps_for_command() recomposed all enabled wrap presets for a
  command in ascending priority order (innermost-first) after any
  install or remove
- _replay_skill_override() keeps SKILL.md in sync with the recomposed
  command body for ai-skills-enabled projects
- install_from_directory() detects strategy: wrap commands, stores
  wrap_commands in the registry entry, and calls replay after install
- remove() reads wrap_commands before deletion, removes registry entry
  before rmtree so replay sees post-removal state, then replays
  remaining wraps or unregisters when none remain

Tests: TestResolveCore (5), TestReplayWrapsForCommand (5),
TestInstallRemoveWrapLifecycle (5), plus 2 skill/alias regression tests
kennedy-whytech added a commit to kennedy-whytech/spec-kit that referenced this pull request Apr 18, 2026
Implements comment github#4 from PR review: multiple installed wrap presets
now compose in priority order rather than overwriting each other.

Key changes:
- PresetResolver.resolve() gains skip_presets flag; resolve_core() wraps
  it to skip tier 2, preventing accidental nesting during replay
- _replay_wraps_for_command() recomposed all enabled wrap presets for a
  command in ascending priority order (innermost-first) after any
  install or remove
- _replay_skill_override() keeps SKILL.md in sync with the recomposed
  command body for ai-skills-enabled projects
- install_from_directory() detects strategy: wrap commands, stores
  wrap_commands in the registry entry, and calls replay after install
- remove() reads wrap_commands before deletion, removes registry entry
  before rmtree so replay sees post-removal state, then replays
  remaining wraps or unregisters when none remain

Tests: TestResolveCore (5), TestReplayWrapsForCommand (5),
TestInstallRemoveWrapLifecycle (5), plus 2 skill/alias regression tests
kennedy-whytech added a commit to kennedy-whytech/spec-kit that referenced this pull request Apr 18, 2026
Implements comment github#4 from PR review: multiple installed wrap presets
now compose in priority order rather than overwriting each other.

Key changes:
- PresetResolver.resolve() gains skip_presets flag; resolve_core() wraps
  it to skip tier 2, preventing accidental nesting during replay
- _replay_wraps_for_command() recomposed all enabled wrap presets for a
  command in ascending priority order (innermost-first) after any
  install or remove
- _replay_skill_override() keeps SKILL.md in sync with the recomposed
  command body for ai-skills-enabled projects
- install_from_directory() detects strategy: wrap commands, stores
  wrap_commands in the registry entry, and calls replay after install
- remove() reads wrap_commands before deletion, removes registry entry
  before rmtree so replay sees post-removal state, then replays
  remaining wraps or unregisters when none remain

Tests: TestResolveCore (5), TestReplayWrapsForCommand (5),
TestInstallRemoveWrapLifecycle (5), plus 2 skill/alias regression tests
mnriem pushed a commit that referenced this pull request Apr 21, 2026
* feat: implement strategy: wrap

* fix: resolve merge conflict for strategy wrap correctness

* feat: multi-preset composable wrapping with priority ordering

Implements comment #4 from PR review: multiple installed wrap presets
now compose in priority order rather than overwriting each other.

Key changes:
- PresetResolver.resolve() gains skip_presets flag; resolve_core() wraps
  it to skip tier 2, preventing accidental nesting during replay
- _replay_wraps_for_command() recomposed all enabled wrap presets for a
  command in ascending priority order (innermost-first) after any
  install or remove
- _replay_skill_override() keeps SKILL.md in sync with the recomposed
  command body for ai-skills-enabled projects
- install_from_directory() detects strategy: wrap commands, stores
  wrap_commands in the registry entry, and calls replay after install
- remove() reads wrap_commands before deletion, removes registry entry
  before rmtree so replay sees post-removal state, then replays
  remaining wraps or unregisters when none remain

Tests: TestResolveCore (5), TestReplayWrapsForCommand (5),
TestInstallRemoveWrapLifecycle (5), plus 2 skill/alias regression tests

* fix: resolve extension commands via manifest file mapping

PresetResolver.resolve_extension_command_via_manifest() consults each
installed extension.yml to find the actual file declared for a command
name, rather than assuming the file is named <cmd_name>.md.  This fixes
_substitute_core_template for extensions like selftest where the manifest
maps speckit.selftest.extension → commands/selftest.md.

Resolution order in _substitute_core_template is now:
  1. resolve_core(cmd_name) — project overrides win, then name-based lookup
  2. resolve_extension_command_via_manifest(cmd_name) — manifest fallback
  3. resolve_core(short_name) — core template short-name fallback

Path traversal guard mirrors the containment check already present in
ExtensionManager to reject absolute paths or paths escaping the extension
root.

* fix: add bundled core_pack as Priority 5 in PresetResolver.resolve()

resolve_core() was returning None for built-in commands (implement,
specify, etc.) because PresetResolver only checked .specify/templates/
commands/ (Priority 4), which is never populated for commands in a
normal project. strategy:wrap presets rely on resolve_core() to fetch
the {CORE_TEMPLATE} body, so the wrap was silently skipped and SKILL.md
was never updated.

Priority 5 now checks core_pack/commands/ (wheel install) or
repo_root/templates/commands/ (source checkout), mirroring the pattern
used by _locate_core_pack() elsewhere.

Updated two tests whose assertions assumed resolve_core() always
returned None when .specify/templates/commands/ was absent.

* fix: harden preset wrap replay removal

* fix: stabilize existing directory error output

* fix: track outermost_pack_id from contributing preset; use Path.parts in tests

- outermost_pack_id now updates alongside outermost_frontmatter inside
  the wrap loop, so it reflects the actual last contributing preset
  rather than always taking wrap_presets[0] (which may have been skipped)
- Replace str(path) substring checks in TestResolveCore with Path.parts
  tuple comparisons for correct behaviour on Windows (CI runs windows-latest)

* fix: guard against non-mapping YAML manifests; apply integration post-processing in replay

- ExtensionManifest._load raises ValidationError for non-dict YAML roots instead of TypeError
- PresetManager._replay_wraps_for_command calls integration.post_process_skill_content,
  matching _register_skills behaviour
- PresetResolver skips extensions that raise OSError/TypeError/AttributeError on manifest load
- Tests: non-mapping YAML, OSError manifest skip, and replay integration post-processing
elTorres pushed a commit to elTorres/spec-kit that referenced this pull request Apr 22, 2026
* feat: implement strategy: wrap

* fix: resolve merge conflict for strategy wrap correctness

* feat: multi-preset composable wrapping with priority ordering

Implements comment github#4 from PR review: multiple installed wrap presets
now compose in priority order rather than overwriting each other.

Key changes:
- PresetResolver.resolve() gains skip_presets flag; resolve_core() wraps
  it to skip tier 2, preventing accidental nesting during replay
- _replay_wraps_for_command() recomposed all enabled wrap presets for a
  command in ascending priority order (innermost-first) after any
  install or remove
- _replay_skill_override() keeps SKILL.md in sync with the recomposed
  command body for ai-skills-enabled projects
- install_from_directory() detects strategy: wrap commands, stores
  wrap_commands in the registry entry, and calls replay after install
- remove() reads wrap_commands before deletion, removes registry entry
  before rmtree so replay sees post-removal state, then replays
  remaining wraps or unregisters when none remain

Tests: TestResolveCore (5), TestReplayWrapsForCommand (5),
TestInstallRemoveWrapLifecycle (5), plus 2 skill/alias regression tests

* fix: resolve extension commands via manifest file mapping

PresetResolver.resolve_extension_command_via_manifest() consults each
installed extension.yml to find the actual file declared for a command
name, rather than assuming the file is named <cmd_name>.md.  This fixes
_substitute_core_template for extensions like selftest where the manifest
maps speckit.selftest.extension → commands/selftest.md.

Resolution order in _substitute_core_template is now:
  1. resolve_core(cmd_name) — project overrides win, then name-based lookup
  2. resolve_extension_command_via_manifest(cmd_name) — manifest fallback
  3. resolve_core(short_name) — core template short-name fallback

Path traversal guard mirrors the containment check already present in
ExtensionManager to reject absolute paths or paths escaping the extension
root.

* fix: add bundled core_pack as Priority 5 in PresetResolver.resolve()

resolve_core() was returning None for built-in commands (implement,
specify, etc.) because PresetResolver only checked .specify/templates/
commands/ (Priority 4), which is never populated for commands in a
normal project. strategy:wrap presets rely on resolve_core() to fetch
the {CORE_TEMPLATE} body, so the wrap was silently skipped and SKILL.md
was never updated.

Priority 5 now checks core_pack/commands/ (wheel install) or
repo_root/templates/commands/ (source checkout), mirroring the pattern
used by _locate_core_pack() elsewhere.

Updated two tests whose assertions assumed resolve_core() always
returned None when .specify/templates/commands/ was absent.

* fix: harden preset wrap replay removal

* fix: stabilize existing directory error output

* fix: track outermost_pack_id from contributing preset; use Path.parts in tests

- outermost_pack_id now updates alongside outermost_frontmatter inside
  the wrap loop, so it reflects the actual last contributing preset
  rather than always taking wrap_presets[0] (which may have been skipped)
- Replace str(path) substring checks in TestResolveCore with Path.parts
  tuple comparisons for correct behaviour on Windows (CI runs windows-latest)

* fix: guard against non-mapping YAML manifests; apply integration post-processing in replay

- ExtensionManifest._load raises ValidationError for non-dict YAML roots instead of TypeError
- PresetManager._replay_wraps_for_command calls integration.post_process_skill_content,
  matching _register_skills behaviour
- PresetResolver skips extensions that raise OSError/TypeError/AttributeError on manifest load
- Tests: non-mapping YAML, OSError manifest skip, and replay integration post-processing
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants