Skip to content
This repository was archived by the owner on Apr 11, 2026. It is now read-only.

Commit acbc894

Browse files
z23ccclaude
andcommitted
chore: cleanup Python remnants — docs, dead code, __pycache__
- CLAUDE.md: "Python, no native deps" → "single Rust binary" - README/README_CN: "pure Python + Bash" → "single Rust binary + Bash skills" - docs/flowctl.md: file structure updated to SQLite + YAML frontmatter - Deleted cmd_task_set_section dead code (merged into task spec) - Deleted __pycache__ in ralph templates - Cleaned 13 Python JSON remnant files from .flow/ Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent be00eb7 commit acbc894

5 files changed

Lines changed: 20 additions & 58 deletions

File tree

CLAUDE.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ cd flowctl && cargo build --release && cargo test --all
6666
python3 -c "import json; json.load(open('hooks/hooks.json'))"
6767
```
6868

69-
No linter or formatter is configured. No TypeScript, no npm, no build step.
69+
Rust: clippy for linting, cargo test for tests. No TypeScript, no npm. Skills and agents are Markdown files (no build step).
7070

7171
## Key Design Decisions
7272

@@ -97,7 +97,7 @@ No linter or formatter is configured. No TypeScript, no npm, no build step.
9797
- **Plan auto-execute**: `/flow-code:plan` defaults to auto-execute work after planning (≤10 tasks direct, >10 suggests Ralph); `--plan-only` to opt out
9898
- **Goal-backward verification**: worker Phase 5 re-reads acceptance criteria and verifies each is actually satisfied before completing
9999
- **Full-auto by default**: `/flow-code:plan` and `/flow-code:work` require zero interactive questions — AI reads git state, `.flow/` config, and request context to make branch, review, and research decisions autonomously. Default mode is Worktree + Teams + Phase-Gate (all three active). Work resumes from `.flow/` state on every startup (not a special "resume mode"). All tasks done → auto push + draft PR (`--no-pr` to skip)
100-
- **Cross-platform**: flowctl CLI works on macOS/Linux/Windows (Python, no native deps). RP plan-review auto-degrades to Codex on platforms where rp-cli is unavailable. Bash hooks degrade gracefully on Windows (skip, don't block)
100+
- **Cross-platform**: flowctl is a single Rust binary (macOS/Linux). RP plan-review auto-degrades to Codex on platforms where rp-cli is unavailable. Bash hooks degrade gracefully on Windows (skip, don't block)
101101
- **Session start**: CLAUDE.md instruction (not an enforced hook) — if `.flow/` exists, run `flowctl status --interrupted` to check for unfinished work from a previous session and resume with the suggested `/flow-code:work <id>` command
102102

103103
## Files to Never Commit
@@ -106,5 +106,5 @@ No linter or formatter is configured. No TypeScript, no npm, no build step.
106106
- `*.upstream` — upstream backup files
107107
- `.claude-plugin/` — local plugin config
108108
- `.tasks/` — runtime state
109-
- `__pycache__/` — Python cache
109+
- `__pycache__/` — Python cache (hook scripts only)
110110
- `.flow/` — per-project task state (runtime, not part of plugin)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ A **harness** wraps around an AI coding agent to handle everything the model can
3737
| Full-auto (zero questions) | ✅ AI decides branch/review/depth ||||
3838
| Context preservation | ✅ PreCompact hook || ✅ embedding + RAG ||
3939
| Auto draft PR |||||
40-
| Zero dependencies |pure Python + Bash | ❌ Node.js | ❌ ChromaDB | ❌ Node.js |
40+
| Zero dependencies |single Rust binary + Bash skills | ❌ Node.js | ❌ ChromaDB | ❌ Node.js |
4141

4242
---
4343

@@ -75,7 +75,7 @@ Flow-Code is a **harness engineering framework** for Claude Code. One command go
7575
→ auto push + draft PR
7676
```
7777

78-
Everything lives in your repo as `.flow/` state. No external services. No global config. Zero dependencies (pure Python + Bash). Uninstall: delete `.flow/`.
78+
Everything lives in your repo as `.flow/` state. No external services. No global config. Single Rust binary + Bash skills. Uninstall: delete `.flow/`.
7979

8080
<table>
8181
<tr>

README_CN.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
| 运行时 DAG 变更 | ✅ 执行中 split/skip/dep rm ||||
3636
| 跨模型对抗审查 | ✅ GPT 试图破坏 Claude 的代码 ||||
3737
| 全自动(零问题) | ✅ AI 决定 branch/review/depth ||||
38-
| 零依赖 |纯 Python + Bash | ❌ Node.js | ❌ ChromaDB | ❌ Node.js |
38+
| 零依赖 |单 Rust 二进制 + Bash 技能 | ❌ Node.js | ❌ ChromaDB | ❌ Node.js |
3939

4040
---
4141

@@ -81,7 +81,7 @@ Flow-Code 是 Claude Code 的 **Harness Engineering 框架**。一条命令,
8181
→ auto push + draft PR
8282
```
8383

84-
所有状态存储在 `.flow/` 目录。无外部服务。无全局配置。零依赖(纯 Python + Bash。卸载:删除 `.flow/`
84+
所有状态存储在 `.flow/` 目录。无外部服务。无全局配置。单 Rust 二进制 + Bash 技能。卸载:删除 `.flow/`
8585

8686
---
8787

docs/flowctl.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,23 @@ Works out of the box for parallel branches. No setup required.
2626
```
2727
.flow/
2828
├── meta.json # {schema_version, next_epic}
29-
├── epics/fn-N-slug.json # Epic state (e.g., fn-1-add-oauth.json)
29+
├── epics/fn-N-slug.md # Epic state (YAML frontmatter + markdown)
3030
├── specs/fn-N-slug.md # Epic spec (markdown)
31-
├── tasks/fn-N-slug.M.json # Task state (e.g., fn-1-add-oauth.1.json)
32-
├── tasks/fn-N-slug.M.md # Task spec (markdown)
33-
├── memory/ # Agent memory (reserved)
34-
├── bin/ # (optional) Local flowctl install via /flow-code:setup
35-
│ ├── flowctl
36-
│ ├── flowctl.py
37-
│ └── flowctl/ # Core engine package
38-
└── usage.md # (optional) CLI reference via /flow-code:setup
31+
├── tasks/fn-N-slug.M.md # Task state + spec (YAML frontmatter + markdown)
32+
├── memory/ # Agent memory (v2 atomic entries)
33+
├── reviews/ # Review receipts (JSON)
34+
├── checklists/ # Machine-readable acceptance checklists
35+
└── .state/ # SQLite DB (source of truth, in .git/flow-state/)
3936
```
4037

38+
Storage: SQLite is the authoritative store. Markdown files are the human-readable format.
39+
`flowctl import` rebuilds the DB from Markdown; `flowctl export` writes Markdown from DB.
40+
4141
Flowctl accepts schema v1 and v2; new fields are optional and defaulted.
4242

43-
New fields:
44-
- Epic JSON: `plan_review_status`, `plan_reviewed_at`, `completion_review_status`, `completion_reviewed_at`, `depends_on_epics`, `branch_name`, `default_impl`, `default_review`, `default_sync`, `gaps`
45-
- Task JSON: `priority`, `impl`, `review`, `sync`
43+
Frontmatter fields:
44+
- Epic: `plan_review`, `completion_review`, `depends_on_epics`, `branch_name`
45+
- Task: `priority`, `domain`, `depends_on`, `files`
4646

4747
## ID Format
4848

flowctl/crates/flowctl-cli/src/commands/task/query.rs

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//! Task query and spec update commands: set-section, set-spec, set-backend, show-backend.
1+
//! Task query and spec update commands: set-spec, set-backend, show-backend.
22
33
use chrono::Utc;
44
use serde_json::json;
@@ -12,44 +12,6 @@ use super::{
1212
read_file_or_stdin, try_open_db, write_task_doc,
1313
};
1414

15-
pub(super) fn cmd_task_set_section(json_mode: bool, task_id: &str, section: &str, file_path: &str) {
16-
let flow_dir = ensure_flow_exists();
17-
18-
if !is_task_id(task_id) {
19-
error_exit(&format!(
20-
"Invalid task ID: {}. Expected format: fn-N.M or fn-N-slug.M",
21-
task_id
22-
));
23-
}
24-
25-
let mut doc = load_task_doc(&flow_dir, task_id);
26-
27-
// Read new content
28-
let new_content = read_file_or_stdin(file_path);
29-
30-
// Patch body section
31-
doc.body = patch_body_section(&doc.body, section, &new_content);
32-
doc.frontmatter.updated_at = Utc::now();
33-
34-
write_task_doc(&flow_dir, task_id, &doc);
35-
36-
// Update DB
37-
if let Some(conn) = try_open_db() {
38-
let repo = flowctl_db::TaskRepo::new(&conn);
39-
let _ = repo.upsert(&doc.frontmatter);
40-
}
41-
42-
if json_mode {
43-
json_output(json!({
44-
"id": task_id,
45-
"section": section,
46-
"message": format!("Task {} {} updated", task_id, section),
47-
}));
48-
} else {
49-
println!("Task {} {} updated", task_id, section);
50-
}
51-
}
52-
5315
pub(super) fn cmd_task_set_spec(
5416
json_mode: bool,
5517
task_id: &str,

0 commit comments

Comments
 (0)