From 8e94c232b43901bd1e29a1c274bfac9aad709913 Mon Sep 17 00:00:00 2001 From: agatha Date: Mon, 11 May 2026 20:55:55 +0000 Subject: [PATCH] Chore: Update spec-kit and install memory-loader extension --- .specify/extensions.yml | 49 ++++++++++ .specify/extensions/.registry | 14 +++ .../extensions/memory-loader/CHANGELOG.md | 9 ++ .specify/extensions/memory-loader/LICENSE | 21 ++++ .specify/extensions/memory-loader/README.md | 81 ++++++++++++++++ .../commands/speckit.memory-loader.load.md | 33 +++++++ .../extensions/memory-loader/extension.yml | 61 ++++++++++++ .specify/init-options.json | 2 +- .specify/integration.json | 13 ++- .specify/integrations/claude.manifest.json | 10 +- .specify/integrations/speckit.manifest.json | 5 +- .specify/scripts/bash/setup-tasks.sh | 96 +++++++++++++++++++ .specify/templates/tasks-template.md | 10 +- CLAUDE.md | 3 +- 14 files changed, 391 insertions(+), 16 deletions(-) create mode 100644 .specify/extensions/memory-loader/CHANGELOG.md create mode 100644 .specify/extensions/memory-loader/LICENSE create mode 100644 .specify/extensions/memory-loader/README.md create mode 100644 .specify/extensions/memory-loader/commands/speckit.memory-loader.load.md create mode 100644 .specify/extensions/memory-loader/extension.yml create mode 100755 .specify/scripts/bash/setup-tasks.sh diff --git a/.specify/extensions.yml b/.specify/extensions.yml index efbbda9..d2fc738 100644 --- a/.specify/extensions.yml +++ b/.specify/extensions.yml @@ -18,6 +18,13 @@ hooks: prompt: Execute speckit.git.feature? description: Create feature branch before specification condition: null + - extension: memory-loader + command: speckit.memory-loader.load + enabled: true + optional: false + prompt: Execute speckit.memory-loader.load? + description: Load project memory files before specification + condition: null before_clarify: - extension: git command: speckit.git.commit @@ -26,6 +33,13 @@ hooks: prompt: Commit outstanding changes before clarification? description: Auto-commit before spec clarification condition: null + - extension: memory-loader + command: speckit.memory-loader.load + enabled: true + optional: false + prompt: Execute speckit.memory-loader.load? + description: Load project memory files before clarification + condition: null before_plan: - extension: git command: speckit.git.commit @@ -34,6 +48,13 @@ hooks: prompt: Commit outstanding changes before planning? description: Auto-commit before implementation planning condition: null + - extension: memory-loader + command: speckit.memory-loader.load + enabled: true + optional: false + prompt: Execute speckit.memory-loader.load? + description: Load project memory files before planning + condition: null before_tasks: - extension: git command: speckit.git.commit @@ -42,6 +63,13 @@ hooks: prompt: Commit outstanding changes before task generation? description: Auto-commit before task generation condition: null + - extension: memory-loader + command: speckit.memory-loader.load + enabled: true + optional: false + prompt: Execute speckit.memory-loader.load? + description: Load project memory files before task generation + condition: null before_implement: - extension: git command: speckit.git.commit @@ -50,6 +78,13 @@ hooks: prompt: Commit outstanding changes before implementation? description: Auto-commit before implementation condition: null + - extension: memory-loader + command: speckit.memory-loader.load + enabled: true + optional: false + prompt: Execute speckit.memory-loader.load? + description: Load project memory files before implementation + condition: null before_checklist: - extension: git command: speckit.git.commit @@ -58,6 +93,13 @@ hooks: prompt: Commit outstanding changes before checklist? description: Auto-commit before checklist generation condition: null + - extension: memory-loader + command: speckit.memory-loader.load + enabled: true + optional: false + prompt: Execute speckit.memory-loader.load? + description: Load project memory files before checklist generation + condition: null before_analyze: - extension: git command: speckit.git.commit @@ -66,6 +108,13 @@ hooks: prompt: Commit outstanding changes before analysis? description: Auto-commit before analysis condition: null + - extension: memory-loader + command: speckit.memory-loader.load + enabled: true + optional: false + prompt: Execute speckit.memory-loader.load? + description: Load project memory files before analysis + condition: null before_taskstoissues: - extension: git command: speckit.git.commit diff --git a/.specify/extensions/.registry b/.specify/extensions/.registry index cb27671..974ec70 100644 --- a/.specify/extensions/.registry +++ b/.specify/extensions/.registry @@ -18,6 +18,20 @@ }, "registered_skills": [], "installed_at": "2026-05-02T15:15:14.534434+00:00" + }, + "memory-loader": { + "version": "1.0.0", + "source": "local", + "manifest_hash": "sha256:d1caef45965accd4316d8aede0a4ac67f910017ea3c501814cfc7e2d8177ab0b", + "enabled": true, + "priority": 10, + "registered_commands": { + "claude": [ + "speckit.memory-loader.load" + ] + }, + "registered_skills": [], + "installed_at": "2026-05-11T20:50:02.702659+00:00" } } } \ No newline at end of file diff --git a/.specify/extensions/memory-loader/CHANGELOG.md b/.specify/extensions/memory-loader/CHANGELOG.md new file mode 100644 index 0000000..713c25f --- /dev/null +++ b/.specify/extensions/memory-loader/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +## [1.0.0] - 2026-04-20 + +### Added +- Initial release +- `speckit.memory-loader.load` command to read all `.specify/memory/*.md` files +- `before_*` hooks for specify, plan, tasks, implement, clarify, checklist, and analyze lifecycle commands +- Graceful degradation when memory directory is missing or files are unreadable diff --git a/.specify/extensions/memory-loader/LICENSE b/.specify/extensions/memory-loader/LICENSE new file mode 100644 index 0000000..cf9d40d --- /dev/null +++ b/.specify/extensions/memory-loader/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 KevinBrown5280 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.specify/extensions/memory-loader/README.md b/.specify/extensions/memory-loader/README.md new file mode 100644 index 0000000..7c0fe07 --- /dev/null +++ b/.specify/extensions/memory-loader/README.md @@ -0,0 +1,81 @@ +# spec-kit-memory-loader + +A [Spec Kit](https://github.com/github/spec-kit) extension that loads `.specify/memory/` files before spec-kit lifecycle commands so LLM agents have project governance context (constitution, glossary, conventions, resource standards). + +## Problem + +Spec-kit lifecycle commands (`/speckit.specify`, `/speckit.plan`, `/speckit.implement`, etc.) execute without awareness of project-specific governance documents stored in `.specify/memory/`. This means: + +- Constitution principles are not consulted during specification +- Glossary terms are not available during planning +- Coding conventions are missed during implementation +- Resource standards are ignored during task generation + +## Solution + +The Memory Loader extension registers `before_*` hooks on all major spec-kit lifecycle commands. Before each command runs, it reads every `.md` file from `.specify/memory/` and outputs their contents, giving the LLM agent full governance context. + +## Installation + +```bash +# From release +specify extension add memory-loader --from https://github.com/KevinBrown5280/spec-kit-memory-loader/archive/refs/tags/v1.0.0.zip + +# From main branch +specify extension add memory-loader --from https://github.com/KevinBrown5280/spec-kit-memory-loader/archive/refs/heads/main.zip + +# Development mode (local clone) +specify extension add --dev /path/to/spec-kit-memory-loader +``` + +## Commands + +| Command | Description | Modifies Files? | +|---------|-------------|-----------------| +| `speckit.memory-loader.load` | Read all project memory files and output their contents for context | No — read-only | + +## How It Works + +1. **Gather**: Reads every `.md` file from `.specify/memory/` + - If the directory does not exist, skips silently + - If a file cannot be read, skips it and continues + +2. **Output**: For each file, prints a headed section: + ``` + ## Memory: {filename} + + {file contents} + ``` + +3. **Summarize**: After all files, outputs: + ``` + Context loaded: {memory_count} memory files + ``` + +## Hooks + +The extension fires automatically before these lifecycle commands: + +| Hook | Command | Description | +|------|---------|-------------| +| `before_specify` | `speckit.memory-loader.load` | Load context before specification | +| `before_plan` | `speckit.memory-loader.load` | Load context before planning | +| `before_tasks` | `speckit.memory-loader.load` | Load context before task generation | +| `before_implement` | `speckit.memory-loader.load` | Load context before implementation | +| `before_clarify` | `speckit.memory-loader.load` | Load context before clarification | +| `before_checklist` | `speckit.memory-loader.load` | Load context before checklist generation | +| `before_analyze` | `speckit.memory-loader.load` | Load context before analysis | + +## Design Decisions + +- **Read-only** — never modifies any files +- **Graceful degradation** — missing directory or unreadable files are skipped silently +- **Governance only** — loads project-level memory; feature-specific reference docs are handled separately by a companion extension + +## Requirements + +- Spec Kit >= 0.6.0 + +## License + +MIT diff --git a/.specify/extensions/memory-loader/commands/speckit.memory-loader.load.md b/.specify/extensions/memory-loader/commands/speckit.memory-loader.load.md new file mode 100644 index 0000000..1d092aa --- /dev/null +++ b/.specify/extensions/memory-loader/commands/speckit.memory-loader.load.md @@ -0,0 +1,33 @@ +--- +description: "Read all project memory files and output their contents for LLM context" +--- + +# Load Project Memory + +Read ALL `.md` files in `.specify/memory/` and output their contents. This gives you project governance context (constitution, glossary, conventions, resource standards) for the command that follows. + +## Steps + +1. **Gather**: Read every `.md` file from `.specify/memory/`. + - If the directory does not exist, skip it silently. + - If a file cannot be read, skip it and continue. + +2. **Output**: For each file, print a headed section: + + ``` + ## Memory: {filename} + + {file contents} + ``` + +3. **Summarize**: After all files, output: + + ``` + Context loaded: {memory_count} memory files + ``` + +## Usage Notes + +- Designed as a mandatory `before_*` hook that fires before spec-kit lifecycle commands. +- Loads governance context only. Feature-specific reference docs are loaded by the `spec-reference-loader` extension. +- This is a read-only operation — do NOT modify any files. diff --git a/.specify/extensions/memory-loader/extension.yml b/.specify/extensions/memory-loader/extension.yml new file mode 100644 index 0000000..519d5e3 --- /dev/null +++ b/.specify/extensions/memory-loader/extension.yml @@ -0,0 +1,61 @@ +schema_version: "1.0" + +extension: + id: "memory-loader" + name: "Memory Loader" + version: "1.0.0" + description: "Loads .specify/memory/ files before spec-kit lifecycle commands so LLM agents have project governance context" + author: "KevinBrown5280" + repository: "https://github.com/KevinBrown5280/spec-kit-memory-loader" + license: "MIT" + homepage: "https://github.com/KevinBrown5280/spec-kit-memory-loader" + +requires: + speckit_version: ">=0.6.0" + +provides: + commands: + - name: "speckit.memory-loader.load" + file: "commands/speckit.memory-loader.load.md" + description: "Read all project memory files and output their contents for context" + +hooks: + before_specify: + command: "speckit.memory-loader.load" + optional: false + description: "Load project memory files before specification" + + before_plan: + command: "speckit.memory-loader.load" + optional: false + description: "Load project memory files before planning" + + before_tasks: + command: "speckit.memory-loader.load" + optional: false + description: "Load project memory files before task generation" + + before_implement: + command: "speckit.memory-loader.load" + optional: false + description: "Load project memory files before implementation" + + before_clarify: + command: "speckit.memory-loader.load" + optional: false + description: "Load project memory files before clarification" + + before_checklist: + command: "speckit.memory-loader.load" + optional: false + description: "Load project memory files before checklist generation" + + before_analyze: + command: "speckit.memory-loader.load" + optional: false + description: "Load project memory files before analysis" + +tags: + - "memory" + - "context" + - "governance" diff --git a/.specify/init-options.json b/.specify/init-options.json index ed8d8ce..a044469 100644 --- a/.specify/init-options.json +++ b/.specify/init-options.json @@ -6,5 +6,5 @@ "here": true, "integration": "claude", "script": "sh", - "speckit_version": "0.8.2.dev0" + "speckit_version": "0.8.8" } \ No newline at end of file diff --git a/.specify/integration.json b/.specify/integration.json index 43e26fd..ff1cadf 100644 --- a/.specify/integration.json +++ b/.specify/integration.json @@ -1,4 +1,15 @@ { + "version": "0.8.8", + "integration_state_schema": 1, + "installed_integrations": [ + "claude" + ], + "integration_settings": { + "claude": { + "script": "sh", + "invoke_separator": "-" + } + }, "integration": "claude", - "version": "0.8.2.dev0" + "default_integration": "claude" } diff --git a/.specify/integrations/claude.manifest.json b/.specify/integrations/claude.manifest.json index cc54a9d..032a0e9 100644 --- a/.specify/integrations/claude.manifest.json +++ b/.specify/integrations/claude.manifest.json @@ -1,16 +1,16 @@ { "integration": "claude", - "version": "0.8.2.dev0", - "installed_at": "2026-05-02T15:15:14.461699+00:00", + "version": "0.8.8", + "installed_at": "2026-05-11T20:40:51.902830+00:00", "files": { ".claude/skills/speckit-analyze/SKILL.md": "2eef0fbff6cad15c9d4714d8986192387811c971a82a1135ab0404f3db0c5e90", ".claude/skills/speckit-checklist/SKILL.md": "26419fc118dcd9c4e1e977460696a04b7757b8fb0a2d1ff9c64732669deb7977", ".claude/skills/speckit-clarify/SKILL.md": "f2560f9f2007b4e995130f0c42633f08837a76a35d94e84091713a6f39bb1064", ".claude/skills/speckit-constitution/SKILL.md": "c1a044aba243ca6aff627fb5e4404feb6f1108d4f7dd174631bee3ae477d6c15", - ".claude/skills/speckit-implement/SKILL.md": "da9b4d6f9894d300515c66c057cee74025b27f2238895e3c22b59c6266b5be74", + ".claude/skills/speckit-implement/SKILL.md": "6029565c1a56de8919d1846b187cd644f734a0e30a6067a709803e6bc0d2abf7", ".claude/skills/speckit-plan/SKILL.md": "8141ebbce228ad0b422a84e3b995d2bd85de917b96eadd02b5fcb56fb23f2594", - ".claude/skills/speckit-specify/SKILL.md": "8599f8e2e3463de7d4f47591565340be2f775fd61b7dd9d2175503bc3b713b77", - ".claude/skills/speckit-tasks/SKILL.md": "792589edf0ebf89af797c6bdda4e9d2c9938c696181d6f1484bf7a7cd090efaa", + ".claude/skills/speckit-specify/SKILL.md": "caadc05119eca453709a0425ed88d253883f9c55da4c13a4898367653a859483", + ".claude/skills/speckit-tasks/SKILL.md": "54c4665be61818ed50aa528bb4c51db3627079b2c67d47f2b01046268288c4a5", ".claude/skills/speckit-taskstoissues/SKILL.md": "99bf5ffd90dcb57b63007c7f659a5160a18ce6feb82889895808e2d277abe83b" } } diff --git a/.specify/integrations/speckit.manifest.json b/.specify/integrations/speckit.manifest.json index 191d9ba..8dd56ba 100644 --- a/.specify/integrations/speckit.manifest.json +++ b/.specify/integrations/speckit.manifest.json @@ -1,6 +1,6 @@ { "integration": "speckit", - "version": "0.8.2.dev0", + "version": "0.8.8", "installed_at": "2026-05-02T15:15:14.478105+00:00", "files": { ".specify/scripts/bash/create-new-feature.sh": "bcf4964ca0c6c78717bb42d9e66b8c7e5ee82779cd96afc5aa7b08b75abe5790", @@ -11,6 +11,7 @@ ".specify/templates/plan-template.md": "5ad267630e370c73fe957dafa61bf76d633f3aea9d2f0b5195087d729cdd1e41", ".specify/templates/constitution-template.md": "ce7549540fa45543cca797a150201d868e64495fdff39dc38246fb17bd4024b3", ".specify/templates/spec-template.md": "785dc50d856dd92d6515eca0761e16dce0c9ba0a3cd07154fd33eae77932422a", - ".specify/templates/checklist-template.md": "c37695297e5d3153d64f82c21223509940b13932046c7961c42d1d669516130c" + ".specify/templates/checklist-template.md": "c37695297e5d3153d64f82c21223509940b13932046c7961c42d1d669516130c", + ".specify/scripts/bash/setup-tasks.sh": "e8d050c63c5afb664a8b671b0b0155513fb9cab0567b335e16b9eb035482aad2" } } diff --git a/.specify/scripts/bash/setup-tasks.sh b/.specify/scripts/bash/setup-tasks.sh new file mode 100755 index 0000000..3f6a40b --- /dev/null +++ b/.specify/scripts/bash/setup-tasks.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash + +set -e + +# Parse command line arguments +JSON_MODE=false + +for arg in "$@"; do + case "$arg" in + --json) JSON_MODE=true ;; + --help|-h) + echo "Usage: $0 [--json]" + echo " --json Output results in JSON format" + echo " --help Show this help message" + exit 0 + ;; + *) echo "ERROR: Unknown option '$arg'" >&2; exit 1 ;; + esac +done + +# Source common functions +SCRIPT_DIR="$(CDPATH="" cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/common.sh" + +# Get feature paths +_paths_output=$(get_feature_paths) || { echo "ERROR: Failed to resolve feature paths" >&2; exit 1; } +eval "$_paths_output" +unset _paths_output + +# Validate branch +# If feature.json pins an existing feature directory, branch naming is not required. +if ! feature_json_matches_feature_dir "$REPO_ROOT" "$FEATURE_DIR"; then + check_feature_branch "$CURRENT_BRANCH" "$HAS_GIT" || exit 1 +fi + +if [[ ! -f "$IMPL_PLAN" ]]; then + echo "ERROR: plan.md not found in $FEATURE_DIR" >&2 + echo "Run /speckit.plan first to create the implementation plan." >&2 + exit 1 +fi + +if [[ ! -f "$FEATURE_SPEC" ]]; then + echo "ERROR: spec.md not found in $FEATURE_DIR" >&2 + echo "Run /speckit.specify first to create the feature structure." >&2 + exit 1 +fi + +# Build available docs list +docs=() +[[ -f "$RESEARCH" ]] && docs+=("research.md") +[[ -f "$DATA_MODEL" ]] && docs+=("data-model.md") +if [[ -d "$CONTRACTS_DIR" ]] && [[ -n "$(ls -A "$CONTRACTS_DIR" 2>/dev/null)" ]]; then + docs+=("contracts/") +fi +[[ -f "$QUICKSTART" ]] && docs+=("quickstart.md") + +# Resolve tasks template through override stack +TASKS_TEMPLATE=$(resolve_template "tasks-template" "$REPO_ROOT") || true +if [[ -z "$TASKS_TEMPLATE" ]] || [[ ! -f "$TASKS_TEMPLATE" ]]; then + echo "ERROR: Could not resolve required tasks-template from the template override stack for $REPO_ROOT" >&2 + echo "Template 'tasks-template' was not found in any supported location (overrides, presets, extensions, or shared core). Add an override at .specify/templates/overrides/tasks-template.md, or run 'specify init' / reinstall shared infra to restore the core .specify/templates/tasks-template.md template." >&2 + exit 1 +fi + +# Output results +if $JSON_MODE; then + if has_jq; then + if [[ ${#docs[@]} -eq 0 ]]; then + json_docs="[]" + else + json_docs=$(printf '%s\n' "${docs[@]}" | jq -R . | jq -s .) + fi + jq -cn \ + --arg feature_dir "$FEATURE_DIR" \ + --argjson docs "$json_docs" \ + --arg tasks_template "${TASKS_TEMPLATE:-}" \ + '{FEATURE_DIR:$feature_dir,AVAILABLE_DOCS:$docs,TASKS_TEMPLATE:$tasks_template}' + else + if [[ ${#docs[@]} -eq 0 ]]; then + json_docs="[]" + else + json_docs=$(for d in "${docs[@]}"; do printf '"%s",' "$(json_escape "$d")"; done) + json_docs="[${json_docs%,}]" + fi + printf '{"FEATURE_DIR":"%s","AVAILABLE_DOCS":%s,"TASKS_TEMPLATE":"%s"}\n' \ + "$(json_escape "$FEATURE_DIR")" "$json_docs" "$(json_escape "${TASKS_TEMPLATE:-}")" + fi +else + echo "FEATURE_DIR: $FEATURE_DIR" + echo "TASKS_TEMPLATE: ${TASKS_TEMPLATE:-not found}" + echo "AVAILABLE_DOCS:" + check_file "$RESEARCH" "research.md" + check_file "$DATA_MODEL" "data-model.md" + check_dir "$CONTRACTS_DIR" "contracts/" + check_file "$QUICKSTART" "quickstart.md" +fi diff --git a/.specify/templates/tasks-template.md b/.specify/templates/tasks-template.md index 41cd484..c9f73c0 100644 --- a/.specify/templates/tasks-template.md +++ b/.specify/templates/tasks-template.md @@ -8,7 +8,7 @@ description: "Task list template for feature implementation" **Input**: Design documents from `/specs/[###-feature-name]/` **Prerequisites**: plan.md (required), spec.md (required for user stories), research.md, data-model.md, contracts/ -**Tests**: The examples below include test tasks. Per §5.1 of the constitution, TDD is non-negotiable — test tasks MUST appear before every implementation task. The test task labels below marked "OPTIONAL" refer to the *type* of test (E2E is best-effort per §5.2), not whether tests are written at all. +**Tests**: The examples below include test tasks. Tests are OPTIONAL - only include them if explicitly requested in the feature specification. **Organization**: Tasks are grouped by user story to enable independent implementation and testing of each story. @@ -79,7 +79,7 @@ Examples of foundational tasks (adjust based on your project): **Independent Test**: [How to verify this story works on its own] -### Tests for User Story 1 (REQUIRED per §5.1 — TDD) ⚠️ +### Tests for User Story 1 (OPTIONAL - only if tests requested) ⚠️ > **NOTE: Write these tests FIRST, ensure they FAIL before implementation** @@ -105,7 +105,7 @@ Examples of foundational tasks (adjust based on your project): **Independent Test**: [How to verify this story works on its own] -### Tests for User Story 2 (REQUIRED per §5.1 — TDD) ⚠️ +### Tests for User Story 2 (OPTIONAL - only if tests requested) ⚠️ - [ ] T018 [P] [US2] Contract test for [endpoint] in tests/contract/test_[name].py - [ ] T019 [P] [US2] Integration test for [user journey] in tests/integration/test_[name].py @@ -127,7 +127,7 @@ Examples of foundational tasks (adjust based on your project): **Independent Test**: [How to verify this story works on its own] -### Tests for User Story 3 (REQUIRED per §5.1 — TDD) ⚠️ +### Tests for User Story 3 (OPTIONAL - only if tests requested) ⚠️ - [ ] T024 [P] [US3] Contract test for [endpoint] in tests/contract/test_[name].py - [ ] T025 [P] [US3] Integration test for [user journey] in tests/integration/test_[name].py @@ -198,7 +198,7 @@ Examples of foundational tasks (adjust based on your project): ## Parallel Example: User Story 1 ```bash -# Launch all tests for User Story 1 together (TDD — write before implementation): +# Launch all tests for User Story 1 together (if tests requested): Task: "Contract test for [endpoint] in tests/contract/test_[name].py" Task: "Integration test for [user journey] in tests/integration/test_[name].py" diff --git a/CLAUDE.md b/CLAUDE.md index 8cca35d..7e6443a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,5 +1,4 @@ For additional context about technologies to be used, project structure, -shell commands, and other important information, read the current plan at -`specs/018-pagination-controls/plan.md`. +shell commands, and other important information, read the current plan