blitz-cli 0.10.0__tar.gz → 0.12.0__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.
- blitz_cli-0.12.0/.blitz/memory/playbook.md +87 -0
- {blitz_cli-0.10.0/blitz_cli/playbooks/scaffold → blitz_cli-0.12.0}/.blitz/scripts/bash/check-prerequisites.sh +0 -0
- {blitz_cli-0.10.0/blitz_cli/playbooks/scaffold → blitz_cli-0.12.0}/.blitz/scripts/bash/common.sh +0 -0
- {blitz_cli-0.10.0/blitz_cli/playbooks/scaffold → blitz_cli-0.12.0}/.blitz/scripts/bash/create-new-feature.sh +0 -0
- {blitz_cli-0.10.0/blitz_cli/playbooks/scaffold → blitz_cli-0.12.0}/.blitz/scripts/bash/setup-plan.sh +0 -0
- {blitz_cli-0.10.0/blitz_cli/playbooks/scaffold → blitz_cli-0.12.0}/.blitz/scripts/bash/setup-tasks.sh +0 -0
- blitz_cli-0.12.0/.blitz/templates/plan-template.md +113 -0
- blitz_cli-0.12.0/.blitz/templates/tasks-template.md +252 -0
- blitz_cli-0.12.0/.gitignore +23 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/PKG-INFO +13 -9
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/README.md +12 -8
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/__init__.py +1 -1
- blitz_cli-0.10.0/blitz_cli/_implement.py → blitz_cli-0.12.0/blitz_cli/_execute.py +5 -5
- blitz_cli-0.12.0/blitz_cli/_gitignore.py +149 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_ontology.py +4 -4
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/cli.py +124 -22
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/commands/implement.md +3 -3
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/commands/tasks.md +2 -2
- blitz_cli-0.12.0/blitz_cli/playbooks/scaffold/.blitz/scripts/bash/check-prerequisites.sh +195 -0
- blitz_cli-0.12.0/blitz_cli/playbooks/scaffold/.blitz/scripts/bash/common.sh +692 -0
- blitz_cli-0.12.0/blitz_cli/playbooks/scaffold/.blitz/scripts/bash/create-new-feature.sh +301 -0
- blitz_cli-0.12.0/blitz_cli/playbooks/scaffold/.blitz/scripts/bash/setup-plan.sh +83 -0
- blitz_cli-0.12.0/blitz_cli/playbooks/scaffold/.blitz/scripts/bash/setup-tasks.sh +91 -0
- blitz_cli-0.12.0/blitz_cli/playbooks/scaffold/.blitz/templates/spec-template.md +131 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/templates/workspace_playbook.md.tmpl +1 -1
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/pyproject.toml +1 -1
- blitz_cli-0.12.0/specs/001-cli-model-namespace/checklists/requirements.md +34 -0
- blitz_cli-0.12.0/specs/001-cli-model-namespace/contracts/cli-commands.md +47 -0
- blitz_cli-0.12.0/specs/001-cli-model-namespace/plan.md +73 -0
- blitz_cli-0.12.0/specs/001-cli-model-namespace/quickstart.md +37 -0
- blitz_cli-0.12.0/specs/001-cli-model-namespace/research.md +34 -0
- blitz_cli-0.12.0/specs/001-cli-model-namespace/spec.md +69 -0
- blitz_cli-0.12.0/specs/001-cli-model-namespace/tasks.md +83 -0
- blitz_cli-0.12.0/specs/002-label-experimental-surfaces/checklists/requirements.md +36 -0
- blitz_cli-0.12.0/specs/002-label-experimental-surfaces/contracts/experimental-labels.md +104 -0
- blitz_cli-0.12.0/specs/002-label-experimental-surfaces/data-model.md +79 -0
- blitz_cli-0.12.0/specs/002-label-experimental-surfaces/plan.md +121 -0
- blitz_cli-0.12.0/specs/002-label-experimental-surfaces/quickstart.md +97 -0
- blitz_cli-0.12.0/specs/002-label-experimental-surfaces/research.md +56 -0
- blitz_cli-0.12.0/specs/002-label-experimental-surfaces/spec.md +117 -0
- blitz_cli-0.12.0/specs/002-label-experimental-surfaces/tasks.md +599 -0
- blitz_cli-0.12.0/specs/003-init-gitignore-rules/checklists/requirements.md +46 -0
- blitz_cli-0.12.0/specs/003-init-gitignore-rules/contracts/cli-output.md +77 -0
- blitz_cli-0.12.0/specs/003-init-gitignore-rules/contracts/ensure-rules.md +80 -0
- blitz_cli-0.12.0/specs/003-init-gitignore-rules/contracts/gitignore-block.md +112 -0
- blitz_cli-0.12.0/specs/003-init-gitignore-rules/data-model.md +126 -0
- blitz_cli-0.12.0/specs/003-init-gitignore-rules/plan.md +121 -0
- blitz_cli-0.12.0/specs/003-init-gitignore-rules/quickstart.md +188 -0
- blitz_cli-0.12.0/specs/003-init-gitignore-rules/research.md +190 -0
- blitz_cli-0.12.0/specs/003-init-gitignore-rules/spec.md +171 -0
- blitz_cli-0.12.0/specs/003-init-gitignore-rules/tasks.md +253 -0
- blitz_cli-0.12.0/tests/test_cli.py +199 -0
- blitz_cli-0.10.0/tests/test_implement.py → blitz_cli-0.12.0/tests/test_execute.py +27 -27
- blitz_cli-0.12.0/tests/test_gitignore.py +413 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/tests/test_ontology.py +2 -2
- blitz_cli-0.10.0/.gitignore +0 -11
- blitz_cli-0.10.0/tests/test_cli.py +0 -52
- {blitz_cli-0.10.0/blitz_cli/playbooks/scaffold → blitz_cli-0.12.0}/.blitz/templates/spec-template.md +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/.github/workflows/homebrew.yml +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/.github/workflows/publish.yml +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/.mcp.json +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/LICENSE +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_activity.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_code_graph.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_corpus.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_dataset.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_git.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_make.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_playbooks.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_redact.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_scaffold.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_tool_schemas.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/_train.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/__init__.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/commands/__init__.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/commands/analyze.md +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/commands/clarify.md +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/commands/plan.md +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/commands/playbook.md +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/commands/specify.md +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/scaffold/.blitz/memory/playbook.md +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/scaffold/.blitz/templates/plan-template.md +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/scaffold/.blitz/templates/tasks-template.md +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/workspace/__init__.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/playbooks/workspace/huddle.md +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/templates/__init__.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/templates/locker_room_Makefile.tmpl +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/templates/locker_room_README.md.tmpl +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/blitz_cli/templates/locker_room_compose.yml.tmpl +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/tests/test_activity.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/tests/test_corpus.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/tests/test_make.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/tests/test_playbooks.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/tests/test_redact.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/tests/test_scaffold.py +0 -0
- {blitz_cli-0.10.0 → blitz_cli-0.12.0}/tests/test_tool_schemas.py +0 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# blitz-cli Playbook
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
Sync Impact Report
|
|
5
|
+
- Version change: (template, unversioned) → 1.0.0
|
|
6
|
+
- Rationale (1.0.0): first governing version. This file was the unfilled upstream
|
|
7
|
+
template, so every Playbook Check against it passed vacuously — including the one
|
|
8
|
+
that should have caught a Claude Code attribution footer on a PR body.
|
|
9
|
+
- Scope: adopts the Conventions of the authoritative Blitz constitution
|
|
10
|
+
(`blitz/.blitz/memory/playbook.md` v1.2.0) verbatim. The five Core Principles of
|
|
11
|
+
that constitution are product-specific (boundary integrity, aiosql patterns, auth
|
|
12
|
+
coverage) and are deliberately NOT copied here — blitz-cli is a stdlib-plus-rich
|
|
13
|
+
CLI with no service boundaries or auth surface. Repo-specific principles are left
|
|
14
|
+
to be ratified when there is real evidence for them rather than invented to fill
|
|
15
|
+
template slots.
|
|
16
|
+
- Templates: `.blitz/templates/plan-template.md` ✅ compatible (Playbook Check reads
|
|
17
|
+
this file at runtime; no hardcoded principles to edit).
|
|
18
|
+
-->
|
|
19
|
+
|
|
20
|
+
## Scope
|
|
21
|
+
|
|
22
|
+
Repo playbook for `blitz-cli`. The authoritative source for shared conventions is
|
|
23
|
+
the Blitz constitution at `blitz/.blitz/memory/playbook.md`; the workspace playbook
|
|
24
|
+
at `.blitz/memory/playbook.md` restates them for cross-repo work. This repo MAY
|
|
25
|
+
tighten these rules but MUST NOT loosen them.
|
|
26
|
+
|
|
27
|
+
## Conventions
|
|
28
|
+
|
|
29
|
+
- **Commit hygiene:** commit messages MUST follow Conventional Commits
|
|
30
|
+
(`type(scope): summary`, e.g. `feat:`, `fix:`, `docs:`, `refactor:`, `chore:`; `!`
|
|
31
|
+
or a `BREAKING CHANGE:` footer marks a breaking change). Commit messages and PR
|
|
32
|
+
bodies MUST NOT carry a `Co-Authored-By` trailer or a Claude Code attribution
|
|
33
|
+
footer. This is about tool attribution, not one specific string: any
|
|
34
|
+
auto-generated "made with / generated by" footer is covered, whatever its
|
|
35
|
+
wording.
|
|
36
|
+
- **User-facing copy: no em dashes** (help strings, README prose, CLI output);
|
|
37
|
+
rewrite with periods or commas. Does not apply to code comments.
|
|
38
|
+
- **Docs describe present behavior, not change history**: no "renamed from", "used
|
|
39
|
+
to", "now supports", "previously". Change rationale belongs in the commit or PR;
|
|
40
|
+
design-rationale comments explaining why current code is shaped a certain way are
|
|
41
|
+
fine.
|
|
42
|
+
- **Anthropic is the mandated model provider** for new AI features.
|
|
43
|
+
|
|
44
|
+
## Executor Routing (NON-NEGOTIABLE)
|
|
45
|
+
|
|
46
|
+
Evidence-based, from two failed `blitz model execute` runs on 2026-07-15:
|
|
47
|
+
|
|
48
|
+
- **A task is `[L]`-eligible only if its success criterion is "the file contains
|
|
49
|
+
this verbatim content".** Any task whose criterion is "a check passes" MUST NOT be
|
|
50
|
+
marked `[L]`: a retry can satisfy it by changing something other than the thing
|
|
51
|
+
under test. One such retry made a failing scope check pass by running
|
|
52
|
+
`git checkout -- .`, reverting the run's own work.
|
|
53
|
+
- **Exit 0 is not evidence of success.** Any local run MUST be verified against
|
|
54
|
+
`git diff` (expected files, plausible line delta, nothing out of scope) before its
|
|
55
|
+
result is believed. Both observed failure modes exited 0, and one of them also
|
|
56
|
+
passed a content grep while destroying the surrounding file.
|
|
57
|
+
- **`[L]` on edits to existing files is unproven.** The local model has regenerated
|
|
58
|
+
a whole file from scratch when asked to replace one anchored line. Prefer the
|
|
59
|
+
frontier agent for edits; a failed local task MUST stop the run for a human
|
|
60
|
+
decision rather than be silently taken over.
|
|
61
|
+
- **Executors MUST NOT run** `git checkout`, `git reset`, `git clean`, `git stash`,
|
|
62
|
+
or `git pull`. A task that cannot proceed fails loudly and leaves the tree as it
|
|
63
|
+
found it.
|
|
64
|
+
|
|
65
|
+
## Quality Gates
|
|
66
|
+
|
|
67
|
+
- The test suite MUST pass before merge, and changes SHOULD be additive: a
|
|
68
|
+
pre-existing test that needs editing to accommodate a change is a signal the
|
|
69
|
+
change stopped being additive. Fix the code, not the test. Amending a test is
|
|
70
|
+
justified only when the test itself is provably wrong, and the justification
|
|
71
|
+
belongs in the PR.
|
|
72
|
+
- Behavior-preserving changes (labeling, docs, refactors) SHOULD be verified against
|
|
73
|
+
a baseline captured before the change, not merely asserted.
|
|
74
|
+
|
|
75
|
+
## Governance
|
|
76
|
+
|
|
77
|
+
This playbook supersedes ad-hoc practice for this repo. Amendments MUST be made by
|
|
78
|
+
editing this file with a Sync Impact Report and a semantic version bump:
|
|
79
|
+
|
|
80
|
+
- **MAJOR** — backward-incompatible governance or principle removal/redefinition.
|
|
81
|
+
- **MINOR** — a new principle/section or materially expanded guidance.
|
|
82
|
+
- **PATCH** — clarifications, wording, and non-semantic refinements.
|
|
83
|
+
|
|
84
|
+
Shared conventions MUST stay in sync with the authoritative constitution; if it and
|
|
85
|
+
this file disagree, the authoritative constitution wins and this file is the bug.
|
|
86
|
+
|
|
87
|
+
**Version**: 1.0.0 | **Ratified**: 2026-07-15 | **Last Amended**: 2026-07-15
|
|
File without changes
|
{blitz_cli-0.10.0/blitz_cli/playbooks/scaffold → blitz_cli-0.12.0}/.blitz/scripts/bash/common.sh
RENAMED
|
File without changes
|
|
File without changes
|
{blitz_cli-0.10.0/blitz_cli/playbooks/scaffold → blitz_cli-0.12.0}/.blitz/scripts/bash/setup-plan.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Implementation Plan: [FEATURE]
|
|
2
|
+
|
|
3
|
+
**Branch**: `[###-feature-name]` | **Date**: [DATE] | **Spec**: [link]
|
|
4
|
+
|
|
5
|
+
**Input**: Feature specification from `/specs/[###-feature-name]/spec.md`
|
|
6
|
+
|
|
7
|
+
**Note**: This template is filled in by the `/plan` command; its definition describes the execution workflow.
|
|
8
|
+
|
|
9
|
+
## Summary
|
|
10
|
+
|
|
11
|
+
[Extract from feature spec: primary requirement + technical approach from research]
|
|
12
|
+
|
|
13
|
+
## Technical Context
|
|
14
|
+
|
|
15
|
+
<!--
|
|
16
|
+
ACTION REQUIRED: Replace the content in this section with the technical details
|
|
17
|
+
for the project. The structure here is presented in advisory capacity to guide
|
|
18
|
+
the iteration process.
|
|
19
|
+
-->
|
|
20
|
+
|
|
21
|
+
**Language/Version**: [e.g., Python 3.11, Swift 5.9, Rust 1.75 or NEEDS CLARIFICATION]
|
|
22
|
+
|
|
23
|
+
**Primary Dependencies**: [e.g., FastAPI, UIKit, LLVM or NEEDS CLARIFICATION]
|
|
24
|
+
|
|
25
|
+
**Storage**: [if applicable, e.g., PostgreSQL, CoreData, files or N/A]
|
|
26
|
+
|
|
27
|
+
**Testing**: [e.g., pytest, XCTest, cargo test or NEEDS CLARIFICATION]
|
|
28
|
+
|
|
29
|
+
**Target Platform**: [e.g., Linux server, iOS 15+, WASM or NEEDS CLARIFICATION]
|
|
30
|
+
|
|
31
|
+
**Project Type**: [e.g., library/cli/web-service/mobile-app/compiler/desktop-app or NEEDS CLARIFICATION]
|
|
32
|
+
|
|
33
|
+
**Performance Goals**: [domain-specific, e.g., 1000 req/s, 10k lines/sec, 60 fps or NEEDS CLARIFICATION]
|
|
34
|
+
|
|
35
|
+
**Constraints**: [domain-specific, e.g., <200ms p95, <100MB memory, offline-capable or NEEDS CLARIFICATION]
|
|
36
|
+
|
|
37
|
+
**Scale/Scope**: [domain-specific, e.g., 10k users, 1M LOC, 50 screens or NEEDS CLARIFICATION]
|
|
38
|
+
|
|
39
|
+
## Playbook Check
|
|
40
|
+
|
|
41
|
+
*GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.*
|
|
42
|
+
|
|
43
|
+
[Gates determined based on playbook file]
|
|
44
|
+
|
|
45
|
+
## Project Structure
|
|
46
|
+
|
|
47
|
+
### Documentation (this feature)
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
specs/[###-feature]/
|
|
51
|
+
├── plan.md # This file (/plan command output)
|
|
52
|
+
├── research.md # Phase 0 output (/plan command)
|
|
53
|
+
├── data-model.md # Phase 1 output (/plan command)
|
|
54
|
+
├── quickstart.md # Phase 1 output (/plan command)
|
|
55
|
+
├── contracts/ # Phase 1 output (/plan command)
|
|
56
|
+
└── tasks.md # Phase 2 output (/tasks command - NOT created by /plan)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Source Code (repository root)
|
|
60
|
+
<!--
|
|
61
|
+
ACTION REQUIRED: Replace the placeholder tree below with the concrete layout
|
|
62
|
+
for this feature. Delete unused options and expand the chosen structure with
|
|
63
|
+
real paths (e.g., apps/admin, packages/something). The delivered plan must
|
|
64
|
+
not include Option labels.
|
|
65
|
+
-->
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
# [REMOVE IF UNUSED] Option 1: Single project (DEFAULT)
|
|
69
|
+
src/
|
|
70
|
+
├── models/
|
|
71
|
+
├── services/
|
|
72
|
+
├── cli/
|
|
73
|
+
└── lib/
|
|
74
|
+
|
|
75
|
+
tests/
|
|
76
|
+
├── contract/
|
|
77
|
+
├── integration/
|
|
78
|
+
└── unit/
|
|
79
|
+
|
|
80
|
+
# [REMOVE IF UNUSED] Option 2: Web application (when "frontend" + "backend" detected)
|
|
81
|
+
backend/
|
|
82
|
+
├── src/
|
|
83
|
+
│ ├── models/
|
|
84
|
+
│ ├── services/
|
|
85
|
+
│ └── api/
|
|
86
|
+
└── tests/
|
|
87
|
+
|
|
88
|
+
frontend/
|
|
89
|
+
├── src/
|
|
90
|
+
│ ├── components/
|
|
91
|
+
│ ├── pages/
|
|
92
|
+
│ └── services/
|
|
93
|
+
└── tests/
|
|
94
|
+
|
|
95
|
+
# [REMOVE IF UNUSED] Option 3: Mobile + API (when "iOS/Android" detected)
|
|
96
|
+
api/
|
|
97
|
+
└── [same as backend above]
|
|
98
|
+
|
|
99
|
+
ios/ or android/
|
|
100
|
+
└── [platform-specific structure: feature modules, UI flows, platform tests]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Structure Decision**: [Document the selected structure and reference the real
|
|
104
|
+
directories captured above]
|
|
105
|
+
|
|
106
|
+
## Complexity Tracking
|
|
107
|
+
|
|
108
|
+
> **Fill ONLY if Playbook Check has violations that must be justified**
|
|
109
|
+
|
|
110
|
+
| Violation | Why Needed | Simpler Alternative Rejected Because |
|
|
111
|
+
|-----------|------------|-------------------------------------|
|
|
112
|
+
| [e.g., 4th project] | [current need] | [why 3 projects insufficient] |
|
|
113
|
+
| [e.g., Repository pattern] | [specific problem] | [why direct DB access insufficient] |
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
description: "Task list template for feature implementation"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Tasks: [FEATURE NAME]
|
|
7
|
+
|
|
8
|
+
**Input**: Design documents from `/specs/[###-feature-name]/`
|
|
9
|
+
|
|
10
|
+
**Prerequisites**: plan.md (required), spec.md (required for user stories), research.md, data-model.md, contracts/
|
|
11
|
+
|
|
12
|
+
**Tests**: The examples below include test tasks. Tests are OPTIONAL - only include them if explicitly requested in the feature specification.
|
|
13
|
+
|
|
14
|
+
**Organization**: Tasks are grouped by user story to enable independent implementation and testing of each story.
|
|
15
|
+
|
|
16
|
+
## Format: `[ID] [P?] [Story] Description`
|
|
17
|
+
|
|
18
|
+
- **[P]**: Can run in parallel (different files, no dependencies)
|
|
19
|
+
- **[Story]**: Which user story this task belongs to (e.g., US1, US2, US3)
|
|
20
|
+
- Include exact file paths in descriptions
|
|
21
|
+
|
|
22
|
+
## Path Conventions
|
|
23
|
+
|
|
24
|
+
- **Single project**: `src/`, `tests/` at repository root
|
|
25
|
+
- **Web app**: `backend/src/`, `frontend/src/`
|
|
26
|
+
- **Mobile**: `api/src/`, `ios/src/` or `android/src/`
|
|
27
|
+
- Paths shown below assume single project - adjust based on plan.md structure
|
|
28
|
+
|
|
29
|
+
<!--
|
|
30
|
+
============================================================================
|
|
31
|
+
IMPORTANT: The tasks below are SAMPLE TASKS for illustration purposes only.
|
|
32
|
+
|
|
33
|
+
The /tasks command MUST replace these with actual tasks based on:
|
|
34
|
+
- User stories from spec.md (with their priorities P1, P2, P3...)
|
|
35
|
+
- Feature requirements from plan.md
|
|
36
|
+
- Entities from data-model.md
|
|
37
|
+
- Endpoints from contracts/
|
|
38
|
+
|
|
39
|
+
Tasks MUST be organized by user story so each story can be:
|
|
40
|
+
- Implemented independently
|
|
41
|
+
- Tested independently
|
|
42
|
+
- Delivered as an MVP increment
|
|
43
|
+
|
|
44
|
+
DO NOT keep these sample tasks in the generated tasks.md file.
|
|
45
|
+
============================================================================
|
|
46
|
+
-->
|
|
47
|
+
|
|
48
|
+
## Phase 1: Setup (Shared Infrastructure)
|
|
49
|
+
|
|
50
|
+
**Purpose**: Project initialization and basic structure
|
|
51
|
+
|
|
52
|
+
- [ ] T001 Create project structure per implementation plan
|
|
53
|
+
- [ ] T002 Initialize [language] project with [framework] dependencies
|
|
54
|
+
- [ ] T003 [P] Configure linting and formatting tools
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Phase 2: Foundational (Blocking Prerequisites)
|
|
59
|
+
|
|
60
|
+
**Purpose**: Core infrastructure that MUST be complete before ANY user story can be implemented
|
|
61
|
+
|
|
62
|
+
**⚠️ CRITICAL**: No user story work can begin until this phase is complete
|
|
63
|
+
|
|
64
|
+
Examples of foundational tasks (adjust based on your project):
|
|
65
|
+
|
|
66
|
+
- [ ] T004 Setup database schema and migrations framework
|
|
67
|
+
- [ ] T005 [P] Implement authentication/authorization framework
|
|
68
|
+
- [ ] T006 [P] Setup API routing and middleware structure
|
|
69
|
+
- [ ] T007 Create base models/entities that all stories depend on
|
|
70
|
+
- [ ] T008 Configure error handling and logging infrastructure
|
|
71
|
+
- [ ] T009 Setup environment configuration management
|
|
72
|
+
|
|
73
|
+
**Checkpoint**: Foundation ready - user story implementation can now begin in parallel
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Phase 3: User Story 1 - [Title] (Priority: P1) 🎯 MVP
|
|
78
|
+
|
|
79
|
+
**Goal**: [Brief description of what this story delivers]
|
|
80
|
+
|
|
81
|
+
**Independent Test**: [How to verify this story works on its own]
|
|
82
|
+
|
|
83
|
+
### Tests for User Story 1 (OPTIONAL - only if tests requested) ⚠️
|
|
84
|
+
|
|
85
|
+
> **NOTE: Write these tests FIRST, ensure they FAIL before implementation**
|
|
86
|
+
|
|
87
|
+
- [ ] T010 [P] [US1] Contract test for [endpoint] in tests/contract/test_[name].py
|
|
88
|
+
- [ ] T011 [P] [US1] Integration test for [user journey] in tests/integration/test_[name].py
|
|
89
|
+
|
|
90
|
+
### Implementation for User Story 1
|
|
91
|
+
|
|
92
|
+
- [ ] T012 [P] [US1] Create [Entity1] model in src/models/[entity1].py
|
|
93
|
+
- [ ] T013 [P] [US1] Create [Entity2] model in src/models/[entity2].py
|
|
94
|
+
- [ ] T014 [US1] Implement [Service] in src/services/[service].py (depends on T012, T013)
|
|
95
|
+
- [ ] T015 [US1] Implement [endpoint/feature] in src/[location]/[file].py
|
|
96
|
+
- [ ] T016 [US1] Add validation and error handling
|
|
97
|
+
- [ ] T017 [US1] Add logging for user story 1 operations
|
|
98
|
+
|
|
99
|
+
**Checkpoint**: At this point, User Story 1 should be fully functional and testable independently
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Phase 4: User Story 2 - [Title] (Priority: P2)
|
|
104
|
+
|
|
105
|
+
**Goal**: [Brief description of what this story delivers]
|
|
106
|
+
|
|
107
|
+
**Independent Test**: [How to verify this story works on its own]
|
|
108
|
+
|
|
109
|
+
### Tests for User Story 2 (OPTIONAL - only if tests requested) ⚠️
|
|
110
|
+
|
|
111
|
+
- [ ] T018 [P] [US2] Contract test for [endpoint] in tests/contract/test_[name].py
|
|
112
|
+
- [ ] T019 [P] [US2] Integration test for [user journey] in tests/integration/test_[name].py
|
|
113
|
+
|
|
114
|
+
### Implementation for User Story 2
|
|
115
|
+
|
|
116
|
+
- [ ] T020 [P] [US2] Create [Entity] model in src/models/[entity].py
|
|
117
|
+
- [ ] T021 [US2] Implement [Service] in src/services/[service].py
|
|
118
|
+
- [ ] T022 [US2] Implement [endpoint/feature] in src/[location]/[file].py
|
|
119
|
+
- [ ] T023 [US2] Integrate with User Story 1 components (if needed)
|
|
120
|
+
|
|
121
|
+
**Checkpoint**: At this point, User Stories 1 AND 2 should both work independently
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Phase 5: User Story 3 - [Title] (Priority: P3)
|
|
126
|
+
|
|
127
|
+
**Goal**: [Brief description of what this story delivers]
|
|
128
|
+
|
|
129
|
+
**Independent Test**: [How to verify this story works on its own]
|
|
130
|
+
|
|
131
|
+
### Tests for User Story 3 (OPTIONAL - only if tests requested) ⚠️
|
|
132
|
+
|
|
133
|
+
- [ ] T024 [P] [US3] Contract test for [endpoint] in tests/contract/test_[name].py
|
|
134
|
+
- [ ] T025 [P] [US3] Integration test for [user journey] in tests/integration/test_[name].py
|
|
135
|
+
|
|
136
|
+
### Implementation for User Story 3
|
|
137
|
+
|
|
138
|
+
- [ ] T026 [P] [US3] Create [Entity] model in src/models/[entity].py
|
|
139
|
+
- [ ] T027 [US3] Implement [Service] in src/services/[service].py
|
|
140
|
+
- [ ] T028 [US3] Implement [endpoint/feature] in src/[location]/[file].py
|
|
141
|
+
|
|
142
|
+
**Checkpoint**: All user stories should now be independently functional
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
[Add more user story phases as needed, following the same pattern]
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Phase N: Polish & Cross-Cutting Concerns
|
|
151
|
+
|
|
152
|
+
**Purpose**: Improvements that affect multiple user stories
|
|
153
|
+
|
|
154
|
+
- [ ] TXXX [P] Documentation updates in docs/
|
|
155
|
+
- [ ] TXXX Code cleanup and refactoring
|
|
156
|
+
- [ ] TXXX Performance optimization across all stories
|
|
157
|
+
- [ ] TXXX [P] Additional unit tests (if requested) in tests/unit/
|
|
158
|
+
- [ ] TXXX Security hardening
|
|
159
|
+
- [ ] TXXX Run quickstart.md validation
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Dependencies & Execution Order
|
|
164
|
+
|
|
165
|
+
### Phase Dependencies
|
|
166
|
+
|
|
167
|
+
- **Setup (Phase 1)**: No dependencies - can start immediately
|
|
168
|
+
- **Foundational (Phase 2)**: Depends on Setup completion - BLOCKS all user stories
|
|
169
|
+
- **User Stories (Phase 3+)**: All depend on Foundational phase completion
|
|
170
|
+
- User stories can then proceed in parallel (if staffed)
|
|
171
|
+
- Or sequentially in priority order (P1 → P2 → P3)
|
|
172
|
+
- **Polish (Final Phase)**: Depends on all desired user stories being complete
|
|
173
|
+
|
|
174
|
+
### User Story Dependencies
|
|
175
|
+
|
|
176
|
+
- **User Story 1 (P1)**: Can start after Foundational (Phase 2) - No dependencies on other stories
|
|
177
|
+
- **User Story 2 (P2)**: Can start after Foundational (Phase 2) - May integrate with US1 but should be independently testable
|
|
178
|
+
- **User Story 3 (P3)**: Can start after Foundational (Phase 2) - May integrate with US1/US2 but should be independently testable
|
|
179
|
+
|
|
180
|
+
### Within Each User Story
|
|
181
|
+
|
|
182
|
+
- Tests (if included) MUST be written and FAIL before implementation
|
|
183
|
+
- Models before services
|
|
184
|
+
- Services before endpoints
|
|
185
|
+
- Core implementation before integration
|
|
186
|
+
- Story complete before moving to next priority
|
|
187
|
+
|
|
188
|
+
### Parallel Opportunities
|
|
189
|
+
|
|
190
|
+
- All Setup tasks marked [P] can run in parallel
|
|
191
|
+
- All Foundational tasks marked [P] can run in parallel (within Phase 2)
|
|
192
|
+
- Once Foundational phase completes, all user stories can start in parallel (if team capacity allows)
|
|
193
|
+
- All tests for a user story marked [P] can run in parallel
|
|
194
|
+
- Models within a story marked [P] can run in parallel
|
|
195
|
+
- Different user stories can be worked on in parallel by different team members
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Parallel Example: User Story 1
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Launch all tests for User Story 1 together (if tests requested):
|
|
203
|
+
Task: "Contract test for [endpoint] in tests/contract/test_[name].py"
|
|
204
|
+
Task: "Integration test for [user journey] in tests/integration/test_[name].py"
|
|
205
|
+
|
|
206
|
+
# Launch all models for User Story 1 together:
|
|
207
|
+
Task: "Create [Entity1] model in src/models/[entity1].py"
|
|
208
|
+
Task: "Create [Entity2] model in src/models/[entity2].py"
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Implementation Strategy
|
|
214
|
+
|
|
215
|
+
### MVP First (User Story 1 Only)
|
|
216
|
+
|
|
217
|
+
1. Complete Phase 1: Setup
|
|
218
|
+
2. Complete Phase 2: Foundational (CRITICAL - blocks all stories)
|
|
219
|
+
3. Complete Phase 3: User Story 1
|
|
220
|
+
4. **STOP and VALIDATE**: Test User Story 1 independently
|
|
221
|
+
5. Deploy/demo if ready
|
|
222
|
+
|
|
223
|
+
### Incremental Delivery
|
|
224
|
+
|
|
225
|
+
1. Complete Setup + Foundational → Foundation ready
|
|
226
|
+
2. Add User Story 1 → Test independently → Deploy/Demo (MVP!)
|
|
227
|
+
3. Add User Story 2 → Test independently → Deploy/Demo
|
|
228
|
+
4. Add User Story 3 → Test independently → Deploy/Demo
|
|
229
|
+
5. Each story adds value without breaking previous stories
|
|
230
|
+
|
|
231
|
+
### Parallel Team Strategy
|
|
232
|
+
|
|
233
|
+
With multiple developers:
|
|
234
|
+
|
|
235
|
+
1. Team completes Setup + Foundational together
|
|
236
|
+
2. Once Foundational is done:
|
|
237
|
+
- Developer A: User Story 1
|
|
238
|
+
- Developer B: User Story 2
|
|
239
|
+
- Developer C: User Story 3
|
|
240
|
+
3. Stories complete and integrate independently
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Notes
|
|
245
|
+
|
|
246
|
+
- [P] tasks = different files, no dependencies
|
|
247
|
+
- [Story] label maps task to specific user story for traceability
|
|
248
|
+
- Each user story should be independently completable and testable
|
|
249
|
+
- Verify tests fail before implementing
|
|
250
|
+
- Commit after each task or logical group
|
|
251
|
+
- Stop at any checkpoint to validate story independently
|
|
252
|
+
- Avoid: vague tasks, same file conflicts, cross-story dependencies that break independence
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.pyc
|
|
3
|
+
*.egg-info/
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
.venv/
|
|
7
|
+
.pytest_cache/
|
|
8
|
+
|
|
9
|
+
# stray test artifacts from running the CLI in-repo
|
|
10
|
+
/.claude/
|
|
11
|
+
|
|
12
|
+
# The .blitz/ working area is governed content, not an artifact: memory/ holds
|
|
13
|
+
# the repo's playbook (seeded once, never overwritten even by `init --force`),
|
|
14
|
+
# and scripts/ + templates/ are what the playbook commands execute. Two parts
|
|
15
|
+
# are per-run or per-developer state and never belong in git.
|
|
16
|
+
/.blitz/execute/
|
|
17
|
+
/.blitz/feature.json
|
|
18
|
+
|
|
19
|
+
# blitz-sdk local trace capture (see blitz.toml's [capture] local = true).
|
|
20
|
+
# Unanchored: the sdk writes its store relative to whichever project dir holds
|
|
21
|
+
# the blitz.toml, which is not always the repo root. The `*` covers the SQLite
|
|
22
|
+
# -wal/-shm sidecars.
|
|
23
|
+
**/.blitz/traces.db*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: blitz-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.0
|
|
4
4
|
Summary: Developer CLI for Blitz locker-room: spec-driven playbooks, a codebase/huddle ontology graph with an MCP tool, and the composable watcher/trainer/graph containers.
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -31,7 +31,7 @@ The core CLI is stdlib plus `rich`. Two optional extras carry heavier deps only
|
|
|
31
31
|
when you need them: `blitz-cli[locker-room]` (the MCP server) and
|
|
32
32
|
`blitz-cli[train]` (the QLoRA trainer).
|
|
33
33
|
|
|
34
|
-
Top-level commands: `init`, `
|
|
34
|
+
Top-level commands: `init`, `model`, `locker-room`.
|
|
35
35
|
|
|
36
36
|
## Playbooks: spec-driven development commands
|
|
37
37
|
|
|
@@ -51,9 +51,11 @@ and `analyze`. Run at a folder of repos, `init` installs into each repo it finds
|
|
|
51
51
|
for coordinating a feature across repos. Use `--ignore PATH` to skip a repo and
|
|
52
52
|
`--root` to force a single install.
|
|
53
53
|
|
|
54
|
-
##
|
|
54
|
+
## Model execute: run a tasks.md with a local model
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
**Experimental.** This is under active development, its interface and output may change without notice, and it is not recommended for production use.
|
|
57
|
+
|
|
58
|
+
`blitz model execute` drives a local model (served by Ollama) through a
|
|
57
59
|
playbook-generated `tasks.md`, one task at a time. The model only proposes
|
|
58
60
|
actions (full-file writes and shell commands); the driver applies them, runs
|
|
59
61
|
each phase's machine-runnable verification, retries with the failure fed back
|
|
@@ -61,17 +63,17 @@ each phase's machine-runnable verification, retries with the failure fed back
|
|
|
61
63
|
`- [x]` in the tasks.md. A task that keeps failing stops the run so the state
|
|
62
64
|
stays inspectable. Per-attempt model replies, snapshots, and exact token
|
|
63
65
|
accounting (`usage.json`, per task and total) land under
|
|
64
|
-
`.blitz/
|
|
66
|
+
`.blitz/execute/runs/<timestamp>/`.
|
|
65
67
|
|
|
66
68
|
```bash
|
|
67
|
-
blitz
|
|
68
|
-
blitz
|
|
69
|
-
blitz
|
|
69
|
+
blitz model execute # auto-detect the open specs/*/tasks.md
|
|
70
|
+
blitz model execute specs/001-my-feature/tasks.md # or name it
|
|
71
|
+
blitz model execute --model qwen2.5-14b-28k --start-at T005
|
|
70
72
|
```
|
|
71
73
|
|
|
72
74
|
Tasks whose text says "optional manual" are skipped and left unchecked. The
|
|
73
75
|
Ollama endpoint comes from `--ollama-url` or `OLLAMA_HOST`; the model from
|
|
74
|
-
`--model` or `
|
|
76
|
+
`--model` or `BLITZ_EXECUTE_MODEL`.
|
|
75
77
|
|
|
76
78
|
## Locker-room: ontology graph, watcher, trainer, MCP
|
|
77
79
|
|
|
@@ -114,6 +116,8 @@ The `mcp` role serves this: point an agent's MCP config at
|
|
|
114
116
|
|
|
115
117
|
### Training (optional)
|
|
116
118
|
|
|
119
|
+
**Experimental.** This is under active development, its interface and output may change without notice, and it is not recommended for production use.
|
|
120
|
+
|
|
117
121
|
`blitz locker-room train` runs an on-demand QLoRA fine-tune of the watcher corpus
|
|
118
122
|
in the trainer container (needs a GPU); adapters land in `./train-out`. Override
|
|
119
123
|
the base model with `BASE_MODEL_HF` or `blitz locker-room init --base-model`.
|
|
@@ -12,7 +12,7 @@ The core CLI is stdlib plus `rich`. Two optional extras carry heavier deps only
|
|
|
12
12
|
when you need them: `blitz-cli[locker-room]` (the MCP server) and
|
|
13
13
|
`blitz-cli[train]` (the QLoRA trainer).
|
|
14
14
|
|
|
15
|
-
Top-level commands: `init`, `
|
|
15
|
+
Top-level commands: `init`, `model`, `locker-room`.
|
|
16
16
|
|
|
17
17
|
## Playbooks: spec-driven development commands
|
|
18
18
|
|
|
@@ -32,9 +32,11 @@ and `analyze`. Run at a folder of repos, `init` installs into each repo it finds
|
|
|
32
32
|
for coordinating a feature across repos. Use `--ignore PATH` to skip a repo and
|
|
33
33
|
`--root` to force a single install.
|
|
34
34
|
|
|
35
|
-
##
|
|
35
|
+
## Model execute: run a tasks.md with a local model
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
**Experimental.** This is under active development, its interface and output may change without notice, and it is not recommended for production use.
|
|
38
|
+
|
|
39
|
+
`blitz model execute` drives a local model (served by Ollama) through a
|
|
38
40
|
playbook-generated `tasks.md`, one task at a time. The model only proposes
|
|
39
41
|
actions (full-file writes and shell commands); the driver applies them, runs
|
|
40
42
|
each phase's machine-runnable verification, retries with the failure fed back
|
|
@@ -42,17 +44,17 @@ each phase's machine-runnable verification, retries with the failure fed back
|
|
|
42
44
|
`- [x]` in the tasks.md. A task that keeps failing stops the run so the state
|
|
43
45
|
stays inspectable. Per-attempt model replies, snapshots, and exact token
|
|
44
46
|
accounting (`usage.json`, per task and total) land under
|
|
45
|
-
`.blitz/
|
|
47
|
+
`.blitz/execute/runs/<timestamp>/`.
|
|
46
48
|
|
|
47
49
|
```bash
|
|
48
|
-
blitz
|
|
49
|
-
blitz
|
|
50
|
-
blitz
|
|
50
|
+
blitz model execute # auto-detect the open specs/*/tasks.md
|
|
51
|
+
blitz model execute specs/001-my-feature/tasks.md # or name it
|
|
52
|
+
blitz model execute --model qwen2.5-14b-28k --start-at T005
|
|
51
53
|
```
|
|
52
54
|
|
|
53
55
|
Tasks whose text says "optional manual" are skipped and left unchecked. The
|
|
54
56
|
Ollama endpoint comes from `--ollama-url` or `OLLAMA_HOST`; the model from
|
|
55
|
-
`--model` or `
|
|
57
|
+
`--model` or `BLITZ_EXECUTE_MODEL`.
|
|
56
58
|
|
|
57
59
|
## Locker-room: ontology graph, watcher, trainer, MCP
|
|
58
60
|
|
|
@@ -95,6 +97,8 @@ The `mcp` role serves this: point an agent's MCP config at
|
|
|
95
97
|
|
|
96
98
|
### Training (optional)
|
|
97
99
|
|
|
100
|
+
**Experimental.** This is under active development, its interface and output may change without notice, and it is not recommended for production use.
|
|
101
|
+
|
|
98
102
|
`blitz locker-room train` runs an on-demand QLoRA fine-tune of the watcher corpus
|
|
99
103
|
in the trainer container (needs a GPU); adapters land in `./train-out`. Override
|
|
100
104
|
the base model with `BASE_MODEL_HF` or `blitz locker-room init --base-model`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Drive a local model (served by Ollama) through a playbook-generated
|
|
2
2
|
tasks.md, one task at a time — the local-model execution backend for the
|
|
3
|
-
`
|
|
3
|
+
`blitz model execute` command.
|
|
4
4
|
|
|
5
5
|
The model never touches the repo directly: it only proposes actions
|
|
6
6
|
(full-file ===WRITE=== blocks and ===RUN=== commands) and this driver applies
|
|
@@ -237,12 +237,12 @@ def local_model_config(repo: Path) -> dict:
|
|
|
237
237
|
|
|
238
238
|
|
|
239
239
|
def usage_by_spec(repo: Path) -> dict:
|
|
240
|
-
"""Aggregate every
|
|
241
|
-
.blitz/
|
|
240
|
+
"""Aggregate every execute run's usage.json under
|
|
241
|
+
.blitz/execute/runs/, keyed by spec: total input/output tokens, model
|
|
242
242
|
calls, run count, and the models used. This is what the locker-room
|
|
243
243
|
ontologizer attaches to Feature nodes so the UI can show per-spec cost."""
|
|
244
244
|
totals: dict = {}
|
|
245
|
-
for f in sorted(repo.glob(".blitz/
|
|
245
|
+
for f in sorted(repo.glob(".blitz/execute/runs/*/usage.json")):
|
|
246
246
|
try:
|
|
247
247
|
record = json.loads(f.read_text())
|
|
248
248
|
except (OSError, ValueError):
|
|
@@ -289,7 +289,7 @@ def run(
|
|
|
289
289
|
"""Execute every unchecked task in tasks_file. Returns 0 on success, 1 when a
|
|
290
290
|
task fails after all retries (the run stops there so state stays inspectable)."""
|
|
291
291
|
call_model = call_model or (lambda messages: call_ollama(ollama_url, model, messages))
|
|
292
|
-
run_root = run_root or (repo / ".blitz" / "
|
|
292
|
+
run_root = run_root or (repo / ".blitz" / "execute" / "runs")
|
|
293
293
|
rundir = run_root / datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
|
|
294
294
|
snapdir = rundir / "snapshots"
|
|
295
295
|
snapdir.mkdir(parents=True, exist_ok=True)
|