Repository navigation
The direct manager can open the contract they are asked to approve - #164
Merged
Merged
Conversation
… waits on them @objectstack 18.2.0 gives every person a pending approval step waits on a read-only view of the record the request is about (objectstack#26180). Re-measured with README personas: a manager with no position opens the contract page from Waiting on Me, every tab and child row, and the version PDF, cannot write, and loses the read once they approve or reject. Replace the stale open-edition limitation with that behaviour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017nzWFRUo2U7evMkPdVniAn
Contributor
Author
席位核对 — ACCEPT · head
|
| check | reading |
|---|---|
| shape | draft → main, Fixes #134; mergeable clean |
| CI on the head | both Validate check-runs success on d53b9a7 = PR head.sha |
| scope | 1 file, README.md (+22/−10): the stale open-edition rung-1 limitation is rewritten to describe 18.2.0. This is within the claim's surface. Nothing governed |
| the ruling | 6422705361 letter A, rung-1 half. It is delivered by the platform (objectstack-ai/objectstack#26180, in 18.2.0) with no app metadata, and was measured with README personas. A manager with no position opens the pending contract from 待我处理: every tab, every child row and the version PDF. Writes are 403. The read is revoked at the decision, and a report's draft is never readable. The finance rung (#153) was re-confirmed |
| text | each README claim matches a reading in the os-dev-report (comment 6437960158) |
| follow-ups | the 「未找到记录」 shown right after a decision is platform wording. The seat files it upstream. The §04 sentence goes to seat PR #120 |
Landing: under the maintainer's merge authorization (project thread: 「你可以自己审核的就自己合并」).
Generated by Claude Code
zhuangjianguo
marked this pull request as ready for review
October 27, 2026 09:14
zhuangjianguo
pushed a commit
that referenced
this pull request
Oct 27, 2026
… platform (#134, PR #164) Ruling 6422705361 (A). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017nzWFRUo2U7evMkPdVniAn
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #134
The rung-1 half (ruling 6422705361, letter A). The finance half landed as PR #153. Rung 1 was waiting on objectstack-ai/objectstack#26180, which shipped in @objectstack 18.2.0 (upstream commit
b7b04e5);mainpins 18.2.0 since PR #155. Re-measured onorigin/main21f2319with README personas: the direct manager, a plain member with no CLM position, now opens the contract they are asked to approve, every tab, the child rows and the version PDF, read-only, and only while the step waits on them. So no metadata change is needed and this PR only rewrites README's stale known limitation.What changed
README.md, section "Rung 1 of the approval ladder is a manager": the paragraph "On the open edition the rung-1 manager decides from the request alone ... 「无法打开此记录」" is replaced with what 18.2.0 does. While the request waits on them, the manager lands on the contract page itself from Waiting on Me (待我处理), every tab opens, each child row opens on its own page, and nothing can be changed. Once they approve or reject, the read ends: the page they decided on reads 「未找到记录」 straight away. A report's contract that is not waiting on them stays closed, becauseown_and_reportsstill resolves to owner-only on the open edition.src/change. This app declares nothing for the read; the platform derives it from the pending-approver index.Measurement (18.2.0, browser + API, each reading signed in as the persona)
Setup:
pnpm demo -- --port 3141on a fresh.objectstackDB (banner: no degraded capability, nono such table; seedinserted 830, plus the documented first-boot unresolved persona names). Personas were created the README way, through admincreate-user(each 200): Business Requester 2, Line Manager 1 (no position), Finance Controller 1 (sys_user_positionclm_finance_controller201), Legal Counsel 1 and 2 (clm_legal_counsel201 each). Thenset-user-managerBusiness Requester 2 → Line Manager 1 (200), and each account's ownchange-password(200). Playwright with Chromium at/opt/pw-browsers/chromium, locale zh-CN, 1440x900.Contracts, all launched by Business Requester 2 through the 发起合同 wizard with a PDF uploaded as v1:
in_approval,route_financetrue.in_reviewwithlegal_ownerLegal Counsel 1. As Legal Counsel 1 (each POST 201): a review (decision approved), a deviation then set to rejected (PATCH 200), a draft e-signature round, a pending obligation and one payment-plan instalment. Then 送审 from the contract page:in_approval.draft.sys_approval_request: A and B both pending atmanager_review,pending_approvers= Line Manager 1's user id.Signed in as Line Manager 1 (explain: positions
org_member,everyone; permission setsclm_requester,member_default):/clm_contract/record/ID, the contract page, with 通过 / 拒绝 / 转签 / 退回修改 / 退回补充 / 回复 and 「审批中已锁定」; no 「无法打开此记录」, no 「未找到记录」GET clm_contract/IDin_approvalin_approvalGET storage/files/ID200application/pdfGET200application/pdf612 bytes%PDF-1.4clm_reviewn=1,clm_deviationn=1PATCH clm_contractpayment_terms)summary)PATCH clm_obligation403 ·POST clm_review403 ·DELETE clm_contract403allowed: true,record_sharevia: "approval request areq_7608…", effectadmitsNot waiting on them, as Line Manager 1:
GET404 RECORD_NOT_FOUND. A seeded contract MSA-2026-0006: 404. The manager's contract list: exactly A and B (total 2).GETA 404; versions, reviews, deviations, signatures, obligations and payment plans of A each 200 with n=0; the version file is 403FILE_DOWNLOAD_DENIED.rejected. The page reads 「未找到记录」;GETB 404; all six child lists n=0;GET clm_review/ID404; the version file 403FILE_DOWNLOAD_DENIED.Finance rung (PR #153) re-confirmed, as Finance Controller 1, after the manager approved A: 待我处理 lists A at 财务负责人. Clicking it lands on the contract page with the decision buttons and no 「无法打开此记录」; 0 编辑. 版本 shows
order-250k.pdf,GET200application/pdf%PDF-1.4.GETA 200in_approval.PATCH payment_terms403 PERMISSION_DENIED. The not-routed draft C: 404.Before / after: the diff is README only, so the runtime that was measured on
21f2319is the runtime of this head; there was no second boot.Gates (head
d53b9a7; exit codes captured with redirect-then-$?, before any pipe)pnpm install: exit 0pnpm validate: exit 0,✓ Validation passedpnpm lint: exit 0,1 warning(s), 6 suggestion(s). The one warning is main'ssecurity-controlled-by-parent-owner-policy-without-opt-in(DESIGN.md §04 givesclm_requesterupdate on its own obligations, andcontrolled_by_parentrefuses it for all 200 — 我负责的履约 is read-only for the audience it is built for #64's); nothing new.pnpm typecheck: exit 0pnpm lint:i18n-gate: exit 0,COVERAGE : 0 missing keys across 2 locale(s)CLM_DEMO_SEED=1 pnpm validate: exit 0,✓ Validation passedAcceptance notes
POST clm_reviewthe manager tried was refused 403. The same observation was made for finance on PR The finance approver can open the contract it is asked to approve #153.[object-ui]predicate warnings forsubmit_contract,withdraw_contractandstart_renewal(No such key: status/owner_id) and one 404 resource load outside/api/, as finance's page did on PR The finance approver can open the contract it is asked to approve #153. After a decision, the page that now reads 「未找到记录」 also answersGET /api/v1/approvals/records/clm_contract/ID/lock404 three times.contract_manager_reportsgoes to the seat's design-doc PR Sync the governed design text with the rulings landed on 2026-10-25 (#96 #100 #11 #20 #38 #82) #120.🤖 Generated with Claude Code
https://claude.ai/code/session_017nzWFRUo2U7evMkPdVniAn