Repository navigation
chore(deps): upgrade the ObjectStack platform to 18.0.0-next.5 - #2181
Conversation
All 23 @objectstack/* entries move 18.0.0-next.3 -> 18.0.0-next.5 together; specVersion and engines.protocol follow in the manifest and both package stacks. pnpm-lock.yaml regenerated by pnpm install. The bump alone: os validate, os lint and os build refuse Sales Home's `main` region `width: 'large'` (objectstack#24326, spec 18 refuses small/medium/large on a region named main). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BDgipbNowaGa139em8Fhoq
… spec 18.0.0-next.4 refuses @objectstack/spec 18.0.0-next.4 (changeset 24326-main-region-width-refused) refuses `small` / `medium` / `large` on a region named `main`: the console draws `main` at the width its template leaves it, so the key changed nothing on screen. FROM `width: 'large'` TO no `width`, on Sales Home, the lead, opportunity and case record pages. Every other region keeps its width. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BDgipbNowaGa139em8Fhoq
… list-view has a props contract - `test/escalated-case-previous-owner.test.ts` and the territory block of `test/demo-staffing.test.ts` resolved declared sharing rules through their `sys_sharing_rule` rows. Since 18.0.0-next.4 plugin-sharing reads a declared rule from the registry and writes no row (changeset 23952-declared-sharing-rules-registry): its id is its name, and its grants carry that name as `source_id`. The grants are read by that name, and the territory rules are read and evaluated through `/sharing/rules/NAME`. - `test/metadata-references.test.ts`: `ComponentPropsMap` gained a `list-view` row (changeset 22444-list-view-component-props-row), so the one `NO_PROPS_CONTRACT` exemption goes and Sales Home's list blocks join the parse. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BDgipbNowaGa139em8Fhoq
…Log entry, and formula one-hop reads - The three What's new latest-release sections and docs/STATUS.md: 5.1.2 shipped on 18.0.0-next.3, the release after it runs on 18.0.0-next.5. - Setup's audit entry is now one "Audit Log" that opens the audit browser (changeset 23890-one-audit-entry); the English and zh-Hant pages that sent readers to "Setup → Audit Logs" name it. - Three comments said a formula cannot read through a lookup. Since 18.0.0-next.4 it reads one hop (changeset 24197-objectql-formula-one-hop); each now dates the old measurement, and the line items' stored title keeps its reason (a formula value is stored nowhere, so search cannot scan it). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BDgipbNowaGa139em8Fhoq
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BDgipbNowaGa139em8Fhoq
…gh 18.0.0-next.5 The key and the seeding behaviour it names were not re-checked on this bump either; the list says so for next.4 and next.5 too. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BDgipbNowaGa139em8Fhoq
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
|
CI red on What fails: Build and Test (22.x), run 39258793026, exactly the two
Why: this PR's own item, not a flake. Fix, in flight on this branch:
No re-run is spent: the next push carries the fix. |
…he sharing rules through the sharing door Two edits 18.0.0-next.4 forces on `pnpm demo:staff` (claim amendment 6268235977 on #2179): - Step 4 listed the rules to re-evaluate from `sys_sharing_rule`. A declared rule has no row there any more (objectstack#23952): it now lists `GET /api/v1/sharing/rules?activeOnly=true` and evaluates each rule by its id, which for a declared rule is its name. - Step 3 handed the large deals over through the import door with `runAutomations: false`, and step 5 had each owner save them, so the rep submitted the approval (#2129). The import door now refuses that opt-out to every caller but the system principal (objectstack#24348). The seat's option B, recall then the owner's save, was measured first on 18.0.0-next.5: the recall unlocks the deal (the rep's save 409 before, 200 after), but it leaves `approval_status` at `recalled` and `opportunity_approval` enters only from `not_required`, so the owner's save opens nothing. So option A lands: every routed row goes over through the same PATCH, the hand-over opens each large-deal request with the dev admin as submitter, waiting on the sales manager, and step 5 is gone. `test/demo-staffing.test.ts` re-pins its two spawn tests to that outcome. `test/backfill-query-bodies.test.ts`'s door stub answers the sharing-rule list, which the script now reads instead of a query. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BDgipbNowaGa139em8Fhoq
席位核对ACCEPT (#2179, maintainer direct dispatch 「你不用下班,继续处理 objectstack 升级到 next.5」, p1) · PR #2181 at
|
Fixes #2179
Clause-②: no
Description
This PR upgrades HotCRM from
@objectstack/*18.0.0-next.3 to 18.0.0-next.5: the card's steps 1–3. Step 4 (release, tag, marketplace) stays the maintainer's (#2132).On the bump alone,
os validate,os lintandos buildrefused one key:width: 'large'on a page'smainregion. That is fixed by the changeset's own FROM → TO on four pages. The test suite then went red in four places, each a pin on a platform contract that next.4 moved; each follows the new contract. The browser pass found nothing the gates missed in the app, and no platform regression on the journeys.pnpm demo:staffneeded two edits, which ride this PR (claim amendment 6268235977): seepnpm demo:staff: option A landed below.pnpm verifyis green.Type of Change
Related Issues
Fixes #2179
Held follow-ups, measured here and each left to its own card (Held follow-ups below): #2146, objectstack-ai/objectui#12942 and objectstack-ai/objectstack#24326. Nothing was written on any of them.
Changes Made
Pins. All 23
@objectstack/*entries move 18.0.0-next.3 → 18.0.0-next.5, exact: 19 independencies, 4 indevDependencies. The registry was read for all 23 first: each has18.0.0-next.5, dist-tagnextpoints at it,latestis still17.7.0.specVersionandengines.protocolmove to^18.0.0-next.5inobjectstack.manifest.json,src/sales/index.tsandsrc/service/index.ts. The console ships objectui4016370af3c9(itsdist/.objectui-sha).Lockfile delta.
pnpm installregeneratedpnpm-lock.yaml(+509 / −509), exit 0 in 16 s.packages:keys: 707 before, 707 after; the 56@objectstack/*andcreate-objectstackkeys moved one for one, nothing was added or removed, and no third-party package changed version. The one peer warning (better-authwantsbetter-sqlite3@^12, 13.0.3 installed) is the same as onmain.Release notes read
docs.objectstack.airefuses this container's egress (CONNECT tunnel failed, response 403), so the release pages were read from objectstack's source.content/docs/releases/v18is treedfc75535andupgrading.mdxis blob5faa4507at next.3 (2c9bf9430a), next.4 (725a5b131) and next.5 (820fd5aef) alike. The v18 page says the changesets are the record.2c9bf9430a..820fd5aefis 189 commits (157 of them up to next.4)..changeset/pre/: 146 at next.4 (objectstack#24168) and 28 at next.5 (objectstack#24477). All 174 were read: headline and frontmatter for each, the full body of every one that is breaking or names an authoring key, door or behaviour this app uses, and both console digests in full.CHANGELOG.mdwas read for its next.4 and next.5 sections. Every consumed changeset that names a pinned package appears in that package's CHANGELOG (152 package entries, 0 missing).820fd5aef, and their code ships in next.5:24375,24414,24448,24450,24464,24471. Each file is in the release commit's tree, and the code is in the installeddist/(for example,24450's refusal text is in@objectstack/spec). None is in a next.5 CHANGELOG. One is breaking:24450, a navigation entry whosevisiblereadsdatamust declaredataSource. No navigation entry here readsdata, andos validateis green.Per-change list: the changes that reached this app
mainregion takes onlywidth: 'full'(24326-main-region-width-refused, spec next.4). Sources:src/sales/pages/home.page.ts,lead_detail.page.ts,opportunity_detail.page.ts,src/service/pages/case_detail.page.ts.aafb8d29),pnpm validateexited 1:pages.0.regions.1.width: Region 'main' is refused with width: 'large'.lint,lint:i18n-gateandbuildrefused the same stack, andtscwas green.width: 'large'deleted from the fourmainregions. Every other region keeps its width.header1136 px,main792 px,aside320 px. 792 px is the width objectstack#24326 measured formainon next.3, so nothing moved on screen.sys_sharing_rulerow (23952-declared-sharing-rules-registry, plugin-sharing next.4;24421makes them read-only by name in next.5). A declared rule's id is its name, and its grants carry that name assource_id.test/escalated-case-previous-owner.test.tsmapped grants to rule names throughsys_sharing_rulerows and readundefined→agent:read. It now reads the name offsource_id; the access assertions were green throughout.test/demo-staffing.test.ts's territory block looked each rule up insys_sharing_ruleand failedsharing rule north_america_territory is not installed. It now readsGET /sharing/rules/NAMEand evaluates by name. The arithmetic it guards is unchanged and green: the NA rep reads six accounts, the EU rep two.scripts/demo-staff.tsstep 4 read the same rows and would have evaluated nothing. It now lists the rules through the sharing door (below).sys_sharing_ruleholds 0 rows, andGET /api/v1/sharing/ruleslists the 11 rules the app declares.ComponentPropsMapgains alist-viewrow (22444-list-view-component-props-row, spec next.4; the spec half of hotcrm#2137).test/metadata-references.test.ts's staleness guard went red on its oneNO_PROPS_CONTRACTentry,list-view. The entry is gone, Sales Home's list blocks now join the props parse, and they pass.os validateis green on thedata/typespelling chore(deps): upgrade the ObjectStack platform to 18.0.0-next.3 #2140 wrote.23890-one-audit-entry, plugin-audit next.4).test/docs-setup-navigation-names.test.tswent red on four pages that sent readers to Setup → Audit Logs. The English and zh-Hant pages now name Audit Log, six files in all (automation,faq,security-and-compliance); zh-Hans already said 审计日志. Measured: Setup › Diagnostics › Audit Log opens/component/audit/logwith 50 rows, and no Audit Logs entry is served.400(24131-rest-public-form-required, rest next.4). No change here. Measured anonymously:POST /api/v1/forms/contact-us/submitwithoutdescription→400 VALIDATION_FAILED,fields: [{ field: 'description', code: 'required', message: 'Description is required' }];/forms/supportthe same. The changeset tells integrators.24348-import-control-opt-out-gate, rest next.4). This is what stoppedpnpm demo:staffat step 3. Option A landed (below).24197-*, objectql/lint next.4;24316,24410). None of the 19 formula fields here reads through a lookup (probe over the composed stack), so no value changes. Three comments said a formula cannot read through a lookup. They now date that measurement:opportunity_line_item.object.ts,contract.object.tsandtest/line-item-product-title.test.ts. The line items keep their stored title, because a formula value is stored nowhere and so cannot be searched (24197's own note), and that title is their search target.updateaction refuses undeclared wire params (24268, runtime next.4, which namescomplete_taskas a measured consumer). No change here. Measured: Complete on a task record postsPOST /api/v1/actions/crm_task/complete_taskwith{ recordId, params: {} }→200, the task readscompleted, and the button is gone.0707b4ae3, next.4 digest). No change here; it answers object-metric: a money KPI's value is cut with an ellipsis (1,290,00… / 2,017,50…) at 1024 and 1440 px inside a page:card — viewport-based spans give a narrowed column's tile too little width objectui#12942 (Held follow-ups).singleinstalls only (15212-180-guards-fresh-single-only, cli next.5).os serverefusesOS_TENANCY_POSTURE=group|isolatedandOS_MULTI_ORG_ENABLED=trueat boot, andos migrate organization-ownershiprefuses withNOT_IMPLEMENTED. Nothing insrc/sets a posture, and the dev box boots undersingle. It is in the changeset's operator notes, and it bears on After the 4.0.1 → 5.0.0 upgrade on a hosted environment every seeded event appears twice (Upcoming Events), while leads do not double — measure which upgrade step re-inserts the upsert dataset #2146 (below).Changes measured as not reaching this app
record:json(24162),marketplace:installed-list(24230), a page action row'spatch(24394), anobjectExtensionsentry (24314), an installmanifest.scope(24062),scaleon arecord:line_itemscolumn (24190; the app has no such block), and a cross-reference inside apage:tabs/page:accordionpanel (24349; the five panels here hold no inline action target or identity-only column).os validate,os buildandos lintare green on all of it.searchover an object with no searchable field answers400(24284). Every object here has a non-empty search set (probe).singleload), the ceremony's mirror deletion and guards (15212-8c0, 24282, 24343-*),defaultRowScope(24338, 24340; not declared), and the first-user admin grant undersingle(11979; the dev admin was promoted and signs in).recordbinding (24265), the record blocks'emptyState(24266),current_user.hasCapability(24414), a navigation entry's API data source (24332)./metaand/datadoors (24097, 24210 ×10), install and reseed (24040, 24086), API key outage (24299), storage gate (24366), cloud connection (23933, 24148, 24150), OAuth / MCP organization (24137, 24165, 24166, 24186), the request-context refactor (23217 ×5), the/metaroute moves and liveness citations (23050 ×11, 24063), export of hidden and named fields (24143, 24183), draft provenance (24298, 24395 ×3), import undo (24380 ×2), the CLI and dev-host fixes, and thesys_organizationactions (24016, 24271, 24273, 24384 ×2).deriveDetail, formSelectOptionkind/default, the retired permission-set facets). This app authors no form select options and depends on no@object-ui/*package.Pin-claim sweep (AGENTS.md "Platform Upgrades" step 5)
18.0.0-next.3appeared 50 times in 34 files atcc0608c, outside the lockfile,CHANGELOG.md,package.json, the manifest and.changeset/. Two were theengines.protocolpins, bumped above. The rest were classified by hand.Re-scoped, because they asserted next.3 is the pin:
docs/STATUS.md, the runtime row.campaign-enrollment.flow.ts: its "not re-checked through 18.0.0-next.3" list now runs through next.5, because this bump did not re-check it either.Kept as dated truth: every "measured on 18.0.0-next.3" line in
src/andtest/, the "18.0.0-next.3 console" lines inhome.page.ts, and the release-history lines in What's new ("5.1.0 moves to 18.0.0-next.3").A grep finds only text that carries a version token. Item 7's three comments were found by reading, not by grep, so this sweep is not claimed complete.
Held follow-ups
0707b4ae3("A metric tile's value now scales before it would clip"), in next.4's digest.1,290,000.00and Pipeline Value2,017,500.00each readscrollWidth124 =clientWidth124, at 18 px (stepped down from 24 px). Deals Won8and Open Leads21stay at 24 px. The card measured 152 / 124, an ellipsis, on next.3.widthnot rendered)24326-main-region-width-refused.mainregion's width. The platform answered it by refusingsmall/medium/largeonmain, so the fourmainwidths are removed (item 1). On Sales Home at 1440, the right column (aside,width: 'medium') renders 320 px, andmainrenders 792 px. Both are the widths the card measured on next.3.51ad8e4fb) and objectstack#24372 (41c740536), run in/home/user/objectstack.merge-base --is-ancestorof each on820fd5aef: exit 0, and on725a5b131(next.4): exit 0. On2c9bf9430a(next.3): exit 1 for both. Control on that shallow checkout:e5136ff10fon2c9bf9430aexits 0, 158 commits deep, deeper than the 102 / 119 commits each tested commit sits past next.3. objectstack#24282 is the issue, and objectstack#24325 is the pull that carried its change.15212-180-guards-fresh-single-only, soos migrate organization-ownership(plan and--apply) now exits 1 withNOT_IMPLEMENTED, andos dev's in-place 17 → 18 upgrade stops the same way. The hold comment's step 3, "re-run the 4.0.1 → 5.x upgrade path", cannot run through that command on this pin. NOT MEASURED here.pnpm demo:staff: option A landed (claim amendment 6268235977)next.4 refuses
runAutomations: falseon the import door to every caller but the system principal (24348-import-control-opt-out-gate, which names this script as a known consumer). On the bump, the script stopped at step 3 withPOST /api/v1/data/crm_opportunity/import → 403and exit 1. It also read the rules for step 4 fromsys_sharing_rule, which holds 0 rows on this pin. Both edits are inscripts/demo-staff.ts, added to the file surface by the claim amendment.GET /api/v1/sharing/rules?activeOnly=trueand evaluates each rule by its id. A declared rule's id is its name.PATCH owner_id, automations on) answered200. It openedmanager_reviewwith the dev admin as submitter, waiting on the sales manager, and setapproval_status: pending. The rep's save then answered409 RECORD_LOCKED.POST /api/v1/approvals/requests/ID/recallanswered200. The request readsrecalled, its actions aresubmitandrecall, and the rep's save now answers200, so the recall does unlock the deal.approval_statusreadsrecalled.opportunity_approvalenters only fromnot_requiredor null, so the rep's save opened no request: 0 pending after it.PATCH, with every control in force. On each of the two large open deals, the hand-over opensmanager_reviewwith the dev admin as submitter, waiting on the sales manager (Marta Quinn). Step 5, the owners' save, is gone. The closing banner reads the pending requests back.pnpm demo:staffon a fresh database after the seed settled: exit 0, with "demo org staffed".test/demo-staffing.test.tsre-pins its two spawn tests to that outcome: the submitter is the dev admin, and the request waits on the sales manager atmanager_review.test/backfill-query-bodies.test.ts's door stub answers the sharing-rule list, which the script now reads in place of a query. Without it, that probe would see the script exit throughconsole.error.Testing
pnpm verifyat HEADaa09ea25, the final commit, underos-verify-lock.sh(OS_VERIFY_LOCK_SLOT=hotcrm-2179-verify), on a clean tree:pnpm validate✓ Validation passedpnpm typechecktsc --noEmit, no outputpnpm lint16 suggestion(s)pnpm lint:i18n-gate✓ i18n lint gate: 0 i18n/missing-* issuespnpm hygiene✓ source hygiene cleanpnpm hygiene:tokens✓ source token ratchet cleanpnpm build✓ Build complete,8 author-time warning(s)vitest run --shard=1/3Test Files 66 passed (66),Tests 1107 passed (1107); VERDICTcommand-exit 0vitest run --shard=2/3Test Files 65 passed (65),Tests 1226 passed / 1 skipped (1227); VERDICTcommand-exit 0; the two re-pinneddemo:staffspawn tests greenvitest run --shard=3/3Test Files 65 passed (65),Tests 1579 passed (1579); VERDICTcommand-exit 0The build half and the shards also ran on
0bebe975, the head before the last comment-only commit, with the same results.Warnings against
main. On a detachedcc0608cworktree (next.3),pnpm lintgives the same 16 suggestions line for line (an empty diff of the suggestion lines) andpnpm buildthe same 8 warnings (allapproval-approvers-may-resolve-empty).The bump alone (
aafb8d29):validate1,typecheck0,lint1,lint:i18n-gate1 (the lint JSON carried the refusal and noissues),hygiene0,hygiene:tokens0,build2. After item 1 (9efdcc22), the build half was all 0, and the shards were red in the places items 2–4 name: shard 1 had 1 test (escalated case grants); shard 2 had the territorybeforeAllplus the twodemo:stafftests; shard 3 had 4 tests (two version guards, the Audit Logs path,NO_PROPS_CONTRACT).Ablations: none. No behaviour a test pins was changed by this diff. Each test edit moves a fixture onto the platform's new contract, and the before / after evidence is the red on the bump and the green after.
Token readings,
cc0608c→ this branch (check-source-token-ratchet.mjs --json, comments stripped).src/salesinteraction layer goes 28,600 → 28,584, andsrc/service5,527 → 5,522: the four deleted widths. Business semantics are unchanged in every package.Browser pass
The server was this worktree's
objectstack dev(thedevscript's command, on port 4179) over a fresh database, and every boot ran under the shared lock. Chromium was/opt/pw-browsers/chromiumat 1440 × 900, and each reading came from a DOM, REST or network probe. On every page, the only console errors are non-API resource404s. The public forms add the anonymousGET /auth/get-session401. No/apicall answered 4xx or 5xx on any journey below except where stated.This walk ran before the round that fixed
pnpm demo:staff, which then exited 1 at step 3. The personas existed and the dev admin still owned the whole seeded book, so the journeys were walked as the admin, and the new records were created asna.rep. They stand as walked. Re-measured since:pnpm demo:staffis green on the bumped head (seepnpm demo:staff: option A landed).Leads → convert (as
na.rep). I created two leads through New (201each), then ran Convert Lead → Submit on each. Each run answeredPOST /api/v1/automation/lead_conversion/runs/RUN/resume→200, with the toast "Lead converted successfully!". Both leads readis_converted: true,status: converted, with an account and a contact set. The lead for "Acme Corporation" went to the seeded Acme account, the only account of that name. The other got a new one.Opportunities (admin). The list showed 10 rows. Vertex Enterprise Rollout drew Details / Related / Activity, with Generate Quote, Clone Opportunity, Log a Call and Edit in its header.
Quotes (admin). The list showed 6 rows. QTE-0005 drew Details / Related / Attachments.
Cases (admin). The list showed 38 rows. CASE-00037 drew Details / Related / Activity.
Web forms (anonymous).
/forms/contact-usand/forms/supportredirect to/_console/f/SLUGand render their sections.201. The web lead lands with ownerna.repandlead_source: web.cc0608c), so this is not the bump's (acceptance notes). With Medium picked, it submitted201:CASE-00039,origin: web, ownerservice.agent.400probes are in item 5.Dashboards (admin). All five draw, and each one's every
dataset/querycall answered200:dataset/querycallsFour rows equal chore(deps): upgrade the ObjectStack platform to 18.0.0-next.3 #2140's next.3 readings. Sales Activity drew 12 marks where chore(deps): upgrade the ObjectStack platform to 18.0.0-next.3 #2140 saw 13 (acceptance notes).
Reports group (admin, PR feat(nav): a Reports group with an entry for every shipped report (#2073 item 1) #2173). The collapsed Reports group expands to its 10 entries: 7 sales and 3 case. Each entry opened, drew a table, and answered
GET /meta/reportplus eachdataset/querywith200. Rows / chart marks: Opportunities by Stage 7 / 6, Won Opportunities by Owner 2 / 2, Pipeline Coverage 4 / 0, Opportunity Funnel by Owner 7 / 6, Lead Inflow 7 / 0, Accounts by Industry & Type 9 / 0, Customer Churn Signals 10 / 0, Cases by Status and Priority 22 / 6, SLA Performance 5 / 4, Cases Opened by Day 5 / 0.Sales Home (admin). The KPIs and region widths are under Held follow-ups. The My Leads, My Open Deals and My Open Tasks tabs each drew rows, and Upcoming Events in the right column lists the soonest events.
Other lists and records (admin). Accounts, contacts, contracts, products, campaigns, events, tasks, knowledge and forecasts each drew rows, and each first record opened.
Setup (admin). Diagnostics › Audit Log and the sharing rules: item 4 and item 2.
Screenshots were captured in the session (Sales Home, the five dashboards, the ten reports, both forms, the record pages). They are not committed.
Risk
os serveboot, and the 17 → 18 ceremony. A hosted environment that runsHOTCRM_COMPOSITION=saasundergroup/isolated, or that has not been upgraded from 17 yet, should not move to this pin throughos serve. Kernel-level hosts are not affected, per the changeset. Production is held anyway (chore(release): HotCRM 5.0.0, the version PR (ruling #2131 B): the first release on ObjectStack 18 #2132).Rollback: revert this PR. The next.3 pins, the lockfile, the four page widths and the test fixtures come back together, and no data migration ran.
Checklist
.changeset/2179-objectstack-18-next-5.md, patch)main's, line for line@objectstack/*18.0.0-next.5 is on npm)Acceptance notes
os validatenames one refused page at a time. Onaafb8d29, four pages carried the refusedmainwidth, three of them in the app stack.defineStackreported(1 issue),pages.0only. Withlead_detailalone carrying it, the report waspages.2.z.array(PageSchema).safeParseover three such pages returns all three. The dev report carries the finding.default: true, and the field has nodefaultValue. A visitor must pick one, though the server defaults it (REST withoutpriority:201,priority: low). The dev report carries the finding.200.test/sharing-seeding.test.ts's docblock still describes the retired seeder (declared rules seeded into sys_sharing_rule). Its assertions run the platform's compiler and stay green. It was not edited, because it was not red. Carrier: none.src/sales/objects/index.tskeeps two waits on upstream fixes "in the pinned version" (the attachment and comment-delete gates oncontrolled_by_parentparents). No changeset in this range names them, and they were not re-measured.contract.object.ts's title could now carry the account name through one hop (item 7). It is left as shipped.docs.objectstack.aianswered403at this container's egress proxy.Generated by Claude Code