Skip to content

Latest commit

 

History

History
256 lines (214 loc) · 14.2 KB

File metadata and controls

256 lines (214 loc) · 14.2 KB

Changelog

All notable changes to DeepWork will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Added

  • Concurrent steps support in workflow definitions
    • Workflows can now specify nested arrays of step IDs to indicate steps that can run in parallel
    • Example: steps: [setup, [task_a, task_b, task_c], finalize] runs task_a/b/c concurrently
    • Single-item arrays indicate a step with multiple parallel instances (e.g., [fetch_campaign_data] runs for each campaign)
    • New WorkflowStepEntry dataclass in parser for sequential/concurrent step groups
    • Meta-skill template renders concurrent steps as "Background Task 1/2/3" with clear instructions
    • Added get_step_entry_position_in_workflow() and get_concurrent_step_info() methods to JobDefinition
    • Full backward compatibility: existing workflows with simple step arrays continue to work
  • Agent delegation field for job.yml steps
    • New agent field on steps allows specifying an agent type (e.g., agent: general-purpose)
    • When agent is set, generated Claude Code skills automatically include context: fork and agent: in frontmatter
    • Enables steps to delegate execution to specific agent types
    • Updated deepwork_jobs.define step instructions with agent delegation guidance
    • Updated job_spec.md doc spec with "Agent Delegation" section
  • Explicit workflow definitions in job.yml for distinguishing multi-step workflows from standalone skills
    • New workflows section in job.yml with name, summary, and ordered steps array
    • Workflows are shown separately from standalone skills in generated meta-skills
    • Step skills now display workflow context (e.g., "Step 2/3 in new_job workflow")
    • Standalone skills are clearly marked as "can be run anytime"
    • Backward compatible: jobs without workflows section use dependency-based detection

Changed

  • Skill templates now show workflow-aware progress (e.g., "new_job step 2/3 complete")
  • Meta-skill template reorganized to show "Workflows" and "Standalone Skills" sections separately
  • Updated deepwork_jobs standard job to v1.0.0 with explicit new_job workflow
  • SessionStart hook now skips non-initial sessions (resume, compact/clear) by checking the source field in stdin JSON, reducing noise and redundant checks

Fixed

  • Fixed skill template generating malformed YAML frontmatter with fields concatenated on single lines
    • Removed over-aggressive {%- whitespace stripping from Jinja template
    • Fields like user-invocable and hooks now render on proper separate lines
    • Affects src/deepwork/templates/claude/skill-job-step.md.jinja

Removed

0.5.1 - 2026-01-24

Added

Changed

Fixed

Removed

0.5.0 - 2026-01-24

Added

  • Installer now auto-adds permission for make_new_job.sh script, allowing Claude to run job creation without manual configuration
  • Manual release workflow (create-release.yml) that automates version releases:
    • Takes version number as input, validates format
    • Updates CHANGELOG.md: converts Unreleased section to new version with date
    • Adds fresh Unreleased section with placeholder categories
    • Updates pyproject.toml version and runs uv sync for lock file
    • Commits changes directly to main, creates tag, and publishes GitHub release

Changed

  • Commit job now requires changelog entries go to [Unreleased] section and explicitly prohibits modifying version numbers

Fixed

Removed

0.4.2 - 2026-01-24

Changed

  • Added closing tag comments to jinja templates for improved readability

0.4.1 - 2026-01-23

Changed

  • Disabled prompt-based stop hooks in Claude templates due to upstream bug (#20221)
  • Quality validation now uses sub-agent review pattern instead of prompt hooks

0.4.0 - 2026-01-23

Added

  • Doc specs (document specifications) as a first-class feature for formalizing document quality criteria
    • New src/deepwork/schemas/doc_spec_schema.py with JSON schema validation
    • New src/deepwork/core/doc_spec_parser.py with parser for frontmatter markdown doc spec files
    • Doc spec files stored in .deepwork/doc_specs/ directory with quality criteria and example documents
    • Auto-creates .deepwork/doc_specs/ directory during deepwork install
  • Extended job.yml output schema to support doc spec references
    • Outputs can now be strings (backward compatible) or objects with file and optional doc_spec fields
    • Example: outputs: [{file: "report.md", doc_spec: ".deepwork/doc_specs/monthly_report.md"}]
    • The doc_spec uses the full path to the doc spec file, making references self-documenting
  • Doc spec-aware skill generation
    • Step skills now include doc spec quality criteria, target audience, and example documents
    • Both Claude and Gemini templates updated for doc spec rendering
  • Document detection workflow in deepwork_jobs.define
    • Steps 1.5, 1.6, 1.7 guide users through creating doc specs for document-oriented jobs
    • Pattern indicators: "report", "summary", "create", "monthly", "for stakeholders"
  • Doc spec improvement workflow in deepwork_jobs.learn
    • Steps 3.5, 4.5 capture doc spec-related learnings and update doc spec files
  • New OutputSpec dataclass in parser for structured output handling
  • Comprehensive doc spec documentation in doc/doc-specs.md
  • New test fixtures for doc spec validation and parsing
  • Comprehensive tests for generator doc spec integration (9 new tests)
    • test_load_doc_spec_returns_parsed_spec - Verifies doc spec loading
    • test_load_doc_spec_caches_result - Verifies caching behavior
    • test_load_doc_spec_returns_none_for_missing_file - Graceful handling of missing files
    • test_generate_step_skill_with_doc_spec - End-to-end skill generation with doc spec
    • test_build_step_context_includes_doc_spec_info - Context building verification

Changed

  • BREAKING: Renamed document_type to doc_spec throughout the codebase
    • Job.yml field: document_typedoc_spec (e.g., outputs: [{file: "report.md", doc_spec: ".deepwork/doc_specs/report.md"}])
    • Class: DocumentTypeDefinitionDocSpec (backward compat alias provided)
    • Methods: has_document_type()has_doc_spec(), validate_document_type_references()validate_doc_spec_references()
    • Template variables: has_document_typehas_doc_spec, document_typedoc_spec
    • Internal: _load_document_type()_load_doc_spec(), _doc_type_cache_doc_spec_cache
  • Step.outputs changed from list[str] to list[OutputSpec] for richer output metadata
  • SkillGenerator.generate_all_skills() now accepts project_root parameter for doc spec loading
  • Updated deepwork_jobs to v0.6.0 with doc spec-related quality criteria

Fixed

  • Fixed COMMAND rules promise handling to properly update queue status
    • When an agent provides a promise tag for a FAILED command rule, the queue entry is now correctly updated to SKIPPED status
    • Previously, FAILED queue entries remained in FAILED state even after being acknowledged via promise
    • This ensures the rules queue accurately reflects rule state throughout the workflow
  • Fixed quality criteria validation logic in skill template (#111)
    • Changed promise condition from AND to OR: promise OR all criteria met now passes
    • Changed failure condition from OR to AND: requires both criteria NOT met AND promise missing to fail
    • This corrects the logic so the promise mechanism properly serves as a bypass for quality criteria

Migration Guide

  • Update job.yml files: Change document_type: to doc_spec: in output definitions
  • Update any code importing DocumentTypeDefinition: Use DocSpec instead (alias still works)
  • Run deepwork install to regenerate skills with updated terminology

0.3.1 - 2026-01-20

Added

  • created rule mode for matching only newly created files (#76)
    • Rules with mode: created only fire when files are first added, not on modifications
    • Useful for enforcing patterns on new files without triggering on existing file edits

Fixed

  • Fixed created mode rules incorrectly firing on modified files (#83)
  • Fixed compare_to: prompt mode not detecting files that were committed during agent response
    • Rules like uv-lock-sync now correctly fire even when changes are committed before the Stop hook runs

0.3.0 - 2026-01-18

Added

  • Cross-platform hook wrapper system for writing hooks once and running on multiple platforms
    • wrapper.py: Normalizes input/output between Claude Code and Gemini CLI
    • claude_hook.sh and gemini_hook.sh: Platform-specific shell wrappers
    • rules_check.py: Cross-platform rule evaluation hook
  • Platform documentation in doc/platforms/ with hook references and learnings
  • Claude Code platform documentation (doc/platforms/claude/)
  • update.job for maintaining standard jobs (#41)
  • make_new_job.sh script and templates directory for job scaffolding (#37)
  • Default rules template file created during deepwork install (#42)
  • Full e2e test suite: define → implement → execute workflow (#45)
  • Automated tests for all shell scripts and hook wrappers (#40)
  • Rules system v2 with frontmatter markdown format in .deepwork/rules/
    • Detection modes: trigger/safety (default), set (bidirectional), pair (directional)
    • Action types: prompt (show instructions), command (run idempotent commands)
    • Variable pattern matching with {path} (multi-segment) and {name} (single-segment)
    • Queue system in .deepwork/tmp/rules/queue/ for state tracking and deduplication
  • New core modules:
    • pattern_matcher.py: Variable pattern matching with regex-based capture
    • rules_queue.py: Queue system for rule state persistence
    • command_executor.py: Command action execution with variable substitution
  • Updated rules_check.py hook to use v2 system with queue-based deduplication

Changed

  • BREAKING: Refactored "commands" terminology to "skills" throughout the codebase
    • Directory structure changed from .claude/commands/ to .claude/skills/
    • Directory structure changed from .gemini/commands/ to .gemini/skills/
    • Class renamed: CommandGeneratorSkillGenerator
    • Enum renamed: CommandLifecycleHookSkillLifecycleHook
    • Class attributes renamed: commands_dirskills_dir, command_templateskill_template
    • Methods renamed: get_commands_dir()get_skills_dir(), generate_all_commands()generate_all_skills(), etc.
    • Template files renamed: command-job-step.md.jinjaskill-job-step.md.jinja, etc.
  • BREAKING: Removed uw. prefix convention for hidden steps
    • Step skills now use clean filenames (e.g., job_name.step_id.md instead of uw.job_name.step_id.md)
    • Hidden steps use user-invocable: false in YAML frontmatter instead
    • The exposed field in job.yml now controls the user-invocable frontmatter setting
  • CLI output messages updated to use "skills" terminology
  • Standardized on "ask structured questions" phrasing across all jobs (#48)
  • deepwork_jobs bumped to v0.5.0, deepwork_rules to v0.2.0
  • Documentation updated with v2 rules examples and configuration

Fixed

  • Stop hooks now properly return blocking JSON (#38)
  • Various CI workflow fixes (#35, #46, #47, #51, #52)
  • Command rule errors now include promise skip instructions with the exact rule name
    • Previously, failed command rules only showed "Command failed" with no guidance
    • Now each failed rule shows: To skip, include <promise>Rule Name</promise> in your response
    • This allows agents to understand how to proceed when a command rule fails

Removed

  • v1 rules format (.deepwork.rules.yml) - now only v2 frontmatter markdown format is supported

Migration Guide

  • Run deepwork install --platform claude to regenerate skills in the new location
  • Remove old .claude/commands/ and .gemini/commands/ directories manually
  • Update any custom code that imports CommandGenerator or CommandLifecycleHook

0.1.1 - 2026-01-15

Added

  • compare_to option in rules system for flexible change detection (#34)
    • base (default): Compare to merge-base with default branch
    • default_tip: Two-dot diff against default branch tip
    • prompt: Compare to state captured at prompt submission
  • New learn command replacing refine for conversation-driven job improvement (#27)
    • Analyzes conversations where DeepWork jobs were run
    • Classifies learnings as generalizable (→ instructions) or bespoke (→ AGENTS.md)
    • Creates learning_summary.md documenting all changes
  • "Think deeply" prompt in learn step for enhanced reasoning (#33)
  • Supplementary markdown file support for job steps (#19)
  • Browser automation capability consideration in job definition (#32)
  • Platform-specific reload instructions in adapters (#31)
  • Version and changelog update rule to enforce version tracking on src changes
  • Added claude and copilot to CLA allowlist (#26)

Changed

  • Moved git diff logic into evaluate_rules.py for per-rule handling (#34)
  • Renamed capture_work_tree.sh to capture_prompt_work_tree.sh (#34)
  • Updated README with PyPI install instructions using pipx, uv, and pip (#22)
  • Updated deepwork_jobs job version to 0.2.0

Fixed

  • Stop hooks now correctly return blocking JSON when rules fire
  • Added shell script tests to verify stop hook blocking behavior

Removed

  • refine step (replaced by learn command) (#27)
  • get_changed_files.sh hook (logic moved to Python rule evaluator) (#34)

0.1.0 - Initial Release

Initial version.