ticket: accept webfetch pdf and intake gate

This commit is contained in:
Keisuke Hirata 2026-06-20 21:08:41 +09:00
parent 36b9ed450f
commit e752a7206a
No known key found for this signature in database
6 changed files with 124 additions and 4 deletions

View File

@ -0,0 +1 @@
{"id":"orch-plan-20260620-120740-1","ticket_id":"00001KVJA7V2R","kind":"accepted_plan","accepted_plan":{"summary":"`WebFetch` が `application/pdf` を `pdf-extract` により page-delimited Markdown-ish text (`pdf_text_by_pages`) として返せるようにする。既存 HTML/text/JSON/XML behavior と network safety/output bounds は維持し、semantic Markdown/OCR/native dependency は導入しない。","branch":"impl/00001KVJA7V2R-webfetch-pdf-text","worktree":"/home/hare/Projects/yoi/.worktree/00001KVJA7V2R-webfetch-pdf-text","role_plan":"Orchestrator は Profile scope review と並行して専用 implementation worktree `.worktree/00001KVJA7V2R-webfetch-pdf-text` を作成し、Coder をその child worktree への narrow write scope で起動する。Coder 実装後、Reviewer が WebFetch safety bounds、PDF binary path separation、metadata/output truncation、dependency/Nix impact、HTML/text regression を確認する。"},"author":"yoi-orchestrator","at":"2026-06-20T12:07:40Z"}

View File

@ -1,8 +1,8 @@
---
title: 'WebFetch: PDF を page-delimited text として取得できるようにする'
state: 'queued'
state: 'inprogress'
created_at: '2026-06-20T10:46:48Z'
updated_at: '2026-06-20T12:06:29Z'
updated_at: '2026-06-20T12:08:34Z'
assignee: null
readiness: 'implementation_ready'
risk_flags: ['security', 'dependency', 'public-api', 'output-bounds']

View File

@ -29,4 +29,64 @@ Intake 済み。Orchestrator は implementation routing として扱える。実
Ticket を `workspace-panel` が queued にしました。
---
<!-- event: decision author: yoi-orchestrator at: 2026-06-20T12:08:15Z -->
## Decision
Routing decision: implementation_ready_parallel
Reason:
- Panel Queue により、この Ticket は Orchestrator routing 対象として明示許可された。
- User standing directive: blocker が無いものは並列実行する。現在の `00001KVJABS1A` は Profile scope review 中であり、WebFetch PDF 実装とは domain/file conflict がないため並列化できる。
- Ticket body は調査済みの PDF extraction 方針、`pdf-extract` 採用理由、binary path 分離、page-delimited Markdown-ish output、metadata、bounds、non-goals、validation を実装可能な粒度で定義している。
- 未解決 relation blocker はない。
- Orchestrator worktree は clean、matching branch/worktree はなし。
- Risk domain は security / dependency / public-api / output-bounds だが、Ticket は existing WebFetch network safety、`max_response_bytes` / `max_output_bytes`、unsupported binary rejection、no OCR/semantic Markdown/native dependency を明示している。bounded context check 後も implementation 前に必要な追加 human decision は見つからなかった。
Evidence checked:
- Ticket `00001KVJA7V2R` body / thread / relations / artifacts。
- `TicketRelationQuery(00001KVJA7V2R)`: no blockers。
- `TicketOrchestrationPlanQuery(00001KVJA7V2R)`: no previous plan records; accepted plan recorded now。
- Workspace state:
- Orchestrator worktree clean at `36b9ed45`
- queued: `00001KVJA7V2R`, `00001KVJDJD02`
- inprogress: `00001KVJABS1A` review only。
- no matching WebFetch PDF branch/worktree。
IntentPacket:
Intent:
- Extend `WebFetch` so `application/pdf` can be fetched and returned as bounded, page-delimited text suitable for LLM reading。
- Use `pdf_extract::extract_text_from_mem_by_pages()` and present output as Markdown-ish page sections, not semantic PDF-to-Markdown。
Binding decisions / invariants:
- Keep WebFetch as fetch/extraction tool; no summarization or research orchestration。
- PDF bytes must not go through the UTF-8 text / `reject_binary()` path。
- Preserve private/local host rejection, bounded redirects, Content-Length / `max_response_bytes`, `max_output_bytes`, embedded credential rejection, untrusted content warning。
- Initial supported MIME is `application/pdf` only; no extension sniffing or `application/octet-stream` PDF guessing。
- No Poppler/Pdfium/subprocess/native dependency/OCR/scanned-PDF support/table reconstruction/cache。
- Existing HTML/text/JSON/XML behavior and `html_extraction` metadata must not regress。
- New metadata should use `pdf_extraction` with method/pages/readable/diagnostic information。
Requirements / acceptance criteria:
- Valid PDF returns `## Page 1`, `## Page 2`, etc. page-delimited bounded text。
- `transformed_as` communicates `pdf_text_by_pages` or equivalent, not semantic Markdown。
- `output_truncated` is correct when PDF text exceeds `max_output_bytes`
- Malformed/encrypted/textless PDFs do not panic; return diagnostic error or readable=false metadata。
- Non-PDF unsupported binary remains rejected。
- Focused WebFetch tests and relevant cargo/fmt/diff validation pass。
Next action:
- Record `queued -> inprogress` and commit Ticket records before creating implementation worktree and spawning Coder。
---
<!-- event: state_changed author: yoi-orchestrator at: 2026-06-20T12:08:34Z from: queued to: inprogress reason: orchestrator_acceptance_parallel_webfetch_pdf field: state -->
## State changed
Ticket body/thread, relation metadata, Orchestrator worktree state, visible Pods, existing branch/worktree, and bounded WebFetch/PDF context were checked. There is no unresolved blocking dependency, no conflicting inprogress implementation, and no missing planning decision. Accepting this queued Ticket for parallel implementation before worktree/Pod side effects.
---

View File

@ -0,0 +1 @@
{"id":"orch-plan-20260620-120740-1","ticket_id":"00001KVJDJD02","kind":"accepted_plan","accepted_plan":{"summary":"Intake role prompt / ticket-intake workflow に Ticket 化前の最小調査ゲートを明示し、曖昧な依頼では既存 Ticket/docs/code/workflow 調査・draft提示・spike/requirements_sync判断を TicketCreate より前に行うよう model-facing instructionを補強する。","branch":"impl/00001KVJDJD02-intake-investigation-gate","worktree":"/home/hare/Projects/yoi/.worktree/00001KVJDJD02-intake-investigation-gate","role_plan":"Orchestrator は Profile scope review / WebFetch PDF 実装と並行して専用 implementation worktree `.worktree/00001KVJDJD02-intake-investigation-gate` を作成し、Coder をその child worktree への narrow write scope で起動する。Coder 実装後、Reviewer が prompt/workflow authority、Ticket化前調査 gate、draft/user-agreement/spike semantics、stale vocabulary removal、Intake role boundariesを確認する。"},"author":"yoi-orchestrator","at":"2026-06-20T12:07:40Z"}

View File

@ -1,8 +1,8 @@
---
title: 'Intake workflow に Ticket 化前の調査ゲートを明示する'
state: 'queued'
state: 'inprogress'
created_at: '2026-06-20T11:45:00Z'
updated_at: '2026-06-20T12:06:37Z'
updated_at: '2026-06-20T12:08:34Z'
assignee: null
readiness: 'implementation_ready'
risk_flags: ['prompt-context', 'workflow-source', 'role-behavior', 'ticket-authority']

View File

@ -13,4 +13,62 @@ LocalTicketBackend によって作成されました。
Ticket を `workspace-panel` が queued にしました。
---
<!-- event: decision author: yoi-orchestrator at: 2026-06-20T12:08:15Z -->
## Decision
Routing decision: implementation_ready_parallel
Reason:
- Panel Queue により、この Ticket は Orchestrator routing 対象として明示許可された。
- User standing directive: blocker が無いものは並列実行する。現在の `00001KVJABS1A` review と WebFetch PDF work とは別 domain の prompt/workflow resource修正であり、直接 conflict はないため並列化できる。
- Ticket body は Intake role prompt / workflow の弱点、Ticket 化前調査 gate、draft-before-create、user agreement gate、spike/requirements_sync handling、stale vocabulary removal、Intake boundaries を実装可能な粒度で定義している。
- 未解決 relation blocker はない。
- Orchestrator worktree は clean、matching branch/worktree はなし。
- Risk domain は prompt-context / workflow-source / role-behavior / ticket-authority だが、Ticket は Intake が coder/reviewer/helper Pod を起動しないこと、implementation routing/merge/closeをしないこと、user agreement without official Ticket create ruleを維持することを明示している。bounded context check 後も implementation 前に必要な追加 human decision は見つからなかった。
Evidence checked:
- Ticket `00001KVJDJD02` body / thread / relations / artifacts。
- `TicketRelationQuery(00001KVJDJD02)`: no blockers。
- `TicketOrchestrationPlanQuery(00001KVJDJD02)`: no previous plan records; accepted plan recorded now。
- Workspace state:
- Orchestrator worktree clean at `36b9ed45`
- queued: `00001KVJA7V2R`, `00001KVJDJD02`
- inprogress: `00001KVJABS1A` review only。
- no matching Intake workflow branch/worktree。
IntentPacket:
Intent:
- Strengthen Intake model-facing role/workflow guidance so ambiguous requests go through a minimum investigation gate before official Ticket creation。
- Make Intake separate user claims, confirmed facts, unverified hypotheses, and undecided points in drafts/Tickets。
Binding decisions / invariants:
- Intake remains non-scheduler and must not spawn coder/reviewer/read-only investigation helper Pods。
- Intake must not create implementation worktrees, route implementation/review, merge, or close。
- User agreement before official Ticket creation remains required。
- Do not save user claims, confirmed facts, unverified hypotheses, and undecided points as if they are all requirements。
- Preserve prompt/workflow resource boundaries between bundled resources and workspace override; explain intended differences if they remain。
- Remove or replace stale `Action required` / `Attention required` vocabulary in draft templates with current Ticket-operation language。
Requirements / acceptance criteria:
- Intake prompt/workflow explicitly states when to inspect existing Tickets / workflows / relevant files before TicketCreate。
- If investigation is needed, Intake can stop at draft / `spike_needed` / `requirements_sync_needed` rather than official Ticket creation。
- `resources/prompts/role/intake.md`, `resources/workflows/ticket-intake-workflow.md`, and `.yoi/workflow/ticket-intake-workflow.md` are reconciled or their differences are intentional/clear。
- Ticket作成前 user agreement rule is preserved。
- Validation includes prompt/workflow diff review and `git diff --check`; run TicketDoctor if Ticket consistency needs checking。
Next action:
- Record `queued -> inprogress` and commit Ticket records before creating implementation worktree and spawning Coder。
---
<!-- event: state_changed author: yoi-orchestrator at: 2026-06-20T12:08:34Z from: queued to: inprogress reason: orchestrator_acceptance_parallel_intake_investigation_gate field: state -->
## State changed
Ticket body/thread, relation metadata, Orchestrator worktree state, visible Pods, existing branch/worktree, and bounded Intake prompt/workflow context were checked. There is no unresolved blocking dependency, no conflicting inprogress implementation, and no missing planning decision. Accepting this queued Ticket for parallel implementation before worktree/Pod side effects.
---