docs: publish product and technical gap baseline - #196
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthrough제품·기술 격차 기준선 문서를 Changes제품·기술 격차 기준선
Estimated code review effort: 3 (Moderate) | ~25 minutes Merge Risk: 🟡 Moderate · up to The PR adds a repository baseline and reproducible merge-evidence procedure, but the current procedure can miscount valid approvals and leave inconsistent evidence when branch state changes, potentially producing an incorrect merge-readiness decision. These bounded documentation and automation correctness risks should be fixed or explicitly accepted before merge. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Addressed the current exact-head review inventory on
No workflow, secret, branch-protection, approval, or merge bypass was used. |
|
Exact head |
- Record 158 open PRs (44 ready, 114 draft) with refreshed exact base/head evidence for the #208-#222 release, enterprise-approval, BAP, and WARC/PROV chains while retaining the 2026-08-21 rows as regression anchors. - Add governance issues #212 and #215 to the operational signal table and note issue #206 closure between snapshots. - Record the required-check provider-failure RCA for the fail-closed Strix re-dispatches on #208, #218, and #220 without weakening the gate. - Tighten the completion-gap contract so superseded inventory counts cannot pass as current evidence.
|
|
||
| - Refreshed the product and technical gap baseline with the 2026-08-24 live inventory: 158 open pull requests (44 ready, 114 draft), refreshed exact base/head evidence for the #208–#222 release, enterprise-approval, BAP, and WARC/PROV chains, the governance issue additions #212 and #215, and a required-check provider-failure record for the fail-closed Strix re-dispatches on #208/#218/#220. | ||
| - Added a dated product and technical gap baseline that separates protected-main implementation truth, active pull-request evidence, live review/check blockers, and the next buyer-visible Phase 1 acceptance work. | ||
| - Refreshed the product and technical gap baseline with the current open-PR inventory and exact base/head evidence for the newest Chromium, BAP, extraction, WARC, and idempotency slices. |
There was a problem hiding this comment.
📝 Info: "Refreshed ... baseline" entry classified under Added rather than Changed
CHANGELOG.md places "Refreshed the product and technical gap baseline with the current open-PR inventory ..." under ### Added, and test_documentation_active_pr_evidence_contract.py deliberately enforces that placement (asserting it is in Added and not in Changed). Under Keep a Changelog conventions a refresh of existing content is typically a Changed entry; the near-duplicate "Refreshed ... against the 2026-08-21 live inventory" line does live in Changed (CHANGELOG.md). Not a functional bug and the tests are self-consistent, but the two closely-worded refresh entries split across Added/Changed are easy to confuse.
Was this helpful? React with 👍 or 👎 to provide feedback.
| @staticmethod | ||
| def _subsection(text: str, heading: str) -> str: | ||
| """Return one fourth-level documentation subsection.""" | ||
| start = text.index(heading) + len(heading) | ||
| remainder = text[start:] | ||
| end = remainder.find("\n#### ") | ||
| return remainder if end == -1 else remainder[:end] |
There was a problem hiding this comment.
📝 Info: Subsection extraction helper relies on heading presence
_subsection in test_product_documentation_contract.py uses text.index(heading) which raises ValueError if the heading is absent, and slices until the next \n#### . This is robust for the current doc because both #### #195/#198 ... and #### #149 ... headings exist within the ### Open pull requests slice, and the VPN subsection is terminated by the earlier split at ### Review and merge authority. If a future edit renames or reorders those H4 headings, the test fails loudly (index error) rather than silently passing, which is acceptable. No bug.
Was this helpful? React with 👍 or 👎 to provide feedback.
| - [OriginWeave API and protocol contract](API_CONTRACT.md) | ||
| - [Release and rollback contract](RELEASE_AND_ROLLBACK.md) | ||
| - [Product roadmap](product-roadmap.md) | ||
| - [Product and technical gap baseline](product-technical-gap-baseline.md) |
There was a problem hiding this comment.
📝 Info: Documentation link targets exist
The new cross-links added in ARCHITECTURE.md and README.md point to product-technical-gap-baseline.md, which is created in this PR, so the link contracts checked by test_root_architecture_links_the_authoritative_product_graph and test_authoritative_product_documentation_graph_exists are satisfied (that suite passes). No broken-link issue here.
Was this helpful? React with 👍 or 👎 to provide feedback.
| jq -r '.[].number' "$EVIDENCE_DIR/open-prs.json" | while read -r PR; do | ||
| STABLE_HEAD=false | ||
| for ATTEMPT in 1 2 3; do | ||
| VERDICT_PATH="$EVIDENCE_DIR/pr-${PR}-merge-verdict.json" | ||
| VERDICT_TMP="$EVIDENCE_DIR/pr-${PR}-merge-verdict.json.tmp" | ||
| rm -f "$VERDICT_PATH" "$VERDICT_TMP" "$EVIDENCE_DIR/pr-${PR}-rechecked.json" | ||
| PR_JSON="$EVIDENCE_DIR/pr-${PR}.json" | ||
| gh api "repos/ContextualWisdomLab/OriginWeave/pulls/$PR" > "$PR_JSON" | ||
| HEAD_SHA=$(jq -r '.head.sha' "$PR_JSON") | ||
| BASE_SHA=$(jq -r '.base.sha' "$PR_JSON") | ||
|
|
||
| gh api "repos/ContextualWisdomLab/OriginWeave/commits/$HEAD_SHA" \ | ||
| > "$EVIDENCE_DIR/pr-${PR}-head-commit.json" | ||
|
|
||
| gh api --paginate --slurp \ | ||
| "repos/ContextualWisdomLab/OriginWeave/commits/$HEAD_SHA/check-runs?per_page=100" \ | ||
| > "$EVIDENCE_DIR/pr-${PR}-check-runs.json" | ||
| gh api --paginate --slurp \ | ||
| "repos/ContextualWisdomLab/OriginWeave/commits/$HEAD_SHA/statuses?per_page=100" \ | ||
| > "$EVIDENCE_DIR/pr-${PR}-statuses.json" | ||
| gh api --paginate --slurp \ | ||
| "repos/ContextualWisdomLab/OriginWeave/pulls/$PR/reviews?per_page=100" \ | ||
| > "$EVIDENCE_DIR/pr-${PR}-reviews.json" | ||
| gh api --paginate --slurp \ | ||
| "repos/ContextualWisdomLab/OriginWeave/actions/runs?head_sha=$HEAD_SHA&per_page=100" \ | ||
| > "$EVIDENCE_DIR/pr-${PR}-workflow-runs.json" | ||
| gh api graphql --paginate --slurp \ | ||
| -F owner=ContextualWisdomLab \ | ||
| -F name=OriginWeave \ | ||
| -F number="$PR" \ | ||
| -f query=' | ||
| query($owner: String!, $name: String!, $number: Int!, $endCursor: String) { | ||
| repository(owner: $owner, name: $name) { | ||
| pullRequest(number: $number) { | ||
| reviewThreads(first: 100, after: $endCursor) { | ||
| nodes { id isResolved isOutdated } | ||
| pageInfo { hasNextPage endCursor } | ||
| } | ||
| } | ||
| } | ||
| }' > "$EVIDENCE_DIR/pr-${PR}-review-threads.json" | ||
|
|
||
| jq -n \ | ||
| --arg head "$HEAD_SHA" \ | ||
| --slurpfile pr "$PR_JSON" \ | ||
| --slurpfile checks "$EVIDENCE_DIR/pr-${PR}-check-runs.json" \ | ||
| --slurpfile statuses "$EVIDENCE_DIR/pr-${PR}-statuses.json" \ | ||
| --slurpfile reviews "$EVIDENCE_DIR/pr-${PR}-reviews.json" \ | ||
| --slurpfile workflow_runs "$EVIDENCE_DIR/pr-${PR}-workflow-runs.json" \ | ||
| --slurpfile rules "$EVIDENCE_DIR/main-branch-rules.json" \ | ||
| --slurpfile collaborators "$EVIDENCE_DIR/collaborators.json" \ | ||
| --slurpfile head_commit "$EVIDENCE_DIR/pr-${PR}-head-commit.json" \ | ||
| --slurpfile threads "$EVIDENCE_DIR/pr-${PR}-review-threads.json" \ | ||
| --arg base "$BASE_SHA" \ | ||
| '( | ||
| [ | ||
| $rules[][]? | ||
| | select(.type == "pull_request") | ||
| | .parameters | ||
| ] | first // {} | ||
| ) as $pull_request_parameters | ||
| | ($head_commit[0].committer.login // $head_commit[0].author.login // "") as $last_push_actor | ||
| | ( | ||
| [ | ||
| $reviews[][][]? | ||
| | {reviewer: .user.login, state, submitted_at, commit_id} | ||
| | select(.submitted_at != null) | ||
| | select(.reviewer != $pr[0].user.login) | ||
| | select(.reviewer as $reviewer | | ||
| any($collaborators[][]?; | ||
| .login == $reviewer and | ||
| (.permissions.push == true or | ||
| .permissions.maintain == true or | ||
| .permissions.admin == true))) | ||
| ] | ||
| | group_by(.reviewer) | ||
| | map(sort_by(.submitted_at) | last) | ||
| | map(select( | ||
| ($pull_request_parameters.require_last_push_approval != true) | ||
| or .reviewer != $last_push_actor | ||
| )) | ||
| | map(select(.state == "APPROVED" and .commit_id == $head)) | ||
| ) as $current_approvals | ||
| | ($pull_request_parameters.required_approving_review_count // 0) as $required_review_count | ||
| | { | ||
| head_sha: $head, | ||
| base_sha: $base, | ||
| required_status_checks: { | ||
| check_runs: [$checks[][].check_runs[]?], | ||
| legacy_statuses: [$statuses[][][]?] | ||
| }, | ||
| workflow_runs: [$workflow_runs[][].workflow_runs[]?], | ||
| counted_approvals: ($current_approvals | length), | ||
| required_approving_review_count: $required_review_count, | ||
| require_last_push_approval: ($pull_request_parameters.require_last_push_approval // false), | ||
| approval_gate_satisfied: (($current_approvals | length) >= $required_review_count), | ||
| required_workflows: [ | ||
| $rules[][]? | ||
| | select(.type == "workflows") | ||
| | .parameters.workflows[] | ||
| ], | ||
| unresolved_threads: [ | ||
| $threads[][].data.repository.pullRequest.reviewThreads.nodes[]? | ||
| | select(.isResolved == false and .isOutdated == false) | ||
| ] | ||
| }' > "$VERDICT_TMP" | ||
|
|
||
| RECHECKED_PR_JSON="$EVIDENCE_DIR/pr-${PR}-rechecked.json" | ||
| RECHECKED_HEAD_SHA=$(gh api "repos/ContextualWisdomLab/OriginWeave/pulls/$PR" \ | ||
| | tee "$RECHECKED_PR_JSON" \ | ||
| | jq -r '.head.sha') | ||
| RECHECKED_BASE_SHA=$(jq -r '.base.sha' "$RECHECKED_PR_JSON") | ||
| if [[ "$RECHECKED_HEAD_SHA" == "$HEAD_SHA" && "$RECHECKED_BASE_SHA" == "$BASE_SHA" ]]; then | ||
| mv "$VERDICT_TMP" "$VERDICT_PATH" | ||
| mv "$RECHECKED_PR_JSON" "$PR_JSON" | ||
| STABLE_HEAD=true | ||
| break | ||
| fi | ||
| rm -f "$VERDICT_TMP" "$RECHECKED_PR_JSON" | ||
| printf 'Discarding moving head/base evidence for PR #%s (head %s -> %s, base %s -> %s) and retrying.\n' \ | ||
| "$PR" "$HEAD_SHA" "$RECHECKED_HEAD_SHA" "$BASE_SHA" "$RECHECKED_BASE_SHA" >&2 | ||
| done | ||
| if [[ "$STABLE_HEAD" != true ]]; then | ||
| rm -f "$EVIDENCE_DIR"/pr-${PR}-*.json | ||
| printf 'Unable to collect stable exact-head/base evidence for PR #%s after 3 attempts.\n' "$PR" >&2 | ||
| exit 1 | ||
| fi | ||
| done |
There was a problem hiding this comment.
📝 Info: Evidence shell script aborts on any per-PR API failure under set -e
The documented evidence procedure uses set -euo pipefail combined with a per-PR loop that issues multiple gh api calls (product-technical-gap-baseline.md). If any single call fails (e.g. a check-runs 404 for a moving head SHA, or a transient rate-limit error), set -e aborts the entire collection instead of skipping or retrying that PR. This is documentation-only (evidence commands, not CI-executed code), so it is not a repository bug, but a maintainer copy-pasting it against a 149-PR queue may see the whole run terminate on one failing PR. Noted for awareness, not flagged as a bug.
Was this helpful? React with 👍 or 👎 to provide feedback.
| @staticmethod | ||
| def _subsection(text: str, heading: str) -> str: | ||
| """Return one fourth-level documentation subsection.""" | ||
| start = text.index(heading) + len(heading) | ||
| remainder = text[start:] | ||
| end = remainder.find("\n#### ") | ||
| return remainder if end == -1 else remainder[:end] |
There was a problem hiding this comment.
📝 Info: Subsection helper returns full remainder for the last subsection
_subsection at test_product_documentation_contract.py returns the entire remaining text when no subsequent \n#### heading is found. For the VPN status (the last #### subsection inside open_pull_requests), this means vpn_status includes trailing content up to ### Review and merge authority (e.g. line 41 of the doc), not just the #149 subsection. The current assertions still pass because the required phrase lives right after the #149 heading, but the helper does not strictly bound the last subsection to the next ###/## heading. This is not a bug given the current document, but is worth noting if future edits move phrases into the trailing region.
Was this helpful? React with 👍 or 👎 to provide feedback.
Summary
main0841d2ab3d8b5e60a03c0a8e818cf438e2716829; the branch snapshot records 158 open PRs, 44 non-draft and 114 draft for 2026-08-24.require_last_push_approval: the portable evidence procedure no longer guesses the most recent pushing actor from commit author/committer metadata. When the rule is active it recordsgithub_rule_evaluation_requiredand keepsapproval_gate_satisfied=falseuntil GitHub's authoritative rule evaluation is consulted.Product gap covered
Protected
mainis a Rust authority/safety foundation, not a completed browser product. This PR records the boundary between shipped kernel truth, active-PR evidence, and remaining buyer outcomes: real Chromium task execution, governed browser networking, extension isolation, protected-data runtime, replayable evidence, stable external API, signed distribution, enterprise operation, and release acceptance.The baseline treats queue depth and reviewer provisioning as delivery risks. It does not promote a green child branch, synthetic merge, draft PR, model-generated status, queued check, or dated predecessor snapshot into protected-main truth.
Test-first lineage
Commercial-completion contract
d9ba1fa2315b76c83daca956c370ceb4dc2e21ec.32373167365failed because the then-current baseline retained a superseded inventory and omitted [Product Gap] Deliver schema-bound extraction with durable WARC/PROV replay #199-[Product Gap] Establish a release-grade web-agent benchmark and commercial acceptance gate #203/completion tracks.a44e28f226cff0a750c25960eca697cb9ce85086and has remained on this canonical branch through subsequent evidence hardening.Last-push approval authority contract
5c41742a9ad6c3be27d269e84eab1ead1272be13.32687224437, Rust contracts job97314397454: the repository contract failed as intended because the evidence procedure still derived a supposed last-push actor from commit committer/author metadata and lacked the fail-closed GitHub-rule authority marker.last_push_approval_authority: github_rule_evaluation_requiredwhile forcing the local approval gate false wheneverrequire_last_push_approvalis active.Exact-current verification
Current exact head:
c990ad60e14848bd7fb9f602c82afc198378f85fagainst protectedmain0841d2ab3d8b5e60a03c0a8e818cf438e2716829.On that unchanged exact head:
32687446609: success;97314992115: Python repository contracts, formatting, locked workspace/all-target checks, full tests, strict Clippy, and rustdoc success;97314992228: success; owned production function, line, region, and branch coverage are all exactly 100%;9506174082, uploaded ZIP SHA-256aed1311b96c52fe7c63a2b275e46b1babeee1bb408dedb6cb3077c5d1d2806c1;32687446600: success on this exact head;32687446588: success on this exact head;APPROVEDreview is claimed.No predecessor-head, stale-body, queued, skipped, cancelled, absent, synthetic-merge, status-only, or model-only evidence is promoted as passing current proof. Before any merge decision, re-fetch the exact ruleset, eligible reviewer authority, base/head, reviews, threads, required workflows/checks/statuses, and GitHub's latest-push approval evaluation.
Truth boundary
This is a documentation/evidence-contract baseline, not shipped browser behavior. Snapshot counts are explicitly dated evidence and may diverge from later live GitHub state. The executable product gaps it names remain owned by their dependency-ordered implementation lanes; this PR does not substitute documentation for Chromium integration, durable evidence/runtime APIs, signed packaging, enterprise operations, or release acceptance.
No workflow, secret, governance, release, tag, publish, approval, or merge mutation is included.