Assign code content classifier to Claude

This commit is contained in:
최민영 2026-08-25 22:02:37 +09:00
parent 09292823e4
commit 29faab8a97
4 changed files with 82 additions and 6 deletions

View File

@ -87,11 +87,12 @@ Codex handles the request only under an existing acceptance-criteria task with m
## Delivery waves
1. Codex completes OAuth core, TASK-004 API foundations, and TASK-005 repository/ref selection.
2. After TASK-005's reviewed contract commit, Claude builds TASK-006 in a separate worktree while Codex builds TASK-009 history/diff contracts.
3. After both are reviewed, Claude builds TASK-007 while Codex builds TASK-010 work-item contracts and integrates TASK-006.
4. After TASK-010's reviewed contract commit, Claude builds TASK-008 while Codex verifies merged history/navigation behavior.
5. Codex performs final integration and all repository-wide gates.
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.
6. Codex performs final integration and all repository-wide gates.
## Cross-review

View File

@ -0,0 +1,18 @@
# 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.
Read completely, in order:
1. `AGENTS.md`
2. `CLAUDE.md`
3. `docs/product.md`
4. `docs/architecture.md`
5. `docs/collaboration.md`
6. `docs/workstreams.md`
7. `tasks/003-repository-browser-foundation.md`
8. `tasks/006a-code-content-classifier.md`
You are the implementer for this task and Codex is the reviewer. Your only writable paths are the three paths listed in TASK-006A. Do not edit Gradle, domain, data, Android resources, manifests, navigation, other tasks, or other feature packages.
Implement the smallest pure Kotlin classifier satisfying every acceptance criterion. Run all required checks, inspect the actual diff, update only TASK-006A evidence/review sections, commit on a `claude/` branch, and hand off the exact commit to Codex. If the frozen contracts are insufficient, stop and submit the structured shared-contract request from `docs/workstreams.md`; do not modify shared files.

View File

@ -1,6 +1,6 @@
# TASK-006: Browse trees and source code by ref
Status: planned — depends on TASK-005
Status: planned — depends on TASK-005 and TASK-006A
Owner: Claude
Reviewer: Codex

View File

@ -0,0 +1,57 @@
# TASK-006A: Classify source content safely
Status: ready — shared domain contract frozen at commit `0929282`
Owner: Claude
Reviewer: Codex
## Outcome
Classify already-loaded repository content into bounded text, binary, Git LFS pointer, unsupported encoding, or oversized states so the future code viewer never blindly decodes or renders arbitrary bytes.
## Contract freeze
- Shared domain contract commit: `0929282`.
- Claude starts from the later Codex assignment commit that adds this task and prompt; no shared domain file may differ from `0929282` without an approved contract change.
- Input contracts: `SourceContent`, `SourceFile`, `RepositoryPath`, and `RepositoryRef` from TASK-003.
- This task must not change the frozen domain contracts. Required changes use the request format in `docs/workstreams.md`.
## Writable paths
- `app/src/main/java/com/ubisam/ubgitea/feature/codebrowser/content/`
- `app/src/test/java/com/ubisam/ubgitea/feature/codebrowser/content/`
- `tasks/006a-code-content-classifier.md` evidence and review sections only
## Acceptance criteria
- [ ] Classification results are immutable and distinguish text, binary, Git LFS pointer, unsupported encoding, and oversized content.
- [ ] Maximum input bytes, rendered characters, and rendered lines are constructor-injected positive limits.
- [ ] Oversized input is rejected before text decoding and exposes only safe metadata, not decoded content.
- [ ] Binary detection includes NUL bytes and does not convert arbitrary bytes to replacement characters.
- [ ] Text decoding uses a strict UTF-8 decoder that reports malformed or unmappable input.
- [ ] A Git LFS pointer is recognized only from its canonical version line and required object ID/size fields within configured bounds.
- [ ] Rendered text is explicitly marked truncated when character or line limits are exceeded.
- [ ] No Android, network, persistence, token, logging, or write-operation dependency appears in the package.
- [ ] Tests cover empty/ASCII/Korean text, CRLF, malformed UTF-8, NUL/binary, valid and malformed LFS pointers, exact/over byte limits, line limits, character limits, and defensive immutability.
## Security and privacy
- Test fixtures must contain only synthetic public content.
- Classification errors must not include source content in messages.
- The classifier does not persist content or place it on the clipboard.
## Required checks
```text
./gradlew assembleDebug
./gradlew testDebugUnitTest
./gradlew lintDebug
./gradlew testDebugUnitTest --tests "com.ubisam.ubgitea.feature.codebrowser.content.*"
```
## Handoff
Claude must provide the exact branch/commit, changed paths, acceptance-criteria evidence, check results, open findings, and a request for Codex review. No integration or shared-file edit is authorized by this task.
## Evidence
Pending Claude implementation.