Commit Graph
539 Commits
Author SHA1 Message Date
WeiCHEN 6984f96c19 merge: feature/workflow-def-unidirect-2026-09-22 2026-09-22 21:53:52 +08:00
WeiCHEN 265de19725 merge: feature/chat-app-decouple-2026-09-22 2026-09-22 21:53:38 +08:00
WeiCHEN 3e1d00b2e3 merge: feature/t20-lowrisk-hardening-2026-09-22 2026-09-22 21:53:30 +08:00
WeiCHEN 2c80129421 merge: feature/g1-exception-clearance-2026-09-22 2026-09-22 21:53:25 +08:00
WeiCHEN ad96f67442 refactor(workflowdef): make definition/runtime deps unidirectional
Keep registry key validation local to workflowdef with composition-root
injection, adapt FlatCatalog for projectworkflow, and drive the
orchestrator through LiveInstancePort views instead of projectinstance.
2026-09-22 21:44:57 +08:00
WeiCHEN 45c21ef96e fix(workspace): compare realpaths when enforcing artifact roots
macOS TempDir resolves /var to /private/var; EvalSymlinks the data root
before Rel so fencing writes are not false path-escape failures.
2026-09-22 21:42:58 +08:00
WeiCHEN 9c7a5be209 feat(arch): clear G1 U3/U4 sql_write and path exceptions
Move document_records duty-slot writes into docgov, project ledger
heads through docgov/freedoc ports, and workspace deliverable I/O
through DeliverableStore so arch-check baseline drops to sql_write:1
path:13.
2026-09-22 21:40:12 +08:00
WeiCHEN bc873f4400 docs(ops): redline evidence batch without capability release
Record SWBOOT L1–L4 (no real repo write), FAV ObserveShadow gates and
observation-window prerequisites, D7 Track E ID-only checklist, and stronger
PI narrative fallback negatives while keeping all redline flags off.
2026-09-22 21:26:27 +08:00
WeiCHEN b33753d717 refactor(chat): break chat→app cycle with narrow ports
Invert chat dependencies onto composition-root adapters, replace
AssembleRequest coordinator embeds with local DTOs, and drop the
chat→app/* allowlist edges so arch-check can enforce the boundary.
2026-09-22 21:25:59 +08:00
WeiCHEN a2eabe01b1 refactor(chat): break chat→app import cycle via owned ports
Invert chat dependencies on chatflow/intentflow/stageflow through
composition-root adapters; replace AssembleRequest coordinator embeds
with local DTOs and tighten the module-boundaries allowlist.
2026-09-22 21:25:44 +08:00
WeiCHEN 0c4baad4a2 fix(infra): align ready health, drop events shared-net, pin Go 1.27.1, short-skip docker smoke
T20-I2/I3/I5/I8: dev compose /api/v1/ready, main events networks match test/dev, Dockerfile golang:1.27.1-bookworm, and testing.Short skip for pi-agent docker build.
2026-09-22 21:24:20 +08:00
WeiCHEN f12e2ed155 fix: reclaim cancelFns, TTL idemLocks, cache scope probe, invalidate C1, SSE subscribe order
Close T20-B2/B6/B8/B9/B10 low-risk leaks: map-backed cancel reclaim, idempotency lock TTL in cleanupLoop, sync.Once information_schema probe, InvalidateLayer after chat memory upsert, and Subscribe before SSE headers.
2026-09-22 21:24:20 +08:00
WeiCHEN 63f8cfebe7 fix(test): pin real-PI DATA_DIR to runner-mounted data/dev
go test under internal/server previously preferred package-local
data/test, so materials never reached the pi-agent bind mount and
intake quality gates failed closed on empty sandboxes.
2026-09-22 19:40:28 +08:00
weichenandCursor c67c10acc5 test: use official bd_intake key in FullNone real-PI fixture
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:20:11 +08:00
weichenandCursor 0ebcabf7df fix(auth): tolerate concurrent demo-user seed unique conflicts
Parallel NewServer bootstrap raced with goose fixed-id user rows and
sequence drift, panicking the server package on wangzong insert. Treat
unique violations as success when the demo username exists (or retry once).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 18:18:33 +08:00
weichenandCursor 675b00e06d test: align official bd_intake task key and scoped task-run fixtures
Official main.v2 uses bd_intake (not intake); stage gates stayed closed when
fixtures approved the wrong task key. Task-run finalizers also require a real
project_id for outbox event scope—seed scoped projects in PG fixtures.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 18:15:29 +08:00
weichenandCursor c767a99807 fix(authz): close project-context ABAC gap and repair CI PG fixtures
enforceChatProjectAccess before allowAnyStageAccess on GET /context/project
so activated projects are no longer readable by arbitrary authenticated users.

Align failing gate fixtures with official workflow keys, isolated TEST_DATABASE_URL,
unique project names (00057), duty membership, and in-memory bizdev-cli envs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 18:12:26 +08:00
weichenandCursor 3c2c7f9ccc test+arch: unblock production gate (import SSOT + isolated test DSN)
arch-check --mode block failed on frozen dev (23 NEW import findings):
modules materialindex/mineru/workflowscope and edges shipped via their
own accepted tasks were never registered in module-boundaries.yaml.
Register the intentional allowlist edges (precedent 97b868a9); no new
exceptions are added.

7 PG tests fell back to a hardcoded dev DB (127.0.0.1:5433) when
TEST_DATABASE_URL/CONTEXT_DB_DSN were unset, contradicting the isolated
test-DB contract (BUG-08) and polluting dev on a bare 'go test -short'.
Change the fallback to skip when no isolated DB env is provided.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 18:04:02 +08:00
weichenandCursor 06b9278996 docs(test): 记录候选 535 确认与全量切块验收
项目 6579 的正式正文已换成真实解析内容,冲击波 PDF 写入 90 条带向量的切块,小文档仍全文注入。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 13:56:57 +00:00
weichenandCursor 1fb59e12ef feat(bizdev): 成功解析的材料一律写入 material_chunks
大小阈值只决定全文注入还是目录加检索片段,不再决定是否切块。上传后的异步解析同样跳过 60KB 门槛。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 13:40:39 +00:00
weichenandCursor a3f05346e8 merge: feature/mineru-doc-parsing-2026-09-21 (second-round docs)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 11:46:00 +00:00
weichen 4b30324754 merge: dev@362b68a0 (mineru page_range) into feature/taskrun-status-card-2026-09-21 2026-09-21 11:13:40 +00:00
weichenandCursor c026ad7160 test(mineru): dump parsed markdown for live content proof
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 11:10:42 +00:00
weichenandCursor 362b68a0a7 merge: feature/mineru-doc-parsing-2026-09-21 (agent page_range chunking)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 11:09:52 +00:00
weichen b68e1f6412 merge: dev@5c3261c6 into feature/taskrun-status-card-2026-09-21 2026-09-21 10:33:21 +00:00
weichenandCursor 561709178a fix(taskrun): 收口 completed 步骤时归一化冻结的进度中 label
步骤从 running 收口为 completed 时,此前只翻转 Status,Label 永久冻结为
上游下发的"正在…(NN%)"进度中叙述,导致卡片即便步骤已完成仍读起来像还在跑
(缺陷见消息 #4424)。

新增导出函数 NormalizeSettledStep:completed 步骤改写为短标签 + "已完成",
保留"(第 x/y 步)"结构后缀以区分多步任务,原始叙述留在 Detail 供审计;
failed/pending/running 有意不改(失败细节由错误气泡承载)。
接入 applyPhasePayload 三处收口分支、existing-step 刷新分支,
以及 BuildPhaseSnapshot 终态收口 + 存量兜底全量归一化。

导出供回填脚本复用,避免逻辑漂移。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 10:32:38 +00:00
weichenandCursor db76a28689 feat(mineru): chunk Agent parse by page_range past 20-page cap
The free Agent lightweight API rejects files over 20 pages (-30003)
and the precision token is expired, so a real 28-page PDF could not
parse at all. On -30003, parse in 20-page windows and renumber chunk
anchors to global pages; report engine mode agent_chunked.

Also log skipped assets in ResolveMaterials and return a bool from
EnqueueAsync so parse_state is only set when a job is enqueued.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 10:11:08 +00:00
weichen 9990557145 merge: feature/upload-parse-ux-2026-09-21 2026-09-21 09:52:56 +00:00
weichenandCursor b867f4f19c test: cover dedup hint, reparse guard, store gate and CoW contract
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 09:47:06 +00:00
weichenandCursor 5f9fbb9923 fix(server): gate parse enqueue to store-backed pipeline
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 09:47:06 +00:00
weichenandCursor 0272d13574 fix(server): treat a template-only ledger as a readable in-scope document
A missing ledger body was reported as not found, so an in-scope view of a template document never reached the template reply.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 09:37:39 +00:00
weichenandCursor 8b84ee4ecf chore(config): declare WORKFLOW_SCOPE_MODE with a strict default
The flag reaches all three compose app services and the sysadmin catalog, and unknown values stay on the existing hard block.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 09:26:03 +00:00
weichenandCursor 4af4a9de13 fix(intent): keep draft requests that end in 看看 on the write path
「出一版…看看」是写完给看,不是只读查看;查看和读取仍走只读作用域裁决。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 09:26:03 +00:00
weichenandCursor fd4b95030f feat(web): score write-path matches by workflow relation
The document list now reports WORKFLOW_SCOPE_MODE, and weighted mode only blocks a cross-workflow write when that title outscores the active workflow.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 09:22:13 +00:00
weichenandCursor 63f94ff23b feat(server): expose dedup hint, parse error and reparse endpoint
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 09:18:20 +00:00
weichenandCursor 0972900215 feat(intent): score slot filling against the active workflow
Weighted mode keeps an in-scope document when a cross-workflow name is only mentioned beside it, while exact cross-workflow writes stay blocked and exact reads record the owning workflow.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 09:15:51 +00:00
weichenandCursor 976f8d30b8 feat(server): allow weighted cross-workflow reads after a view check
Exact out-of-workflow documents can be summarized when WORKFLOW_SCOPE_MODE=weighted and the caller can still view the active instance; writes stay blocked.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 09:11:47 +00:00
weichenandCursor fac5704303 feat(workflowscope): score document hits by workflow relation weight
Keep WORKFLOW_SCOPE_MODE=strict as the default so cross-workflow mentions stay blocked until weighted mode is turned on.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 09:07:50 +00:00
weichenandCursor 7f150831bb merge: feature/mineru-doc-parsing-2026-09-21
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:37:12 +00:00
weichenandCursor 2c6b41a5ac feat(mineru): fall back to Agent lightweight API on token failure
When precision API key is missing or expired (A0202/A0211), parse
via the no-token Agent API so document understanding still works.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:36:24 +00:00
weichenandCursor 983b785cd6 feat(config): wire MinerU and material RAG settings
Add MINERU_* / MATERIAL_* to config loader, .env.example, and
compose env passthrough. Secrets stay in local .env only.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:29:10 +00:00
weichenandCursor 79c4c7c496 feat(api): enqueue material parse on upload and expose parse_state
Async-trigger MinerU after CAS store and surface parse status in
assets API plus a lightweight preview badge.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:29:10 +00:00
weichenandCursor 9ee890950a feat(bizdev): hybrid material injection and real CAS embedder
Prefer MinerU markdown, inject fulltext or toc+rag for large docs,
and wire kb.Embedder into CAS instead of nil.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:29:10 +00:00
weichenandCursor 18c727bb9f feat(materialindex): parse pipeline with chunk embed and RAG search
EnsureParsed waits or lazily triggers MinerU, indexes oversized
markdown into material_chunks, and supports reranked retrieval.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:29:10 +00:00
weichenandCursor 32cda4486c feat(mineru): add MinerU precision parse client
Implement signed batch upload, poll, zip extract, and real page
anchor rebuild from content_list.json.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:29:10 +00:00
weichenandCursor 6bb2f72507 test(coordinator): cover weak-requirements confirm then affirm path
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:27:49 +00:00
weichenandCursor 5ba9bbbe11 feat(coordinator): smart confirm gate before TRIGGER_TASK execution
Ask via PendingExpectation for weak-write verbs, mid confidence, or
stage-mismatched doc tasks instead of running blindly.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:27:49 +00:00
weichenandCursor f8abd1a5cc feat(intent): stage-aware requirements routing with weak write verbs
Map early-stage "整理一下需求" style phrases to intake with needs_confirmation,
and stop RDev "用户需求" from hijacking main-flow "编写用户需求表".

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:27:49 +00:00
weichenandCursor 32209c5e1b feat(taskrun): persist phase snapshot into assistant message metadata
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:15:10 +00:00
weichenandCursor 0b1040ca7e feat(web): scope template matching to the active workflow
- Document list returns workflow_key per item and active_workflow_key
- DeliverableItem keeps workflowKey through server sync
- resolveTaskTemplateForMessage filters the match pool and blocks
  cross-workflow mentions with switch guidance

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:09:36 +00:00