Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .ctg/policy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
version: ctg/v1

policyId: agent-taskstate-policy
description: Quality policy for agent-taskstate repository

blocking:
severity:
critical: true
high: false
medium: false
low: false
category:
auth: false
payment: false
validation: false
data: false
config: false
maintainability: false
testing: false
compatibility: false
releaseRisk: false
security: false
rules:
count:
criticalMax: 0
highMax: 100
mediumMax: 100
lowMax: 100

readiness:
criticalFindingStatus: needs_review
requireLlm: false
allowSuppressed: true

suppression:
file: .ctg/suppressions.yaml
expiryWarningDays: 30
13 changes: 13 additions & 0 deletions .ctg/suppressions.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: ctg/v1

suppressions:
# LARGE_MODULE suppressions - acceptable complexity for service modules
- rule_id: LARGE_MODULE
path: src/resolver.py
reason: "Task resolver with 23 resolution strategies. Strategy pattern refactoring planned when exceeds 30 strategies."
expiry: 2027-05-02

- rule_id: LARGE_MODULE
path: src/tracker_bridge.py
reason: "Tracker bridge consolidating 5 tracker backends. Split into backend-specific bridges when exceeds 900 lines."
expiry: 2027-05-02
48 changes: 22 additions & 26 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,41 +7,37 @@ on:
branches: [main]

jobs:
test:
quality:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.11', '3.12', '3.13']

python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: python -m pip install --upgrade pip && pip install ".[dev]"
- run: ruff check src/agent_taskstate src/agent_taskstate_workflow_plugin
- run: ruff format --check src/agent_taskstate src/agent_taskstate_workflow_plugin
- run: mypy src/agent_taskstate/typed_ref.py src/agent_taskstate/state_transition.py src/agent_taskstate/transition_config.py src/agent_taskstate/context_bundle.py src/agent_taskstate/resolver.py src/agent_taskstate/tracker_bridge.py --ignore-missing-imports --follow-imports=skip
- run: pytest --cov=agent_taskstate --cov-report=term-missing --cov-fail-under=90

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pytest pytest-cov

- name: Run tests
run: python -m pytest --tb=short -q

lint:
package:
runs-on: ubuntu-latest
needs: quality
steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
- uses: actions/setup-python@v5
with:
python-version: '3.13'

- name: Install linters
run: pip install ruff

- name: Run Ruff
run: ruff check .
continue-on-error: true
python-version: "3.13"
- run: python -m pip install --upgrade pip build
- run: python -m build
- name: Clean install and CLI smoke
run: |
python -m venv /tmp/agent-taskstate-clean
/tmp/agent-taskstate-clean/bin/python -m pip install dist/*.whl
/tmp/agent-taskstate-clean/bin/agent-taskstate --help
/tmp/agent-taskstate-clean/bin/agent-taskstate --db /tmp/agent-taskstate.db init
/tmp/agent-taskstate-clean/bin/agent-taskstate --db /tmp/agent-taskstate.db task create --json '{"kind":"feature","title":"smoke","goal":"smoke"}'
/tmp/agent-taskstate-clean/bin/agent-taskstate --db /tmp/agent-taskstate.db task list
5 changes: 5 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Code of Conduct

このプロジェクトでは、技術的な正確さ、相互尊重、再現可能な報告を重視します。
嫌がらせ、差別、個人攻撃、秘密情報の公開を認めません。問題は保守担当へ
非公開で報告してください。
7 changes: 7 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Contributing

1. Python 3.10--3.13で開発する。
2. 実装は `src/agent_taskstate/` に集約し、`src.cli`へ実装を追加しない。
3. 振る舞い変更では tests、schema/migration、docsを同時に更新する。
4. typed_refは4セグメントcanonical、state変更は履歴サービス経由とする。
5. `uv run pytest -q`、Ruff、mypy、wheel buildを実行し、生成物をtrackedに残さない。
9 changes: 8 additions & 1 deletion GUARDRAILS.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,4 +208,11 @@ slo:
operation_latency_p95_ms: 1000
test_coverage_min: 0.90
change_failure_rate_max: 0.10
-->
-->

## 1.1.0統合改修追補

- canonical実装は `src/agent_taskstate/` に限定し、`src.cli`はDeprecationWarning付き再export shimとする。
- typed_refは4セグメントcanonical、3セグメントはread-both/write-oneで扱う。
- status変更は `state_transitions` とtasks.statusを同一transactionで更新する。
- bundleは差分保存せず完全immutable snapshotとし、sources/diagnostics/raw/generator metadataを監査可能にする。
195 changes: 8 additions & 187 deletions README-human.md
Original file line number Diff line number Diff line change
@@ -1,191 +1,12 @@
# agent-taskstate
# agent-taskstate 1.1.0

Agent 向けの正本は [README.md](README.md) を参照してください。
このファイルは、人間がリポジトリの目的、責務、構成、読み方を理解するための説明用 README です。
長期タスクの現在地、状態履歴、再開用context bundleをSQLiteへ保存するローカルCLIです。

agent-taskstate は、長期タスクの進行状態をチャット履歴ではなく構造化データとして保持するための状態管理ツールです。Task、Task State、Decision、Open Question、Run、Context Bundle を明示的に持ち、再開、レビュー、検収を会話ログ依存にせず進められるようにします。

## 保守方針

この repo では `docs/kv-priority-roadmap/` を補助要求として扱い、以後の変更でも整合を維持します。

- 要求、実装、テスト、SQL、README の差分を放置しない
- `typed_ref` の canonical 形式と repo 間の疎結合を崩さない
- `context_bundle` の監査性と再開容易性を維持する

## このリポジトリがやること

- internal task の current state と履歴を SQLite 上で保持する
- decision、open question、run、context bundle を task と結び付けて保持する
- 会話履歴を読み直さなくても再開できるよう、context rebuild 用の材料を残す
- `typed_ref` で `memx-core` や `tracker-bridge` と疎結合に接続する
- task 単位の export と検収しやすい状態表現を提供する

## やらないこと

- 自律実行ランタイムそのものを提供すること
- 複数エージェント協調制御を持つこと
- 外部 tracker の完全同期や完全ミラーを行うこと
- GUI / Web UI、認可、分散構成を MVP に含めること

## 位置づけ

この repo の責務は「内部 task state の正本を持つこと」にあります。

- `agent-taskstate`
- task、task_state、decision、open_question、run、context_bundle の正本
- `memx-core`
- knowledge、evidence、summary などの正本
- `tracker-bridge`
- 外部 tracker との接続、投影、リンク、同期監査の正本

この分離により、内部の作業状態、外部 issue、知識ストアを混ぜずに扱えます。

## 典型的な使い方

### 1. task と state を作る

task を作成し、`task_state` に current step、constraints、done_when、summary を置きます。
これにより、会話履歴を読まずに現在地を復元できます。

### 2. 判断と未解決事項を蓄積する

decision と open question を履歴として追加し、必要に応じて accept / reject / answer / defer を行います。
run を記録しておくことで、いつ何を試したかも追跡できます。

### 3. review / recovery 用に bundle を作る

`context_bundle` は source refs、selected raw、metadata、diagnostics をまとめ、再開やレビュー時の材料を残します。
resolver は task の current state と外部参照を組み合わせて再構成に必要な文脈を返します。

## 主要な設計ルール

### Agent-First

- 人間向け装飾よりも、機械が叩きやすい安定した入出力を優先します
- CLI 出力は将来の API / MCP に写像しやすい形を維持します

### Chat-History-Free

- チャット履歴を正本にしません
- 再開は `task_state` と `context_bundle` の再構成で行います

### Append-Oriented

- `decision`、`open_question`、`run`、`context_bundle` は履歴を残します
- 上書きよりも追加と状態更新を優先します

### Loose Coupling

- repo 間の参照は `typed_ref` による論理参照で扱います
- DB 横断 FK は持ちません

### typed_ref を canonical に保つ

新規に扱う参照は次の 4 セグメント形式を前提にします。

```text
<domain>:<entity_type>:<provider>:<entity_id>
```powershell
agent-taskstate init
agent-taskstate task create --json '{"kind":"feature","title":"Example","goal":"Ship it"}'
agent-taskstate task history --task <task-id>
agent-taskstate context build --task <task-id> --reason normal --rebuild-level L2
```

例:

- `agent-taskstate:task:local:01JABCDEF...`
- `memx:evidence:local:01JXYZ...`
- `tracker:issue:jira:PROJ-123`

## 最小データモデル

### `task`

到達目標と所有者、優先度、状態機械を持つ基本単位です。

### `task_state`

最新版の軽量ダッシュボードです。`current_step`、`constraints`、`done_when`、`current_summary` を持ちます。

### `decision`

何を、なぜ決めたかを履歴として残します。

### `open_question`

未解決事項と回答状態を保持します。

### `run`

実行試行の開始と終了を記録します。

### `context_bundle`

再開やレビューに必要な source refs、selected raw、metadata、diagnostics を束ねます。

## リポジトリ構成

| パス | 内容 |
|------|------|
| `src/` | コア実装 |
| `tests/` | pytest テスト |
| `docs/src/` | MVP / SQLite 仕様 |
| `docs/schema/agent-taskstate.sql` | 現行 schema |
| `docs/migrations/001_init.sql` | 初期 migration |
| `docs/contracts/typed-ref.md` | repo 横断参照契約 |
| `docs/kv-priority-roadmap/` | 実装優先順と補助要求 |
| `skills/agent-taskstate-maintainer/` | repo 同梱 Codex skill |
| `docs/RUNBOOK.md` | 実行と検証手順 |
| `docs/EVALUATION.md` | 検収観点 |

## 読み始める順番

### 人間が全体像を掴みたい場合

1. `README-human.md`
2. `BLUEPRINT.md`
3. `docs/src/agent-taskstate_mvp_spec.md`
4. `docs/src/agent-taskstate_sqlite_spec.md`
5. `docs/RUNBOOK.md`

### 実装やレビューに入る場合

1. `README.md`
2. `skills/agent-taskstate-maintainer/SKILL.md`
3. `BLUEPRINT.md`
4. `docs/kv-priority-roadmap/`

## クイックスタート

```bash
pytest -q
```

## この repo で確認しやすいこと

- task state の状態遷移と optimistic lock が正しく機能するか
- `typed_ref` の canonical 化が一貫しているか
- `context_bundle` の監査項目が永続化されているか
- resolver が再開に必要な文脈を組み立てられるか
- tracker bridge との最小連携が typed_ref ベースで保たれているか
- 要求、SQL、実装、テストの整合が取れているか

## Agent / OSS 配布について

この repo は Agent ファーストの前提で、repo 内に skill を同梱しています。
Codex などの Agent は [skills/agent-taskstate-maintainer/SKILL.md](skills/agent-taskstate-maintainer/SKILL.md) を入口に、要求確認、レビュー、修正、テスト、受入確認を進められます。

一方で、運用者やレビュー担当者向けの説明はこの `README-human.md` に集約します。
つまり、`README.md` は最小導線、`README-human.md` は背景説明、`SKILL.md` は Agent 実務手順、という分担です。

## 参照

- Agent 向け入口: [README.md](README.md)
- repo 同梱 skill: [skills/agent-taskstate-maintainer/SKILL.md](skills/agent-taskstate-maintainer/SKILL.md)
- 設計: [BLUEPRINT.md](BLUEPRINT.md)
- 要件: [docs/src/agent-taskstate_mvp_spec.md](docs/src/agent-taskstate_mvp_spec.md)
- DB: [docs/src/agent-taskstate_sqlite_spec.md](docs/src/agent-taskstate_sqlite_spec.md)
- SQL: [docs/schema/agent-taskstate.sql](docs/schema/agent-taskstate.sql)
- 実行: [docs/RUNBOOK.md](docs/RUNBOOK.md)
- 検収: [docs/EVALUATION.md](docs/EVALUATION.md)

## ライセンス

MIT
外部trackerは補助情報です。接続設定には秘密値を保存せず、環境変数名だけを保存します。
Loading
Loading