diff --git a/docs/collaboration.md b/docs/collaboration.md index cb28c7d..0803f82 100644 --- a/docs/collaboration.md +++ b/docs/collaboration.md @@ -30,6 +30,6 @@ Next owner/action: The reviewer must inspect the actual diff and tests. Do not provide the implementer's reasoning as a substitute for evidence; it can anchor the reviewer and hide alternative failure modes. -## Parallel development +## Serial development -Parallel implementation uses separate worktrees, exclusive writable paths, and cross-review. The current ownership map and delivery waves are recorded in `docs/workstreams.md`. +Implementation is serial: one writer owns the working tree at a time, and both agents append completion and handoff records to `docs/development-log.md`. The current ownership map and delivery sequence are recorded in `docs/workstreams.md`. diff --git a/docs/development-log.md b/docs/development-log.md new file mode 100644 index 0000000..4d8db36 --- /dev/null +++ b/docs/development-log.md @@ -0,0 +1,35 @@ +# UBGitea development log + +This is the append-only implementation and handoff record shared by Codex and Claude. Only the current task owner or assigned reviewer may append an entry, and agents never edit this file concurrently. + +## 2026-08-25 — TASK-001 + +- Agent and role: Codex, implementer and integrator +- Commit/diff: `75aa5f8` +- Features implemented: Android Compose project bootstrap, Korean placeholder home screen, deterministic Gradle wrapper, unit-test and lint baseline. +- How it was implemented: One application module using Kotlin, Compose, Material 3, API 28 minimum, API 36 target, JDK 17, and version-catalog-managed dependencies. +- Files changed: Root Gradle configuration, `app/`, ADR-001, product and task documentation. +- Checks and results: Debug APK build passed; 1 unit test passed; lint passed; sensitive-pattern scan found no assigned secret. +- Review findings and resolutions: Independent review found no P0-P3 findings. +- Known limitations: No device/emulator launch; final icon and authentication were out of scope. +- Next recommended task: Repository browsing foundations. +- Next owner: Codex. + +## 2026-08-25 — TASK-003 + +- Agent and role: Codex, implementer and integrator +- Commit/diff: `a2cc7d4` +- Features implemented: Immutable repository, branch, tree, file, commit and paging domain contracts; safe coordinate/ref/path validation; read-only repository interface and browse use cases. +- How it was implemented: Pure Kotlin domain models, defensive byte/list copies, shared pagination validation, Korean read-only placeholder state, and fake-adapter unit tests. +- Files changed: Domain model/repository/use-case packages, focused tests, home placeholder, product roadmap and TASK-003 through TASK-007 documents. +- Checks and results: Build passed; 22 unit tests passed; lint passed; sensitive-pattern and diff checks passed. +- Review findings and resolutions: Two P2 findings covering page output mutability and missing use-case boundary tests were fixed and independently re-reviewed; no findings remain. +- Known limitations: Live HTTP, authentication, navigation, content rendering, and device testing were out of scope. +- Next recommended task: OAuth protocol core followed by Android OAuth integration. +- Next owner: Codex. + +## Current ownership + +- Active task: TASK-002A OAuth protocol core +- Current writer: Codex +- Claude status: waiting; TASK-006A is queued until an explicit handoff is appended. diff --git a/docs/workstreams.md b/docs/workstreams.md index d74f403..26a0587 100644 --- a/docs/workstreams.md +++ b/docs/workstreams.md @@ -1,17 +1,17 @@ -# Codex and Claude workstreams +# Codex and Claude serial workstream ## Operating rule -Codex and Claude may work concurrently only in separate Git worktrees and branches. A task must name one writer, one reviewer, and exclusive writable paths before implementation starts. Shared build files, navigation, manifests, domain contracts, and integration are Codex-owned unless a later task explicitly transfers them. +Codex and Claude work serially. Only the current task owner may modify the working tree. A task must name one writer, one reviewer, and writable paths before implementation starts. Ownership transfers only after the current owner commits or identifies an exact diff, records verification evidence, appends a handoff to `docs/development-log.md`, and stops writing. -## Branches and worktrees +## Branches - Codex branch prefix: `codex/` - Claude branch prefix: `claude/` -- Codex working tree: the primary repository worktree -- Claude working tree: a separate worktree created from a reviewed contract commit +- Only one active implementation branch and working tree is used at a time. +- A reviewer remains read-only while reviewing the active implementation. -Neither agent may edit files owned by the other active workstream. Generated build output is never handed off or committed. +The next owner may edit a path used by the previous owner only after accepting the recorded handoff. Generated build output is never handed off or committed. Feature resources use mandatory name prefixes even when stored in separate XML files: `repositories_`, `codebrowser_`, `history_`, and `workitems_`. The final integration gate builds merged resources to detect collisions. @@ -71,9 +71,29 @@ app/src/main/res/values/strings_workitems.xml Claude must not modify shared Gradle, manifest, navigation, domain, data, or generic `strings.xml` files. Needed shared changes are reported as a handoff request for Codex. -## Contract freeze and change requests +## Shared development log -A Claude task starts from an exact reviewed Codex commit recorded in that task's evidence as its contract-freeze commit. A shared-contract request must state: +Both agents append task-completion and handoff entries to `docs/development-log.md`. They must not rewrite or delete earlier entries except to correct a factual error in a new follow-up entry. Every entry records: + +```text +Date and task: +Agent and role: +Commit/diff: +Features implemented: +How it was implemented: +Files changed: +Checks and results: +Review findings and resolutions: +Known limitations: +Next recommended task: +Next owner: +``` + +The log is not permission to work concurrently. An agent may append only while it owns the current task or its explicitly assigned review handoff. + +## Contract changes + +A Claude task starts from an exact reviewed Codex commit recorded in the task evidence and development log. A shared-contract request must state: ```text Requesting task: @@ -83,15 +103,15 @@ Requested owner: Blocking: yes | no ``` -Codex handles the request only under an existing acceptance-criteria task with matching writable paths or a new task. Breaking shared-contract changes are prohibited during the freeze unless both owners approve them. After an approved change, Codex records the new freeze commit, Claude rebases its worktree, reruns contract and feature tests, and records acceptance before implementation continues. +Codex handles the request only under an existing acceptance-criteria task with matching writable paths or a new task. Breaking shared-contract changes require a recorded handoff. The new owner reruns contract and feature tests and records acceptance before implementation continues. -## Delivery waves +## Delivery sequence -1. Claude may immediately build TASK-006A from freeze commit `0929282` while Codex builds TASK-002A and TASK-002B. -2. Codex completes TASK-004 API foundations and TASK-005 repository/ref selection; TASK-006A is reviewed and integrated independently. -3. After TASK-005's reviewed contract commit, Claude builds the remaining TASK-006 UI in a separate worktree while Codex builds TASK-009 history/diff contracts. -4. After both are reviewed, Claude builds TASK-007 while Codex builds TASK-010 work-item contracts and integrates TASK-006. -5. After TASK-010's reviewed contract commit, Claude builds TASK-008 while Codex verifies merged history/navigation behavior. +1. Codex completes TASK-002A and records implementation, checks, limitations, and the next handoff. +2. The assigned reviewer inspects TASK-002A read-only; Codex resolves findings and records completion. +3. Codex completes TASK-002B, TASK-004, and TASK-005 one accepted task at a time using the same review cycle. +4. Claude may then receive TASK-006A and TASK-006 sequentially, recording each result before Codex integrates it. +5. TASK-009, TASK-007, TASK-010, and TASK-008 continue in dependency order, one writer at a time. 6. Codex performs final integration and all repository-wide gates. ## Cross-review @@ -101,6 +121,6 @@ Codex handles the request only under an existing acceptance-criteria task with m - The implementing agent resolves findings in its own branch. - Codex performs the final merged build, tests, lint, secret scan, and acceptance-criteria review. -## Integration ownership transfer +## Ownership transfer -When a Claude task passes its checks and Codex review, its handoff names the exact commit and explicitly transfers the task's feature paths to the Codex integration task. Codex may then wire navigation and dependencies and make only integration-scoped fixes listed in that task. Feature-behavior defects are returned to Claude's branch unless a new integration task explicitly grants Codex the affected feature paths. Merged-only failures must be recorded with reproduction evidence before either owner edits them. +When a task passes its checks and review, its handoff names the exact commit and next owner. The current owner stops writing before the next owner starts. Integration fixes require an acceptance-criteria task with exact writable paths. Failures discovered after handoff are recorded with reproduction evidence before ownership transfers back. diff --git a/prompts/claude-task-006a.md b/prompts/claude-task-006a.md index 0c71675..d4506b4 100644 --- a/prompts/claude-task-006a.md +++ b/prompts/claude-task-006a.md @@ -1,6 +1,6 @@ # Claude kickoff: TASK-006A -Work only on TASK-006A in a separate worktree and a `claude/` branch created from the Codex assignment commit containing this prompt. The shared domain contract is frozen at commit `0929282`; verify that the relevant domain files have not changed since that commit. +Start TASK-006A only after the Codex development log explicitly transfers ownership to Claude. Work on a `claude/` branch from the recorded handoff commit. The shared domain contract was initially frozen at commit `0929282`; verify it against the newer handoff before writing. Read completely, in order: diff --git a/tasks/006a-code-content-classifier.md b/tasks/006a-code-content-classifier.md index 4e43c81..02ed4bf 100644 --- a/tasks/006a-code-content-classifier.md +++ b/tasks/006a-code-content-classifier.md @@ -1,6 +1,6 @@ # TASK-006A: Classify source content safely -Status: ready — shared domain contract frozen at commit `0929282` +Status: queued — wait for Codex OAuth and explicit serial handoff Owner: Claude Reviewer: Codex