Skip to content

observability: dissolve the transition package into H records, Apps views, and K (OBS) - #425

Merged
Dong1017 merged 6 commits into
mainfrom
impl/obs-dissolve-2
Nov 15, 2026
Merged

Dong1017 merged 6 commits into
mainfrom
impl/obs-dissolve-2

Conversation

@Dong1017

@Dong1017 Dong1017 commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

observability: dissolve the transition package into H records, Apps views, and K (OBS)

Refs #413

Scope and exact head

  • Branch: impl/obs-dissolve-2.
  • Current PR head: 9489466a8aae1bc3a31f8cf138bf42c601f7f124 (read back 2026-11-15 11:04:45 Asia/Shanghai after the ordinary fast-forward of this already-committed merge). Parents are previous official OBS head 5ccb2b7fd9d0b86c153349318280c426d9ce565c and current main 9ede1835d16352b60c559302882bf2cea3e19c0d (includes accepted B01 benchmark: split the legacy run/evaluate chain into B, H, and Apps legacy (B01) #422 and skill-eval: split the four-file family by function owner and drop the residual (S01) #437). Tree b8d36e5c0d255cddcff128a078ad5f0513787063. Current main is an ancestor. Unique three-dot diff versus current main: 78 files, +1445 / −727. Commit count versus main is 6. Author GUOGUO <xwdong1998@163.com> with the existing DCO and Agent-assisted-by trailers. Refs task: OBS — 解散 observability 过渡包并归位记录与展示 #413. This is an ordinary merge that preserves the OBS capture contracts and the already-adopted shared D008 rows, not a force-with-lease rewrite of the current tip and not a merge of the PR into main. Previous official remote tip 5ccb2b7fd9d0b86c153349318280c426d9ce565c remains an ancestor of this head.
  • How this head was produced: after the 2026-11-14 19:36 Asia/Shanghai single-commit presentation d173eee (tree 2e0c550e05722c795edb3b8de4f258e87e7c860d, parent then-main 57f8e8a4915b38201d9fa58d4d05acbe3c4199ee; that tree was identical to previous official head 911ac41eec01b660084ac5dd3c92aa6435c795a1), the branch received ordinary merges of later main: e6804db8de0e49897d2bed943d46171e0a01f71e (K02 resource move), docs header alignment 6e8dc01b1424eafa059755e37f8af1b4e4f155a0, afca605b721d88017450e3dc0e8a7124bdeb2105 (preserve OBS Apps contracts with then-main read routing), and 5ccb2b7 (then-main including skill-eval: split the four-file family by function owner and drop the residual (S01) #437, preserving capture contracts), and then 9489466a (current main 9ede1835, including accepted B01 benchmark: split the legacy run/evaluate chain into B, H, and Apps legacy (B01) #422). The 9489466a merge had three content conflicts: CHANGELOG.md keeps both Changed entries; docs/contracts/function-owners.md keeps all five already-adopted D008 rows (this PR still adds the three OBS rows; the two B01 rows now come from main); tests/test_dashboard_workflow.py imports execute_trial/run_experiment from apps.legacy.run and load_dashboard from apps.views. No feat: 补齐知识检索解释与逐轮候选证据导航 #428 layout decision is made. Earlier provenance of the 911ac41 / d173eee tree: ordinary merge 9aa890d938c934194d2b6f0cd47a100e2910eb50 of previous PR head b455414721d36563ca9b7b66284651dbcd84ee7e and then-main 57f8e8a (including the final feat: 补齐知识检索解释与逐轮候选证据导航 #428 behavior), then 6f36c57d38f12e45d1b640adf3a1a7a9ff769772 (Apps route, shared D008 record, lint) and 911ac41 (real earlier Apps capture bytes). The current tree b8d36e5c is not identical to 5ccb2b7 / 17d5550f or to 911ac41 / d173eee; hosted jobs and local results on those earlier SHAs are previous-head evidence only and do not validate this head.
  • Accepted OBS delegation: records/reconciliation in Harness; presentation, templates and orchestration in Apps; pure item projections in Knowledge. No observability/ compatibility shell; Harness records import neither Apps nor Knowledge. overall isolation_complete remains false. No Issue completion is claimed.

Five merge conflicts: semantic decisions

Conflict Final ownership and behavior
apps/views/dashboard_data.py Keep Harness-neutral helper imports, not duplicate private readers/sanitizers. Harness sanitized_text accepts limit=None for the complete redacted tail.
apps/views/knowledge_view.html Move main's new template into Apps; template bytes are identical to main.
apps/views/retrieval_projection.py Move main's new projection into Apps and retarget helper imports. Preserve the source: null and unhashable/unsafe context_id guards.
harness/records/knowledge_capture.py Facts/bytes-only storage with optional supplied metadata; Apps owns reader calls, entry-point/calls envelope and projection choice; Knowledge supplies pure projections. No upward imports.
tests/test_optimization_story.py Retain both sides' regressions with the correct Apps/Harness imports.

All four Apps HTML resources (template, review_template, experiment_view, knowledge_view) retain main's bytes. Both layouts, offline/live navigation, focus retention, source/hash checks, full redacted text and immutable capture bytes are preserved. No whole bundle resources are copied into capture items.

Real legacy Apps bytes, not relaxed assertions

The initial local integration incorrectly broadened the six-key layout assertion. That was caught before push and corrected, not accepted as a passing repair.

  • context_item(view) again returns exactly the six identity keys. provenance=True is an explicit extension.
  • For a reader reporting neither an observation nor item provenance, Apps capture_context uses the original composition: six keys, ids: [], inferrsi collect <version>, original ordering, no retrieval/null-field additions.
  • A frozen-time serialized regression runs through the Apps entry point. Its 1874-byte literal was independently compared with the actual pre-merge Apps implementation loaded from Git blobs, not just with Harness storage.
  • A genuine observation, or actually supplied item provenance even without an observation, selects the extended path. The real packaged KnowledgeReader always supplies an observation; its captures retain feat: 补齐知识检索解释与逐轮候选证据导航 #428's metadata and match main's bytes.

Deliberate edge differences from main are disclosed: without an observation save_retrieval omits a null retrieval field; a missing/malformed campaign.json uses the Apps uniform ValueError. The legacy-only capture_context branch intentionally retains the earlier six-key contract.

Explicit byte-acceptance baseline

For the #413 byte-preservation acceptance, the baseline for a custom reader supplying neither observation nor item provenance is the pre-#428 composed Apps capture_context contract, not #428's newly introduced null/default fields. The inferrsi collect label on that legacy-only branch is intentional historical byte identity even though the wrapper entry point is capture-context. It does not invent an entry-point trace in an old-format record. The extended path uses save_retrieval and its explicit wrapper entry point/calls. Genuine packaged-reader #428 captures stay on that extended path and retain main's bytes. This is the recorded integration decision, not a claim that the #428 author has independently confirmed it; the reviewer's request for that confirmation remains open.

D008 and route delta

docs/contracts/d008-wave2-ownership-decision.md is the same canonical record as #422, SHA-256 98644a754c3186752b530e39cd99fc9116cd2fb2d532825673e959fc818ff078. It was not moved, forked or independently reworded.

The three OBS rows in function-owners.md individually record adopted ownership and cite #dashboard-workflow, #profile-records-and-overview, #pre-profile-searches. The baseline header does not imply adoption of every row. This records the delegated architecture decision, not reviewer approval.

profile_timeline no longer decorates stored summaries with events_url; Apps dashboard_snapshot adds the identical route. Tests cover absence from Harness records, the served byte/hash identity and unchanged stored files.

Review-root evidence

  • Projection verification remains at the Apps delivery boundary; Harness supplies the byte limit only. Wrong projection with a consistent digest is rejected.
  • Unencodable assembled text retains invalid_format.
  • The reported E501 and all three I001 findings are fixed. Ruff passes on all 27 changed/hand-resolved Python files.
  • D008 adoption/anchors and the feat: Dashboard 实验性能曲线、事件轨道与证据下钻 #405/feat: 补齐知识检索解释与逐轮候选证据导航 #428 module/resource migrations are implemented.
  • Frozen docs/legacy-knowledge-manifest.json is intentionally unchanged: its old observability paths are historical evidence. Current callers are Apps campaign/views/CLI, not upward Harness imports.
  • Prior dismissed approval and change-request verdicts do not cover current head 9489466a; independent re-review is still required.

Qualification and limits

The local/Linux/package figures and hosted jobs below that name 911ac41, d173eee, or 5ccb2b7 were gathered on those earlier trees. Current head 9489466a has a different tree (b8d36e5c, after later main including #422 / B01). Those earlier results remain evidence about the earlier trees only. They are not a claim that those commands were re-run at 9489466a.

Evidence Actual result
Final-source Windows targeted selection, 15 files, no xdist 296 passed, 1 failed, 4 skipped; 52 subtests passed. Failure: host symlink privilege (WinError 1314); browser dependency absent. Ran immediately before the unchanged source was committed as 911ac41; the log header still names the preceding index/head.
Exact git archive of 911ac41, isolated Linux Chromium, both required browser suites 31 passed, 0 failed/errors/skips. Both layouts and live refresh/navigation exercised.
Same exact Linux archive, eight symlink/security cases 8 passed, 0 failed/errors/skips; includes the Windows-blocked case. Sequential after the browser suites.
Archive source integrity All 3018 exported regular files still byte-identical after tests, 0 differences.
Actual pre-merge Apps oracle 15/15 checks pass, including all eight selection variants and the frozen serialized record.
Main/capture equivalence 21/21 checks pass; four new fixed-record cross-tree sets identical.
CLI / offline / live 42/42 checks pass. CLI and offline output bytes match; rendered-string comparison accounts for Windows newlines.
Final-source sdist → wheel → isolated installation Build/install/check-installed/installed smoke all exit 0; 128 source-grounded records, four Apps templates, both layouts, 7 verified retrievals and 4 searches. Wheel SHA-256 b9bbe81f2eb5af244c0401c19b569bab98a894f79d8ef912ad9378a116dc4706. Scratch SCM version is not the repository SHA.
Retrospective package/source byte proof Export: 3018 tracked files, 0 byte differences versus exact-head archive. Wheel: all 181 tracked Python/HTML files present and byte-identical. This is a new read-only comparison, not a claim that the old logs had head headers.
Hosted Chromium at exact head 31 passed in 77.39s, job132414558683, workflow43584019676; JUnit artifact14109154168.
Full-suite collection 4367 collected, exit 0; collection alone is not a full-suite pass.

Earlier 532-pass/5-skip selection predates the last three-file correction and is not presented as a final-head rerun. Broad local Ruff 0.14.10 reports ten inherited F811 findings on both parents; only changed-file Ruff is claimed green locally. Two historical Windows test_codex_search_delivery.py failures remain disclosed, untouched and not re-measured in this round.

Hosted checks on previous official head 911ac41 (same tree; not a d173eee re-run)

Check Result on 911ac41 Evidence
installed-package (3.10) success job
pr-references failure job
full-check (3.11) success job
dashboard-browser success job
full-check (3.10) success job
installed-package (3.11) success job
declarations success job
lint-and-smoke success job

Both full-check versions on 911ac41: 4343 passed,26 skipped,1 warning,342 subtests passed (3.11:330.02s;3.10:343.94s). Hosted Chromium on 911ac41: 31 passed in 77.39s. These completed jobs executed the 911ac41 tree; they must not be described as a re-run of d173eee.

The pr-references failure on 911ac41 evaluated the preceding remote body containing negated Issue-closing syntax. That body was later replaced (this text uses Refs).

Hosted checks on previous official head d173eee (different tree; not a 5ccb2b7 re-run)

A new hosted run started after the 2026-11-14 19:36 Asia/Shanghai replacement (same tree, new commit SHA). First read-back at that time: lint-and-smoke (job), declarations (job), pr-references (job), and installed-package 3.10/3.11 (jobs, 3.11) already success; full-check 3.10/3.11 and dashboard-browser were still in_progress and are not reported as passed. The already-completed pr-references success is a new check run on SHA d173eee, not a reuse of the failed 911ac41 job.

Hosted checks on previous official head 5ccb2b7 (different tree; not a 9489466a re-run)

A new hosted run started after the 2026-11-15 07:44 Asia/Shanghai ordinary push of that merge onto then-main (including #437). First read-back 2026-11-15 07:46 Asia/Shanghai:

Check Result on 5ccb2b7 Evidence
lint-and-smoke success job
declarations success job
pr-references success job
installed-package (3.10) success job
installed-package (3.11) success job
knowledge-model-policy success (Not applicable) run
full-check (3.10) success job completed 2026-11-15 07:50:34 Asia/Shanghai
full-check (3.11) success job completed 2026-11-15 07:51:54 Asia/Shanghai
dashboard-browser success job completed 2026-11-15 07:46:26 Asia/Shanghai

full-check 3.10/3.11 and dashboard-browser completed successfully at 07:46:26–07:51:54 Asia/Shanghai on 5ccb2b7. Those completed jobs executed the 5ccb2b7 tree; they must not be described as a re-run of 9489466a. At that read-back GitHub mergeable=true and mergeable_state=blocked; auto_merge was null, and no amy-why-3459 or zengchuang-hw Approve existed on 5ccb2b7.

Local Linux evidence on previous official head 5ccb2b7 (not a 9489466a re-run)

On the shared Debian 13.7 / Python 3.13.5 host that previously produced the S01 qualify PASS, an exact git archive of 5ccb2b7 / tree 17d5550f (completed 2026-11-15 07:15 Asia/Shanghai, before this push) gave 300 passed, 0 failed/errors/skips, covering the four exact codex/workswarm export and knowledge-reads nodes plus ten OBS-impacted modules. Native 45-second timeouts and integrity checks were not relaxed. This is candidate-host evidence, not hosted CI and not a full-suite or isolation-regression pass.

After the 2026-11-15 review request for a main-only control, the same host, existing S01 venv, flags, native 45-second timeout, integrity checks, and fresh basetemp were reused on the already-verified git archive of then-main 8c321005 / tree c749eac3 (completed 2026-11-15 08:01:45 Asia/Shanghai). The same four isolated nodes also passed: test_isolated_runtime_can_export_dashboard × codex/workswarm in 2.036s, and test_isolated_runtime_and_exact_knowledge_reads × codex/workswarm in 4.063s, exit 0, no failures/errors/skips or outer timeout. On this comparable Linux host those nodes fail on neither this branch (T315 export 1.775s / reads 4.305s) nor plain main. The original isolated WorkSwarm 45-second child timeout remains an unpassed prior Windows record and is not re-characterized as a branch-only defect. The earlier same-host Windows comparison versus main is still inconclusive (main hit a 120-second outer packaging cutoff) and is not claimed as a confirmed main-baseline failure.

Hosted checks triggered on current head 9489466a

A new hosted run started after the 2026-11-15 11:04:45 Asia/Shanghai ordinary fast-forward of this merge onto current main. Ready-lane workflow run 43670684461 concluded success at 11:12:57 Asia/Shanghai.

Check Result on 9489466a Evidence
lint-and-smoke success job completed 2026-11-15 11:04:56 Asia/Shanghai
declarations success job completed 2026-11-15 11:05:07 Asia/Shanghai
pr-references success job completed 2026-11-15 11:04:49 Asia/Shanghai
installed-package (3.10) success job completed 2026-11-15 11:05:09 Asia/Shanghai
installed-package (3.11) success job completed 2026-11-15 11:05:06 Asia/Shanghai
full-check (3.10) success job completed 2026-11-15 11:12:57 Asia/Shanghai
full-check (3.11) success job completed 2026-11-15 11:10:48 Asia/Shanghai
dashboard-browser success job completed 2026-11-15 11:06:54 Asia/Shanghai

full-check 3.10/3.11 and dashboard-browser completed successfully at 11:06:54–11:12:57 Asia/Shanghai on 9489466a. GitHub mergeable=true; mergeable_state=blocked (required reviews outstanding; all listed hosted checks on this head have succeeded). auto_merge is null. No amy-why-3459 or zengchuang-hw Approve exists on this head.

Local Linux evidence on exact current head 9489466a

On the shared Debian 13.7 / Python 3.13.5 host that previously produced the S01 qualify PASS, an exact git archive of 9489466a / tree b8d36e5c (archive SHA-256 3845e65e65a886bce22eb649d32fac07015dc06816362de9c212f58c98e21ab1, reconstructed tree verified; completed 2026-11-15 11:03:20 Asia/Shanghai, before this push) gave 362 passed, 0 failed/errors/skips: isolated test_isolated_runtime_can_export_dashboard × codex/workswarm in 2.287s, test_isolated_runtime_and_exact_knowledge_reads × codex/workswarm in 4.305s, and the merged B01/OBS contract selection (16 files including tests/test_dashboard_workflow.py and the OBS/B01 boundary and capture modules) 358 passed in 15.178s. One worker; fresh basetemp; native 45-second timeouts and integrity checks were not relaxed. This is candidate-host evidence for this exact head, not hosted CI and not a full-suite or isolation-regression pass. Earlier 5ccb2b7 Linux results do not validate this head. No new isolated-node control on main 9ede1835 was run in this round. The earlier same-host Windows comparison versus main remains inconclusive and is not claimed as a confirmed main-baseline failure.

Diff and history provenance

Against current main 9ede1835d16352b60c559302882bf2cea3e19c0d: 78 files, +1445 / −727. 9ede1835..9489466a contains 6 commits: d173eee, e6804db8, 6e8dc01b, afca605b, 5ccb2b7, and 9489466a. Current main is an ancestor; GitHub mergeable=true. The earlier official heads 5ccb2b7 (tree 17d5550f), d173eee (tree 2e0c550e, parent 57f8e8a) and 911ac41 remain as ancestry or rollback provenance; they are not the current tip and do not have the current tree.

No policy cutover, frozen-manifest edit, or other-PR implementation is added by this merge beyond integrating already-landed main (including #437 and #422). Benchmark/S01/R01/CLI migrations remain their respective deliveries. Independent reviewer acceptance remains outstanding. The still-open review item is amy-why-3459's own #428 layout decision for the pre-#428 no-observation / no-provenance composed Apps capture_context baseline; it is not claimed resolved by this body update. The earlier WorkSwarm timeout concern was closed in #425 (comment) .

Copy link
Copy Markdown
Collaborator Author

@amy-why-3459 @zengchuang-hw Please review OBS at 3b1e49150d7265b07138bdf48100579553433ef2: the transition package has been dissolved into H records, Apps views and the K projection, including placement of the #384 view consumers. Current main with #397 is integrated. Please check module ownership, record/view dependency boundaries, and the test-only portability changes. The PR body separates pre-merge and post-integration evidence and discloses the two remaining Windows test failures; it does not claim overall isolation complete. Refs #413; no Issue closure or merge is requested.

@Dong1017 Dong1017 added area:harness Harness module: profile, A/B loop, quality gates, evidence reports kind:task Bounded delivery task with a delegated slice labels Nov 13, 2026

Copy link
Copy Markdown
Collaborator

Reviewed range: base 8150ee048af6503070fa71768fbf64dffcc1a77e (merge base; current main is fe16b29388de29708d30ea388b589355540f3172, and the PR still merges cleanly onto it) → head 3b1e49150d7265b07138bdf48100579553433ef2. This is a full review of a new PR: 66 files, +1056/−646.

What I checked:

  • harness/records/* imports only stdlib, sibling record modules and inferrsi.__version__. No Knowledge, Apps or Benchmark edge.
  • No inferrsi.observability import remains in src/ or tests/. pyproject.toml package data and tools/plugin_bundle.py now point at apps/views/*.html.
  • I compared every top-level function and class in main's observability/*.py with its new home at the AST level, normalizing the four evidence renames plus _safe_argv/_snapshot/_object_snapshot/_file_ref/_read_regular/_append_index/_item. Only import paths changed, apart from the intended backends= injection in create_campaign and the capture_context / verify_capture split. The issue below comes from that split.

Blocking: load_campaign_capture lost the assembly-projection check

  • src/inferrsi/apps/views/capture_delivery.py L7 now imports verify_capture from inferrsi.harness.records.knowledge_capture, and L115 uses it. That Harness verifier (harness/records/knowledge_capture.py L90–152) now only checks that assembled_sha256 matches the stored assembled_text. It no longer checks that assembled_text is the projection of the listed resources. That check moved to apps/campaign.py::verify_capture (L78–89). optimization_story.py L17 imports the Apps version. capture_delivery.py does not.
  • On main, observability/capture_delivery.py used the full verifier. Here is a local repro with the same Reader as test_campaign_record_injection.py. I appended text to assembled_text and recomputed assembled_sha256, which is the "consistent" case in your own test_harness_checks_stored_bytes_and_apps_checks_the_projection:
    • main: load_campaign_capture → ValueError: invalid or mismatched campaign capture (assembly_mismatch)
    • this head: apps.campaign.verify_capture → assembly_mismatch, but apps.views.capture_delivery.load_campaign_capture accepts the capture.
  • So search_attribution.py L300 (via load_campaign_capture) now accepts captures that main rejected. That is a behavior change in a PR that claims to only move code.
  • Expected fix: in capture_delivery.py, import verify_capture from inferrsi.apps.campaign (Apps → Apps, so no boundary issue). Keep MAX_CONTEXT_CAPTURE_BYTES from H. Then add a regression test so that a capture with consistent text and digest but a wrong projection is rejected by load_campaign_capture / import_search.

Question (please confirm or restore)

  • harness/records/knowledge_capture.py L149–150: if assembled_text cannot be UTF-8 encoded, the reason is now assembly_mismatch. On main it was invalid_format (main observability/knowledge_capture.py L185–186). Is this reason-code change intended? If not, please restore invalid_format so the move stays behavior-preserving.

Non-blocking

  • docs/legacy-knowledge-manifest.json L44 and L138 still cite observability/campaign_records (L12) imports BACKENDS and observability/knowledge_capture (L20) … as consumer evidence. After this PR those paths no longer exist. You could point them at apps/campaign.py or mark them historical.

Not verified here: I did not run the full pytest suite on this host. I only ran the targeted repro above. I did not re-check the two Windows-only test_codex_search_delivery.py failures you disclosed.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR review verdict — DO NOT PASS

Reviewed base fe16b29388de29708d30ea388b589355540f3172 (PR target main) / merge-base 8150ee048af6503070fa71768fbf64dffcc1a77e and head 3b1e49150d7265b07138bdf48100579553433ef2.

Blockers

  1. load_campaign_capture dropped the assembly-projection check (behavior regression).

    • src/inferrsi/apps/views/capture_delivery.py L7 imports verify_capture from inferrsi.harness.records.knowledge_capture, and L115 uses that H-only verifier.
    • H verify_capture (harness/records/knowledge_capture.py L90–153) only checks stored bytes / assembled_sha256. The projection check (assemble_context_text(contexts) == assembled_text) lives in apps/campaign.py::verify_capture L78–90.
    • On main, observability/capture_delivery.py used the full verifier. Local repro with the same Reader as tests/test_campaign_record_injection.py: append to assembled_text and recompute assembled_sha256 → H returns verified, Apps returns assembly_mismatch, but load_campaign_capture accepts the capture. So search_attribution / import_search can accept captures main rejected.
    • Expected: import verify_capture from inferrsi.apps.campaign (Apps→Apps); keep MAX_CONTEXT_CAPTURE_BYTES from H; add a regression test that a consistent-digest / wrong-projection capture is rejected by load_campaign_capture.
  2. Ready-lane CI fails on this head (ruff I001).

    • full-check 3.10/3.11 and lint-and-smoke concluded failure on 3b1e4915.
    • Six import-sort errors in: apps/views/capture_delivery.py, codex_search.py, search_archive.py, search_attribution.py, tests/test_search_archive.py, tests/test_search_attribution.py (all auto-fixable). Re-review needs green required checks on the fixed head.
  3. Governing #413 required D008 owners before moving dashboard_workflow / profile_timeline.

    • Issue acceptance: 「dashboard_workflow.py / profile_timeline.py 须先补 D008 owner 再搬」; Amy’s #413 comment asked to land owners first.
    • This PR moves both modules and explicitly leaves docs/contracts/function-owners.md unchanged (no D008 rows). Either add the owner rows (or record an authorized scope exception on #413) before claiming the slice complete.

Notes (not blockers by themselves)

  • UTF-8 encode failure on assembled_text in H verify_capture now returns assembly_mismatch (L149–150); main returned invalid_format. Confirm intent or restore invalid_format for a move-only change.
  • Disclosed Windows test_codex_search_delivery.py failures look like pre-existing #384 /bin/zsh + backslash path issues (import-path-only delta vs main); not treated as OBS dissolve defects here.
  • Package dissolve itself largely matches scope: observability/ absent; H records have no K/Apps imports; Apps injects BACKENDS / TASK_RELEVANCE; isolation_complete remains false. Those do not clear the blockers above.

@zengchuang-hw

Copy link
Copy Markdown
Contributor

补充一项 Apps 侧检视意见,针对 #413 已记录的退出条件。当前 PR 已移动 dashboard_workflow.py 和 profile_timeline.py,但 diff 中没有 docs/contracts/function-owners.md 的 D008 归属记录。请在本 PR 补齐函数级归属,供独立评审确认。建议分别写明:

  • dashboard_workflow 的 command_state / run_workflow / validation_progress 是 Apps 只读展示投影。
  • profile_timeline 的 attach_profile、固定字节校验和按摘要读取归 H records。请单独说明 pre_profile_searches 的归属。当前它由 Dashboard 消费并生成展示列表,请把它放到 Apps views,或在归属表中记录留在 H 的理由。

这项与 Amy 的 capture projection 检视 可以一起复核。

Copy link
Copy Markdown
Collaborator

Incremental review: 3b1e49150d7265b07138bdf48100579553433ef2 → 71327f195f6dd232158531baf28a7cb1fd7a3483. That is one commit, "style: sort imports in #384 view modules after the OBS retarget". It touches 6 files, +22/−11.

  • The new commit only reorders and splits import statements in apps/views/{capture_delivery,codex_search,search_archive,search_attribution}.py and two test files. It changes no behavior and should clear the ruff I001 failure.
  • Still blocking, not addressed yet: src/inferrsi/apps/views/capture_delivery.py L16 still imports verify_capture from inferrsi.harness.records.knowledge_capture, and L119 uses it. So load_campaign_capture still accepts a capture whose assembled_text and assembled_sha256 agree with each other but do not match the resource projection. Main rejects that capture. The expected fix is the same as in my earlier comment (6850066896): import the Apps verifier from inferrsi.apps.campaign and add a regression test.
  • Still open: the question about the UnicodeError reason code (harness/records/knowledge_capture.py L148–150, assembly_mismatch vs main's invalid_format).
  • I agree with the D008 owner-row request in 6850148874 (dashboard_workflow, profile_timeline, and where pre_profile_searches belongs). It should be settled in the same revision.

@zengchuang-hw

Copy link
Copy Markdown
Contributor

Apps 侧复核了 cf08a878。pre_profile_searches 已迁入 apps/views/profile_searches.py,D008 补了三条函数归属。load_campaign_capture 恢复了完整的 Apps 投影校验,invalid_format 也与 main 对齐。Windows 定向检查 124 项通过,覆盖 capture、profile、Dashboard、trace 和模块边界,Ruff 与差异检查通过。归属表目前标为待正式评审,请在合入前记录 D008 的接受决定。

amy-why-3459
amy-why-3459 previously approved these changes Nov 13, 2026

@amy-why-3459 amy-why-3459 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

PR review verdict — PASS
Reviewed base fe16b29388de29708d30ea388b589355540f3172 (current main, merged in by 41bd362e) and head cf08a8784d105f78048d1d962b428d86df555047. This is an incremental review of 71327f195f6dd232158531baf28a7cb1fd7a3483..cf08a8784d105f78048d1d962b428d86df555047, checked against my comments 6850066896 / 6850270976 and the blockers in review 5889336956.

  1. Projection check restored. apps/views/capture_delivery.py now imports verify_capture from inferrsi.apps.campaign, which is Apps → Apps and adds no H → Apps edge. From harness.records.knowledge_capture it now imports only MAX_CONTEXT_CAPTURE_BYTES. I re-ran my repro at this head: a capture whose assembled_text and assembled_sha256 agree but do not match the projection is now rejected by load_campaign_capture (assembly_mismatch). A genuine capture is still accepted. The new test_load_campaign_capture_rejects_consistent_digest_with_wrong_projection covers this. Resolved.
  2. Reason code. harness/records/knowledge_capture.py L148–149 returns invalid_format again when assembled_text cannot be encoded, as on main. The H and Apps verifiers both give invalid_format (checked locally, and test_harness_keeps_invalid_format_when_assembled_text_is_not_utf8 covers it). Resolved.
  3. D008 rows. docs/contracts/function-owners.md adds rows for dashboard_workflow (Apps views), profile_timeline record/byte paths (H records) and pre_profile_searches (Apps views, apps/views/profile_searches.py). They match the code placement. The rows are explicitly marked "owner pending formal review". This approval covers the code and the recorded placement. It is not the D008 acceptance decision, which still has to be recorded before merge, as 6850491471 notes.
  4. The import-sort commit fixed ruff I001. The main merge 41bd362e only brings in #400 files. Hosted checks at this head are all successful: lint-and-smoke, full-check 3.10/3.11, installed-package 3.10/3.11, declarations and pr-references.

Non-blocking, still open: docs/legacy-knowledge-manifest.json L44/L138 still cite the old observability/... consumer paths. I did not run the full pytest suite locally.

@zengchuang-hw

Copy link
Copy Markdown
Contributor

main 已合入 #405(d61552eb)。我用当前 #425 提交验证合并,apps/views/dashboard_data.py 与 dashboard_external.py 有内容冲突,#405 新增的 dashboard_experiments.py 和 experiment_view.html 也需要随展示模块迁入 apps/views。请同步最新 main 后复核 Dashboard 实验页、模板打包、外部证据下钻和既有 trace,并维持 H records 的导入边界。

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR review verdict — DO NOT PASS

Reviewed base fe16b29388de29708d30ea388b589355540f3172 and head cf08a8784d105f78048d1d962b428d86df555047; main has since advanced to f7b640f2 (relevant to the second blocker). This is an incremental review; I agree with @amy-why-3459's review 5889711958 on the projection fix and do not repeat it.

Blockers

  • docs/contracts/function-owners.md:22-24 adds the three D008 rows but all still say "owner pending formal review", while the moves are in this diff. #413 makes recording the D008 owner a precondition of the move. Record the acceptance (or an accepted exception) and cite it here; this is the same blocker as #422.
  • This head no longer merges onto current main (f7b640f2): a local git merge-tree reports content conflicts in src/inferrsi/apps/views/dashboard_data.py and src/inferrsi/apps/views/dashboard_external.py, and #405's new observability/dashboard_experiments.py and experiment_view.html land in the directory this PR dissolves, so they must move to apps/views (with package data/imports) before the "observability disappears" claim holds on merge. Rebase, move the two files and rerun CI; the approval on cf08a87 will need a fresh review.

Issue completion
#413 is partially complete: records/views/K ownership, removal of the two edges, no forwarding shells and byte-identical fixed-record behavior are met; the D008 acceptance and the merge with main are still missing.

Check scope
Read #413/#371, all comments and reviews, and the head diff; ran the 26 changed test files (462 collected, 461 passed, 1 skipped; one environmental test deselected because it fails identically on main). Did not run the full suite, Ruff, Windows or host installs.

Comment thread docs/contracts/function-owners.md Outdated
| `harness/scenarios/external` `read_metric`/`validate_metric` | B semantic validation; `execute_command` and retention → H | no whole-file ownership; offline assess executes nothing |
| `campaign_records` `STAGES`/claim capture/reconciliation | H records; dashboard/report presentation → Apps | first remove the `campaign_records → dashboard_data` reverse dependency; #333 is Proposed and no claim is made that a unified event envelope is accepted |
| `catalog.repository_pack`/`REPO_TYPES` | D020 neutral raw-data technical leaf; target interpretation stays H | K does not expose the pack reader publicly; `infra` changes only its same-leaf import; seven K bodies/root entries/tests move together |
| `apps/views/dashboard_workflow` `command_state`/`run_workflow`/`validation_progress` (**added with the OBS dissolve; owner pending formal review**) | Apps views: read-only presentation projection of workflow and command state | The functions only project existing records for the dashboard; this row records the landing and does not claim formal D008 acceptance |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These three rows (22–24) still say owner pending formal review, while the moves are already in this diff. #413 makes recording the D008 owner a precondition of the move. Please record the acceptance (or an accepted exception) and cite it here; this is the same blocker as #422.

Comment thread docs/contracts/function-owners.md Outdated
| `campaign_records` `STAGES`/claim capture/reconciliation | H records; dashboard/report presentation → Apps | first remove the `campaign_records → dashboard_data` reverse dependency; #333 is Proposed and no claim is made that a unified event envelope is accepted |
| `catalog.repository_pack`/`REPO_TYPES` | D020 neutral raw-data technical leaf; target interpretation stays H | K does not expose the pack reader publicly; `infra` changes only its same-leaf import; seven K bodies/root entries/tests move together |
| `apps/views/dashboard_workflow` `command_state`/`run_workflow`/`validation_progress` (**added with the OBS dissolve; owner pending formal review**) | Apps views: read-only presentation projection of workflow and command state | The functions only project existing records for the dashboard; this row records the landing and does not claim formal D008 acceptance |
| `harness/records/profile_timeline` `attach_profile`, fixed-byte verification, and digest reads (`read_profiles`/`profile_event_table`) (**added with the OBS dissolve; owner pending formal review**) | H records: attach a reviewed profile and verify stored bytes | Record and byte-integrity paths stay in H; this row records the landing and does not claim formal D008 acceptance |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional, not blocking: this row describes H as attaching and byte-verifying the profile, but _compile also builds the dashboard overview stored with the record (top-7 lanes per kind, 256 display buckets, label truncation, top-10 kernels). If D008 is accepted as worded, state explicitly that this precomputed overview stays in H because it is stored content-addressed at attach time, or track moving it to Apps as a follow-up.

Copy link
Copy Markdown
Collaborator

Incremental review: cf08a8784d105f78048d1d962b428d86df555047 → b455414721d36563ca9b7b66284651dbcd84ee7e. That is one merge commit, "Merge branch 'main' into impl/obs-dissolve-2". It brings in main at a590ccb25596396a592f237105166ade4aedeaaa, which is still current main, and it merges cleanly.

What I checked in the merge resolution:

  • feat: Dashboard 实验性能曲线、事件轨道与证据下钻 #405's dashboard_experiments.py and experiment_view.html now live in src/inferrsi/apps/views/, and nothing is left under observability/. The fixture and both test files import from inferrsi.apps.views.* / inferrsi.harness.records.optimization_log. No inferrsi.observability import remains in src/, tests/ or tools/.
  • In the moved files, _text is replaced by inferrsi.harness.records.evidence.sanitized_text. I diffed the two function bodies and they are identical, including the signature, defaults and regexes, so this changes no behavior. dashboard_external.py now takes STAGES from H evidence, which matches the earlier rename.
  • pyproject.toml package data apps/views/*.html and the tools/plugin_bundle.py L64 template rule already cover experiment_view.html.
  • Locally at this head, tests/test_dashboard_experiments.py and tests/test_campaign_record_injection.py all pass. I did not run the browser test or the full suite.

This resolves the merge/#405 part of review 5891935385.

Blocking: lint fails at this head, so lint-and-smoke and full-check (3.10/3.11) are red. With ruff 0.17.5 and the repo's config (select = ["E","F","I"], line-length 100), I get 4 errors:

  • src/inferrsi/apps/views/dashboard_data.py L936: E501, 105 > 100. The line is experiments = project_experiments(sanitized_text(campaign.get("campaign_id"), "single"), rows, story), which was introduced by this merge.
  • src/inferrsi/apps/views/dashboard_experiments.py L33, L75, L307: I001. Each local import block needs a blank line between from inferrsi.harness.records.evidence import sanitized_text and from .dashboard_data import _number (ruff check --fix handles all three).

Still open from before: docs/contracts/function-owners.md L22–24 still mark the three D008 rows "owner pending formal review". The D008 acceptance, or an accepted exception, still has to be recorded before merge, as 6850491471 and 5891935385 say. My approval on cf08a878 was dismissed, so this head needs a fresh review once lint is green.

Copy link
Copy Markdown
Collaborator Author

@amy-why-3459 @zengchuang-hw @david6666666 Please re-review #425 at b455414721d36563ca9b7b66284651dbcd84ee7e (ordinary merge of current main a590ccb25596396a592f237105166ade4aedeaaa, including #405 / #424 / #427).

This head moves the #405 experiment page and template into apps/views (rename-aware three-dot vs main: 71 files, +1033/−573). Official Apps archive and request-binding files match main. The H-record sanitized_text / STAGES import boundary is kept. function-owners now records that profile_timeline._compile builds the bounded dashboard overview stored with the record. Narrow regression on this head: 188 passed, 3 skipped, exit 0, 2026-11-14 10:43:19–10:44:52 Asia/Shanghai (UTC+8).

Still open and not self-approved: the three D008 owner rows remain "owner pending formal review". Prior approval of cf08a878 does not cover this merge commit. The two disclosed Windows test_codex_search_delivery.py failures are still unpatched. This is a request for re-review of the new head, not a claim that every comment or #413 acceptance item is cleared, and not a request to merge or to close the issue.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR review verdict — DO NOT PASS

Reviewed base a590ccb25596396a592f237105166ade4aedeaaa and head b455414721d36563ca9b7b66284651dbcd84ee7e.

Incremental re-review after author request #425 (comment). Prior cursor[bot] CR was on cf08a878…; this head is the ordinary merge of current main (incl. #405/#424/#427). Independent reviewer; not the PR author. Governing Issue #413.

Resolved since prior CR

  • Merge/#405 placement: dashboard_experiments.py and experiment_view.html live under apps/views/; no src/inferrsi/observability package remains; no inferrsi.observability imports in src/tests/tools.
  • Prior projection/invalid_format blockers remain fixed (capture_delivery uses Apps verify_capture; H keeps MAX_CONTEXT_CAPTURE_BYTES).
  • Local focused tests at this head: tests/test_dashboard_experiments.py + tests/test_campaign_record_injection.py all passed.

Blockers (must clear before Approve)

  1. Required lint/full-check are red on this head. Reproduced with repo ruff (E/F/I, line-length 100):
    • src/inferrsi/apps/views/dashboard_data.py:936 E501 (105 > 100) on the project_experiments(...) call introduced by this merge.
    • src/inferrsi/apps/views/dashboard_experiments.py:33,75,307 I001 — blank line needed between sanitized_text and relative dashboard_data imports (ruff check --fix handles the three).
      Hosted lint-and-smoke and full-check 3.10/3.11 are failure on b4554147…. Expected: green required checks on the fixed head.
  2. D008 acceptance still missing. docs/contracts/function-owners.md:22-24 still mark the three OBS rows "owner pending formal review" while the moves are already in the diff. #413 requires recording owner acceptance (or an accepted exception) before merge. Cite the acceptance in those rows.

Notes (non-blocking)

  • Author disclosed Windows test_codex_search_delivery.py failures remain unpatched.
  • Amy's APPROVE of cf08a878 was dismissed by this push; this CR does not Approve.

No merge.

Copy link
Copy Markdown
Collaborator

Incremental review: b455414721d36563ca9b7b66284651dbcd84ee7e...911ac41eec01b660084ac5dd3c92aa6435c795a1. That's five commits. Two come from main (ecce581c #439, 57f8e8a4 #428). Then 9aa890d9 merges main, 6f36c57d moves the profile route into Apps and records D008, and 911ac41e keeps the earlier capture bytes. Not approving yet.

Resolved from my last comment (6870464543) and review 5901513348

  • Lint: the E501 at apps/views/dashboard_data.py L936 is wrapped, and the three I001 blocks in dashboard_experiments.py are fixed. lint-and-smoke and full-check 3.10/3.11 are green on 911ac41e.
  • feat: 补齐知识检索解释与逐轮候选证据导航 #428 merge: retrieval_projection.py and knowledge_view.html live in apps/views/, and no observability/ package or import remains. In the moved files, _inside → evidence.inside has an identical body. _relative_location → relative_location differs only by the _text → sanitized_text rename I checked before.
  • events_url: it's removed from H _verified_summary (harness/records/profile_timeline.py ~L369) and added in apps/views/dashboard.py L322-323. dashboard_snapshot is the only consumer path, through the live server and static render, and review_template.html L417 reads it from the snapshot. So the external view response is unchanged, and the new test pins that the stored bytes are unchanged.
  • D008: function-owners.md L22-24 now cite d008-wave2-ownership-decision.md. As I said on benchmark: split the legacy run/evaluate chain into B, H, and Apps legacy (B01) #422, the adoption is recorded by RSI-master under the delegation of Dong1017, who is also this PR's author. I'm not blocking on that, but a maintainer confirmation on task: OBS — 解散 observability 过渡包并归位记录与展示 #413 would still help.

Blocking

  1. pr-references fails on 911ac41e, and it's a real problem. I reproduced it locally with tools/check_pr_references.py: body L9 contains "This update does not close task: OBS — 解散 observability 过渡包并归位记录与展示 #413". GitHub closes task: OBS — 解散 observability 过渡包并归位记录与展示 #413 on merge even when the sentence negates it. Please write Refs #413 instead.
  2. The PR body is stale. L8 still describes the a590ccb2 merge. L9, L33 and L36 say D008 is "still required" or "owner pending formal review", which contradicts L22-24 at this head. Please update the body for 911ac41e: the feat: 补齐知识检索解释与逐轮候选证据导航 #428 merge, the D008 record, and the events_url move.

Question on 911ac41e (please answer before I approve)

Non-blocking

I ran check_pr_references.py locally. I did not run pytest or the browser test this round.

History-only rewrite for PR 425. This commit has a single parent (current main)
and does not rebase or replay unsquashed #397 / H02 review-stack commits.

Method: head already contains current main; transplanted official tree 911ac41
Official head at preparation: 911ac41
Current main at preparation: 57f8e8a

No file-content change relative to that method's resulting tree.
Local candidate only; no push.

Refs #413

Agent-assisted-by: Claude Code / claude-fable-5-2 [effort=xhigh] (author)
Agent-assisted-by: Grok Bot (route prototype author)
Agent-assisted-by: Grok Bot
Agent-assisted-by: Codex (author)
Agent-assisted-by: Claude Code / claude-fable-5-2 effort=xhigh (author)
Signed-off-by: GUOGUO <xwdong1998@163.com>
@Dong1017
Dong1017 force-pushed the impl/obs-dissolve-2 branch from 911ac41 to d173eee Compare November 14, 2026 11:36

Copy link
Copy Markdown
Collaborator

Re-checked 911ac41eec01b660084ac5dd3c92aa6435c795a1...d173eee822d7902011373011155706b1d31de0a5. d173eee8 is a single-parent squash onto main 57f8e8a4. Its tree, 2e0c550e05722c795edb3b8de4f258e87e7c860d, is identical to the tree of 911ac41e, so there is no code change since my last comment (6875869038). Not approving yet.

Resolved

Still open

  1. feat: 补齐知识检索解释与逐轮候选证据导航 #428 author confirmation. Body L38 says that confirmation "remains open". Since this branch changes feat: 补齐知识检索解释与逐轮候选证据导航 #428's output for readers without observations, I'd still like that confirmation on the PR or on task: OBS — 解散 observability 过渡包并归位记录与展示 #413 before I approve.
  2. The body is stale again for the new head. L8-10 still give the pushed head as 911ac41e, describe the 9aa890d9 merge plus follow-ups, and say "no history rewrite". The actual head is now the squash d173eee8. Please update the head, the history description and the CI table for d173eee8.

Non-blocking (unchanged)

Checks on d173eee8 (read just now): pr-references, declarations, lint-and-smoke, installed-package 3.10/3.11 and dashboard-browser succeeded. full-check 3.10/3.11 are still in progress.

I compared commit trees and the PR body. I did not run tests this round.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR review verdict — DO NOT PASS

Reviewed base 57f8e8a4915b38201d9fa58d4d05acbe3c4199ee / current origin/main (advanced past that tip) and head d173eee822d7902011373011155706b1d31de0a5. Tree identical to 911ac41 (2e0c550e…). Independent re-review; governing #413. Prior cursor[bot] CR was on b455414….

Resolved since CR 5901513348

  • Lint E501/I001 fixed; Ready CI all green on this head (lint-and-smoke, full-check 3.10/3.11, installed-package, declarations, pr-references, dashboard-browser).
  • D008 OBS rows adopted in function-owners.md; d008-wave2-ownership-decision.md present with OBS Adopted anchors.
  • observability/ gone; Apps verify_capture projection path retained; #405 experiment pages under apps/views.

Blocker (must clear before Approve)

  1. mergeable_state=dirty. GitHub and local git merge-tree vs current main fail with content conflicts in docs/module-layout.md, pyproject.toml, tests/fixtures/knowledge_retrieval.py, tests/test_codex_plugin.py (main advanced with #426 K02 while this head still parents 57f8e8a). Expected: rebase/merge onto current main, resolve conflicts, push, green Ready CI, then independent re-review on the new head.

No merge.

Ordinary merge of main at acc881f, which
moved the packaged Knowledge corpus to knowledge/data and the repository
pack descriptions to harness/data. No rebase, cherry-pick or history
rewrite.

Four files conflicted. Each resolution keeps both sides:

- pyproject.toml: keep the K02 package-data tables for inferrsi.knowledge
  and inferrsi.harness. The root package declares only the dissolved view
  templates, apps/views/*.html, in place of observability/*.html.
- docs/module-layout.md: keep the K02 statement of the resource move and
  name apps/views/ as the home of the dashboard templates.
- tests/fixtures/knowledge_retrieval.py: keep the Apps and Harness record
  imports of the dissolved package and add the K02 source_entry import
  that the K02 fixture body uses.
- tests/test_codex_plugin.py: expect the K02 resource roots and the
  apps/views templates in the staged plugin runtime.

Agent-assisted-by: Claude Code / claude-fable-5-2 [effort=xhigh] (merge integration)
Signed-off-by: GUOGUO <xwdong1998@163.com>
Use the status sentence of the old-run split branch so that the shared
header of docs/contracts/function-owners.md is byte-identical in both
branches. The table stays a Proposed baseline, individually adopted
entries are identified by their linked decision records, and the wording
grants no blanket acceptance. No row, owner or decision record changes.

Agent-assisted-by: Claude Code / claude-fable-5-2 [effort=xhigh] (doc wording alignment)
Signed-off-by: GUOGUO <xwdong1998@163.com>
Ordinary merge of accepted main 37220b1. Preserve the original PR ancestry and canonical D008 record, matching function-owner headers, and package payload bytes.

Resolve only the two CLI import regions as a proven union: retain Apps capture_context, add main knowledge_reader/read, and remove unused KnowledgeStore and the obsolete duplicate observability binding. Preserve six-key/no-observation bytes and real-observation provenance.

Verification: changed CLI Ruff E/F/I, diff check, byte/AST invariants and 5 focused Apps read/campaign regression tests passed on this exact staged tree. Prior broader evidence remains tied to its recorded tree.

Assisted-by: Grok Bot (deterministic integration and validation; no coding-model call).
Signed-off-by: GUOGUO <xwdong1998@163.com>
Local preservation only. Original isolated WorkSwarm regression remains unpassed (45-second child timeout); host/main comparison is inconclusive. No acceptance or remote CI success claimed.

Signed-off-by: GUOGUO <xwdong1998@163.com>

Copy link
Copy Markdown
Collaborator

Incremental review: d173eee822d7902011373011155706b1d31de0a5...5ccb2b7fd9d0b86c153349318280c426d9ce565c. That's four commits: e6804db8 (merges main acc881fe, K02), 6e8dc01b (function-owners header wording), afca605b (merges main 37220b12), and 5ccb2b7f (merges main 8c321005, which is still current main). Not approving yet.

How I checked the merges: I compared the PR's net diff against its base before (57f8e8a4...d173eee8) and after (8c321005...5ccb2b7f). Both touch the same 80 files, and 71 of them have identical patches. The other nine differ only where main moved underneath:

  • pyproject.toml: the root package data is now just ["apps/views/*.html"]. The K02 inferrsi.knowledge / inferrsi.harness data tables stay as they are on main.
  • docs/module-layout.md: keeps the K02 resource-move wording and points the templates to apps/views/.
  • src/inferrsi/cli.py: keeps apps.campaign.capture_context and adds main's apps.knowledge.knowledge_reader / read. At this head, cli.py has no observability import left. The remaining hunks are line-offset shifts.
  • tests/fixtures/knowledge_retrieval.py and tests/test_codex_plugin.py: keep the K02 source_entry import and the knowledge/data / harness/data roots, plus the apps/views templates.
  • docs/architecture.md, docs/dashboard.md, tools/plugin_bundle.py: same patches as before, just at shifted line numbers.

I found no unexpected changes beyond the merges.

Resolved since my last comment (6876763079)

  • The body is current for 5ccb2b7f: head, parents, tree, history and diff size are all correct (L8-9, L121).
  • Non-blocking point from before: function-owners.md L3 is now byte-identical to benchmark: split the legacy run/evaluate chain into B, H, and Apps legacy (B01) #422's head e427c42c, so the two PRs won't conflict on L3 anymore.
  • cursor[bot]'s mergeable_state=dirty blocker (review 5904444601) is fixed. main is an ancestor, and GitHub reports mergeable=true.
  • Checks on 5ccb2b7f (read just now): lint-and-smoke, declarations, pr-references, installed-package 3.10/3.11, full-check 3.10/3.11 and dashboard-browser all succeeded.

Still open

  1. feat: 补齐知识检索解释与逐轮候选证据导航 #428 author confirmation. I still need this before I approve. Body L123 itself says it "remains open". The branch still gives feat: 补齐知识检索解释与逐轮候选证据导航 #428's output a different layout for readers without an observation or provenance (L29-31: six keys, inferrsi collect, no retrieval). So I'd like the feat: 补齐知识检索解释与逐轮候选证据导航 #428 author to confirm on this PR or on task: OBS — 解散 observability 过渡包并归位记录与展示 #413.
  2. Question: the WorkSwarm timeout. The 5ccb2b7f commit message and body L117 say the original isolated WorkSwarm 45-second child-timeout regression "remains unpassed" and that the main-only timing control "was not completed". Hosted full-check is green, but please say whether that test also fails on plain main 8c321005 under the same conditions. If it fails only with this branch, it needs fixing or a tracking issue before merge.

Non-blocking

  • Body L110-113 still list full-check 3.10/3.11 and dashboard-browser as in_progress. All three finished successfully at about 07:46-07:52 Asia/Shanghai. Please refresh the table.

What I did: compared the net diffs before and after, read cli.py and function-owners.md at this head, main and #422, and read the check runs and the body. I did not run tests locally this round.

@Dong1017

Copy link
Copy Markdown
Collaborator Author

Posted by an agent on behalf of @Dong1017 (incremental review only; the WorkSwarm timeout question and the stale checks table were already raised by @amy-why-3459 and are not repeated).

Incremental note on head 5ccb2b7fd9d0b86c153349318280c426d9ce565c, about open item 1 in 6886232900.

The remaining approval blocker is a confirmation from the #428 author. It has been listed as open in three rounds now (10:24Z, 11:43Z and 23:58Z UTC on 2026-11-14). On GitHub, #428 ("feat: 补齐知识检索解释与逐轮候选证据导航", merged 2026-11-14 06:07Z) was opened by @amy-why-3459, and its only commenter is the same account.

@amy-why-3459, if you are the #428 author, could you record the confirmation here or on #413 directly? That would close item 1. If you meant a different owner for #428's output layout, please name them so we can ask them.

Checking scope: read #425 comments that mention #428 and #428's author and comment metadata. I did not re-read the diff or run tests; there are no code findings in this note.

Copy link
Copy Markdown
Collaborator

Re-check on the same head 5ccb2b7fd9d0b86c153349318280c426d9ce565c, in reply to 6886848514. No new commits since my last comment, so I didn't re-read the diff. Still not approving.

  1. feat: 补齐知识检索解释与逐轮候选证据导航 #428 author confirmation: Confirmed: feat: 补齐知识检索解释与逐轮候选证据导航 #428 is my PR (merged 2026-11-14 06:07Z). So item 1 is mine to close, and you don't need to ask anyone else. I'll post the decision on the different layout for readers without an observation or provenance (body L29-31) separately, here or on task: OBS — 解散 observability 过渡包并归位记录与展示 #413. Until then, item 1 stays open.
  2. WorkSwarm 45-second child-timeout: Still open. Nobody has answered yet whether the regression also fails on plain main 8c321005 under the same conditions. If it only fails on this branch, it needs a fix or a tracking issue before merge.

Non-blocking: the checks table at body L110-113 still shows in_progress.

cursor[bot]
cursor Bot previously approved these changes Nov 15, 2026

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

PR review verdict — PASS
Reviewed base 8c321005d50c2ecef61bf20132409d88474a6450 and head 5ccb2b7fd9d0b86c153349318280c426d9ce565c. Independent re-review; governing #413. Prior cursor[bot] CR was on d173eee (dirty merge).

Prior blockers on this head

  • Dirty merge / #405 placement: resolved. main is an ancestor; GitHub mergeable=true; dashboard_experiments + experiment_view.html under apps/views; no src/inferrsi/observability.
  • Lint E501/I001: resolved. Local ruff E/F/I clean on the 64 changed Python files; Ready CI green on this head.
  • D008: resolved. OBS rows adopted in function-owners.md with decision anchors; d008-wave2-ownership-decision.md SHA-256 98644a754c3186752b530e39cd99fc9116cd2fb2d532825673e959fc818ff078.
  • Projection / invalid_format: still fixed (capture_delivery → Apps verify_capture; H keeps MAX_CONTEXT_CAPTURE_BYTES + invalid_format).

#413 scope checks

  • observability/ gone; H records have no Apps/Knowledge imports; Apps injects BACKENDS/TASK_RELEVANCE; events_url not in H profile_timeline.
  • Ready CI on exact head all success: lint-and-smoke, declarations, pr-references, installed-package 3.10/3.11, full-check 3.10/3.11, dashboard-browser.
  • Focused local tests at this head passed (campaign injection projection/invalid_format, dashboard experiments/external, optimization story, search archive/attribution/capture delivery, first-wave isolation, isolated dashboard export).

#428 confirmation ask (not a blocker)

Open peer ask for #428-author confirmation of the pre-#428 no-observation capture_context baseline is process preference, not a code or #413 evidence defect. Packaged KnowledgeReader path stays on the extended/#428 layout; the legacy six-key / inferrsi collect branch is an explicit, tested edge for custom readers without observation/provenance. Amy (as #428 author) may still record her separate confirmation before her own Approve.

No merge.

Copy link
Copy Markdown
Collaborator Author

@amy-why-3459 @zengchuang-hw — answering the timeout question in the latest review for 5ccb2b7: the four exact isolated dashboard-export and knowledge-reads cases, parametrized for codex/workswarm, pass on both plain main 8c321005 and this branch on the same Debian 13.7/Python 3.13.5 host and venv. Main export/reads: 2 passed in 2.036s / 2 passed in 4.063s. Branch: 2 passed in 1.775s / 2 passed in 4.305s. Fresh test caches were used; the native 45-second timeout and integrity checks were unchanged.

The Windows main control remains inconclusive because archive preparation did not finish. These Linux results neither prove a Windows baseline failure nor exclude a Windows-specific regression. The current PR body records this distinction and the successful hosted checks. The PR 428 layout decision remains yours, as you confirmed; it is not claimed closed.

Copy link
Copy Markdown
Collaborator

Re-check on the same head 5ccb2b7fd9d0b86c153349318280c426d9ce565c, in reply to 6887367223. No new commits since my last comment (6886949109), so I didn't re-read the diff. Still not approving.

Resolved: item 2 (the WorkSwarm 45-second child timeout). I checked the body against your comment. Body L119 records the main-only control on 8c321005 / tree c749eac3, on the same Linux host, venv and native 45 s timeout. All four isolated nodes pass on plain main (export 2.036 s / reads 4.063 s) and on this branch (1.775 s / 4.305 s). So on a comparable host this isn't a branch-only regression, and I'm closing item 2. Non-blocking: the Windows comparison is still inconclusive. A short tracking issue for that Windows control would keep it from getting lost.

The stale checks table I flagged earlier as non-blocking is fixed too.

Still open: item 1 (#428 layout decision). As I said in 6886949109, this one is mine to close. I still need to post my decision on the different layout for readers that report no observation or provenance (body L29-31 and L37: six keys, inferrsi collect, no retrieval, with the pre-#428 contract as baseline). I haven't posted it yet, so I can't approve.

Merge current main9ede1835 (#422) into OBS. Preserve both changelog sections and all five D008 owner rows. Adapt workflow test imports to B01 Apps legacy composition and OBS Apps views. No #428 layout decision is made.

Local merge preserved before exact-new-head Linux validation; prior5ccb2b7 test results do not validate this head. Windows isolated controls remain inconclusive.

Agent-assisted-by: Grok Bot (deterministic merge resolution; no new coding-model request)
Signed-off-by: GUOGUO <xwdong1998@163.com>

Copy link
Copy Markdown
Collaborator

Incremental review: 5ccb2b7fd9d0b86c153349318280c426d9ce565c...9489466a8aae1bc3a31f8cf138bf42c601f7f124. That's one merge commit, 9489466a, which merges main 9ede1835 (the #422 / B01 merge). Not approving yet.

How I checked the merge: I compared the PR's net diff against its base before (8c321005...5ccb2b7f: 80 files, +1498/−728) and after (9ede1835...9489466a: 78 files, +1445/−727). 72 files have identical patches. The rest are accounted for by #422:

  • docs/contracts/d008-wave2-ownership-decision.md and the test_harness_execute.py comment are no longer in the diff. main now has them byte-identical (the D008 blob is bc6036cb on both sides).
  • function-owners.md: the status header and the two B01 rows (benchmark/sampling, harness/runner snapshot port) now come from main. This PR still adds exactly the three OBS rows (dashboard_workflow, profile_timeline, profile_searches), so all five D008 rows are present.
  • CHANGELOG.md: the OBS entry now sits under main's existing ### Changed heading, above the B01 entry. Nothing was dropped.
  • tests/test_dashboard_workflow.py now imports execute_trial/run_experiment from apps.legacy.run (B01) and load_dashboard from apps.views. That's right for both slices.
  • cli.py, module-layout.md and optimization_session.py differ only in context lines from benchmark: split the legacy run/evaluate chain into B, H, and Apps legacy (B01) #422 (the deferred run_experiment import, the B01 layout rows, and harness/atomic_json.py in the identity list).

I found no unexpected changes beyond the merge.

Checks on 9489466a (read just now): lint-and-smoke, declarations, pr-references, installed-package 3.10/3.11 and dashboard-browser succeeded. full-check 3.10/3.11 are still in_progress.

Still open

  1. feat: 补齐知识检索解释与逐轮候选证据导航 #428 layout decision (mine). Unchanged from 6887411388, and the commit message also says no feat: 补齐知识检索解释与逐轮候选证据导航 #428 decision is made here. I still owe that decision.
  2. Body is stale for this head. L8-9, L54, L97-117 and L123 still describe 5ccb2b7 as the current head, along with its tree, checks and local evidence. Please update them for 9489466a, including the full-check results once they finish. The commit message also notes that the earlier 5ccb2b7 Linux results don't validate this head.

What I did: compared the net diffs before and after, and compared them against the 8c321005...9ede1835 diff on main. I read the check runs and the body. I didn't run tests locally.

Copy link
Copy Markdown
Collaborator

Re-check on the same head 9489466a8aae1bc3a31f8cf138bf42c601f7f124, after the body update at 03:15Z. No new commits since my last comment (6888383495).

Resolved: item 2 (stale body). The body now covers 9489466a: head, parents and tree b8d36e5c (L8-9), the earlier 5ccb2b7 evidence relabelled as previous-head-only (L58, L97-117), and the hosted checks table and local Linux run for this head. I read the check runs on 9489466a again myself. All of them succeeded, including full-check 3.10 (03:12:57Z) and 3.11 (03:10:48Z), and dashboard-browser.

Still open: item 1, the #428 layout decision (mine). Body L148 correctly leaves it open. Everything else on this PR is now cleared on my side, so the decision I still owe on the no-observation / no-provenance baseline (body L29-31, L37) is the only thing keeping me from approving.

@Dong1017
Dong1017 enabled auto-merge (squash) November 15, 2026 03:40

@zengchuang-hw zengchuang-hw left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I checked 9489466a on Windows. All 99 tests in campaign record injection, campaign trace, Dashboard workflow, retrieval projection, profile timeline, and search capture delivery passed. It also merges cleanly with the current main containing #444, using Git's merge-tree check.

@amy-why-3459 I saw your formal approval on this head. Could you also record which byte layout should be the #413 acceptance baseline for custom readers supplying neither observation nor item provenance, and add the review verdict text for this exact head? The prior comment and the current PR body still leave the choice between the pre-#428 composed Apps capture and the #428 default-filled layout open. @david6666666 Could you independently review the OBS migration once that byte baseline is recorded?

I also ran the Windows legacy run compatibility suite and external-workspace checks for the Codex, WorkSwarm, and DSH plugin bundles on this head. 61 passed. The DSH check exercised the local bundle and bootstrap.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

PR review verdict — PASS
Reviewed base 9ede1835d16352b60c559302882bf2cea3e19c0d and head 9489466a8aae1bc3a31f8cf138bf42c601f7f124. Independent re-review after dismissed cursor[bot] Approve 5908416986 on 5ccb2b7; governing #413.

Delta since 5ccb2b7

  • One merge commit 9489466a integrating accepted B01 (#422 / main 9ede1835). OBS-critical files (campaign.py, capture delivery, H records, views placement) unchanged vs prior Approve head.
  • Net OBS-touching delta: function-owners.md gains the two already-adopted B01 rows from main; dashboard/module-boundary tests import execute_trial/run_experiment from apps.legacy.run.

Prior blockers on this head

  • Dirty merge / #405 placement: resolved. Base 9ede1835 is an ancestor; GitHub mergeable=true; observability/ absent; experiments under apps/views.
  • Lint E501/I001: resolved. Local ruff E/F/I clean on focused OBS paths; Ready CI all success on this exact head (lint-and-smoke, declarations, pr-references, installed-package 3.10/3.11, full-check 3.10/3.11, dashboard-browser).
  • D008: resolved. Three OBS rows adopted with decision anchors; d008-wave2-ownership-decision.md SHA-256 98644a754c3186752b530e39cd99fc9116cd2fb2d532825673e959fc818ff078.
  • Projection / invalid_format: still fixed (capture_delivery → Apps verify_capture; H keeps MAX_CONTEXT_CAPTURE_BYTES + invalid_format).

#413 scope checks

  • No src/inferrsi/observability; no inferrsi.observability imports in src/tests/tools.
  • H harness/records has no Apps/Knowledge imports; events_url not in H profile_timeline (Apps dashboard adds route).
  • Focused local pytest: 214 passed (test_campaign_record_injection, dashboard experiments/external/workflow, optimization story, search archive/attribution, module boundaries).
  • Classic git merge-tree vs advanced origin/main c2f463f0 shows no content conflicts (auto-merge clean); not treated as an Approve blocker.

#428 byte-baseline ask (not a blocker)

Reassessed zengchuang-hw's ask that Amy record which layout is the #413 acceptance baseline for custom readers without observation/provenance. Independent judgment: not a PASS blocker.

  • PR body already records the integration decision: pre-#428 composed Apps capture_context (six-key / inferrsi collect) for that edge; packaged KnowledgeReader stays on the extended/#428 path with main bytes.
  • Missing peer prose confirmation is process preference for Issue #413 closure / Amy's own checklist, not a code defect or missing #413 dissolve evidence on this head.
  • Amy's current-head Approve (5908896687) does not change that code assessment.

No merge.

@Dong1017
Dong1017 merged commit 3644010 into main Nov 15, 2026
11 checks passed
@Dong1017
Dong1017 deleted the impl/obs-dissolve-2 branch November 15, 2026 04:16

Copy link
Copy Markdown
Collaborator Author

Dong1017 and Amy jointly decided to preserve the historical six-key inferrsi collect layout without retrieval for custom readers reporting neither observation nor provenance, while retaining the existing extended capture path for readers supplying observation/provenance information. This preserves current contracts during the OBS migration, not permanent legacy support. Retiring the legacy format requires a separately reviewed contract upgrade.

cc @david6666666

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:harness Harness module: profile, A/B loop, quality gates, evidence reports kind:task Bounded delivery task with a delegated slice

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants