Skip to content

Commit 128b8f0

Browse files
committed
Bump version
1 parent 240ec33 commit 128b8f0

11 files changed

Lines changed: 209 additions & 139 deletions

File tree

CHANGELOG.md

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
1+
## v0.0.156 (2026-02-21)
2+
3+
### Feat
4+
5+
- Add new API routes for annotations, job details, and job retry, with corresponding examples and integration tests.
6+
- Implement core video editor pipeline APIs, scripts, tests, and examples for project, audio, TTS, and rendering functionalities.
7+
- Implement pagination for `RemoteSessionManager.list_sessions` a… (#492)
8+
9+
### Fix
10+
11+
- Correct log line processing in streaming routes by excluding trailing empty strings and include 'logs' in job schema tests.
12+
113
## v0.0.155 (2026-02-20)
214

315
### Feat
416

5-
- Add initial video editor project scaffolding with prompts, Dockerfile, and configuration, and update CI test durations.
6-
- initialize video editor project with core files, prompts, documentation, and CI configuration.
7-
- Add support for generating a video editor application with its architecture, prompts, and initial structure.
8-
- replace placeholder script with a detailed 'Prompt-Driven Development' video script for the narrative demo.
9-
- Introduce `pdd checkup` command, update models, refactor `.pddrc` strategy detection, migrate package tests to Cloud Build, and update grounding experiment documentation.
10-
- Dry-run validation with per-module cwd for agentic sync (#489)
17+
- **Dry-run validation with per-module cwd in agentic sync** — Before dispatching parallel `pdd sync` workers, `run_agentic_sync` now runs a dry-run validation phase for every module. `_resolve_module_cwd()` discovers the correct working directory by scanning `.pddrc` files at the project root and up to two levels of subdirectories; the deepest matching context wins. `_run_single_dry_run()` executes `pdd sync <basename> --dry-run --agentic --no-steer` from the resolved cwd. If the dry-run fails, `_llm_fix_dry_run_failure()` builds a project-tree snapshot and `.pddrc` location list, invokes the LLM via a new `agentic_sync_fix_dry_run_LLM.prompt`, extracts the `SYNC_CWD:` marker from the response, validates the suggested path is inside the project root, and re-runs the dry-run to confirm. The resulting `module_cwds` dict is passed to `AsyncSyncRunner`, which now uses a per-module cwd instead of always running from the project root.
18+
- **Subproject directory support in agentic architecture**`pdd generate --agentic` and the underlying orchestrator now accept a `--output-dir` / `target_dir` option to scope a new project to a subdirectory. `_extract_target_dir()` auto-parses the target directory from the GitHub issue body using tight patterns (backtick/double-quote wrapped, or unquoted paths containing `_` or `/` to avoid false matches on natural English). The orchestrator derives `base_dir = cwd / target_dir` and creates it if needed; all `architecture.json` reads/writes and scaffolding file creation are redirected to `base_dir`. Step 6 gains an MD5 hash check before and after execution — if the file content is unchanged the step is marked failed immediately, preventing silent no-ops where the agent reformats the existing file instead of creating a new architecture. The `agentic_arch_step6_generate_LLM.prompt` now includes explicit `target_dir` instructions.
1119

1220
### Fix
1321

14-
- improve e2e test resilience by skipping on LLM generation failures or empty responses.
22+
- **E2E test resilience**`test_e2e_issue_342_syspath_isolation` now skips (instead of failing) when the LLM returns an empty response or a generation failure, making CI stable in environments without an API key.
1523

1624
## v0.0.154 (2026-02-19)
1725

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# PDD (Prompt-Driven Development) Command Line Interface
22

3-
![PDD-CLI Version](https://img.shields.io/badge/pdd--cli-v0.0.155-blue) [![Discord](https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white)](https://discord.gg/Yp4RTh8bG7)
3+
![PDD-CLI Version](https://img.shields.io/badge/pdd--cli-v0.0.156-blue) [![Discord](https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white)](https://discord.gg/Yp4RTh8bG7)
44

55
## Introduction
66

@@ -352,7 +352,7 @@ For proper model identifiers to use in your custom configuration, refer to the [
352352

353353
## Version
354354

355-
Current version: 0.0.155
355+
Current version: 0.0.156
356356

357357
To check your installed version, run:
358358
```

docs/prompting_guide.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,10 @@ Tip: Prefer small, named sections using XML‑style tags to make context scannab
195195

196196
The PDD preprocessor supports additional XML‑style tags to keep prompts clean, reproducible, and self‑contained. Processing order (per spec) is: `pdd` → `include`/`include-many` → `shell` → `web`. When `recursive=True`, `<shell>` and `<web>` are deferred until a non‑recursive pass.
197197

198-
- `<pdd>…</pdd>`
198+
- ``
199199
- Purpose: human‑only comment. Removed entirely during preprocessing.
200200
- Use: inline rationale or notes that should not reach the model.
201-
- Example: `Before step X <pdd>explain why we do this here</pdd>`
201+
- Example: `Before step X `
202202

203203
- `<shell>…</shell>`
204204
- Purpose: run a shell command and inline stdout at that position.
@@ -259,7 +259,7 @@ Place architecture metadata tags at the **top of your prompt file** (after any `
259259
"type": "module",
260260
"module": {{
261261
"functions": [
262-
{{"name": "function_name", "signature": "(...)", "returns": "Type"}}
262+
{"name": "function_name", "signature": "(...)", "returns": "Type"}
263263
]
264264
}}
265265
}}
@@ -288,7 +288,7 @@ Place architecture metadata tags at the **top of your prompt file** (after any `
288288
"type": "module",
289289
"module": {{
290290
"functions": [
291-
{{"name": "llm_invoke", "signature": "(prompt, strength, ...)", "returns": "Dict"}}
291+
{"name": "llm_invoke", "signature": "(prompt, strength, ...)", "returns": "Dict"}
292292
]
293293
}}
294294
}}
@@ -906,4 +906,4 @@ Key differences:
906906

907907
## Final Notes
908908

909-
Think of prompts as your programming language. Keep them concise, explicit, and modular. Regenerate instead of patching, verify behavior with accumulating tests, and continuously back‑propagate implementation learnings into your prompts. That discipline is what converts maintenance from an endless patchwork into a compounding system of leverage.
909+
Think of prompts as your programming language. Keep them concise, explicit, and modular. Regenerate instead of patching, verify behavior with accumulating tests, and continuously back‑propagate implementation learnings into your prompts. That discipline is what converts maintenance from an endless patchwork into a compounding system of leverage.

examples/hello/repo_root

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Subproject commit 1d2a807b4cb44896484f5f1ff78255b8108b7398
1+
Subproject commit 315330d11167fa3a9370d39286f871913b25e51a

pdd/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import os
44

5-
__version__ = "0.0.155"
5+
__version__ = "0.0.156"
66

77
# Strength parameter used for LLM extraction across the codebase
88
# Used in postprocessing, XML tagging, code generation, and other extraction

pdd/commands/modify.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,19 @@ def update(
213213
Single-file mode (1 arg): Update prompt for specific code file.
214214
"""
215215
ctx.ensure_object(dict)
216+
217+
# Validate argument counts before try/except so UsageError propagates naturally
218+
if len(files) == 2 and not git:
219+
raise click.UsageError(
220+
"Two arguments require --git flag: pdd update --git <prompt> <modified_code>"
221+
)
222+
if len(files) == 3 and git:
223+
raise click.UsageError(
224+
"Cannot use --git with 3 arguments (--git and original_code are mutually exclusive)"
225+
)
226+
if len(files) > 3:
227+
raise click.UsageError("Too many arguments. Max 3: <prompt> <modified_code> <original_code>")
228+
216229
try:
217230
# Handle argument counts per modify_python.prompt spec (aligned with README)
218231
if len(files) == 0:
@@ -228,27 +241,17 @@ def update(
228241
modified_code_file = files[0]
229242
input_code_file = None
230243
elif len(files) == 2:
231-
# Git-based update: prompt + modified_code (requires --git)
232-
if not git:
233-
raise click.UsageError(
234-
"Two arguments require --git flag: pdd update --git <prompt> <modified_code>"
235-
)
244+
# Git-based update: prompt + modified_code (--git guaranteed by pre-validation)
236245
is_repo_mode = False
237246
input_prompt_file = files[0]
238247
modified_code_file = files[1]
239248
input_code_file = None
240249
elif len(files) == 3:
241-
# Manual update: prompt + modified_code + original_code
242-
if git:
243-
raise click.UsageError(
244-
"Cannot use --git with 3 arguments (--git and original_code are mutually exclusive)"
245-
)
250+
# Manual update: prompt + modified_code + original_code (no --git guaranteed)
246251
is_repo_mode = False
247252
input_prompt_file = files[0]
248253
modified_code_file = files[1]
249254
input_code_file = files[2]
250-
else:
251-
raise click.UsageError("Too many arguments. Max 3: <prompt> <modified_code> <original_code>")
252255

253256
# Validate mode-specific options
254257
if is_repo_mode:
@@ -288,7 +291,7 @@ def update(
288291

289292
return result, cost, model
290293

291-
except click.Abort:
294+
except (click.Abort, click.UsageError):
292295
raise
293296
except Exception as e:
294297
handle_error(e, "update", ctx.obj.get("quiet", False))

pdd/core/cli.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ def invoke(self, ctx):
108108
# User cancelled (e.g., pressed 'no' on confirmation) - set flag
109109
# to exit silently without triggering error reporting
110110
user_abort = True
111+
except click.UsageError:
112+
raise # Let Click handle it natively via BaseCommand.main() → echo()
111113
except KeyboardInterrupt as e:
112114
# Handle keyboard interrupt (Ctrl+C) gracefully
113115
exception_to_handle = e

0 commit comments

Comments
 (0)