Repository navigation
Description
qa#3 · os-tesla · session_01L9qibw6yXcLi9aRRBpPT4W
Slice A-R1F of qa#3's round 2 part A at 8e3d4a5: round 1's 11 FAIL items of #32940, re-judged at their current revisions.
Environment fingerprint
- Framework
objectstack-ai/objectstackmain @8e3d4a54, the same tree, build and console as record-A-P0. Tier 1 pins at this sha all green (3,403 tests, 0 failed; record-A-P0). - Boots
objectstack dev --ui --seed-admin --no-compile --no-watchon ports 41271–41277, each stopped by process group. Installs, the interceptor config change, the deploy target and the namespace-collision packages all ran from scratch copies under/tmp/qa3/A/ar1f/ws/examples; the interceptor copy was compiled once inside itself, then booted--no-compile.cli.deploy-runtime-dry-run-jsonran with an isolatedHOME=(use-runtimewrites~/.objectstack/cloud.json). Browser legs in 2 fresh contexts. - Timestamps (UTC): one runner, 09:50–10:18 (setup ≈10 min, test ≈18 min).
Scope
Round 1's 11 FAIL items of #32940, at the resolver's current revisions: multi-currency-invoice 2 · home-amount-preview-states 1 · mcp-tool-call-interceptor 1 · dataset-member-vocabulary 1 · mcp-read-file-pdf-word-extraction 2 · deploy-runtime-dry-run-json 2 · namespace-co-owner-name-refusal 4 · namespace-object-name-refusal 2 · actions-namespace-address 3 · bare-name-one-holder-refusal 3 · permission-set-address-in-execution-context 3. None is in record-A-P0; permission-set-address-in-execution-context was briefly listed under A-FIX and is judged here.
Derived item verdicts
| verdict | items (round 1 → now) |
|---|---|
| FAIL (3) | records-forms.multi-currency-invoice (A5, still #32941) · records-forms.home-amount-preview-states (A0, still #32941; A1–A3 blocked(product-bug) by it) · platform-core.bare-name-one-holder-refusal (A0, A3 — stale spec again, re-point card card-A-1.md) |
| PASS (8) | ai.mcp-tool-call-interceptor (stdio leg 2/2 — see the probe on #32942) · studio-authoring.dataset-member-vocabulary (fixed by #33022, 83bd36d — #32943 can be verified closed) · ai.mcp-read-file-pdf-word-extraction · cli.deploy-runtime-dry-run-json · platform-core.namespace-co-owner-name-refusal · platform-core.namespace-object-name-refusal · api-backend.actions-namespace-address · access-security.permission-set-address-in-execution-context (the last six as re-pointed by #32965 / #33021) |
Fails — reproduction rule and disposition
records-forms.multi-currency-invoice · A5 and records-forms.home-amount-preview-states · A0 — product defect, existing card #32941 (open, no fix PR). Fresh stock boot, admin signed in through the form, INV-1004 → Edit: [data-testid=home-amount-preview] count 0 (expected 1, converted state); "Total incl. Tax" is plain text "€450.00"; switching to JPY and 01/15/2026 → "¥450", still no preview and no rate request. Reproduced in 2 fresh contexts. Mechanism unchanged since round 1: the expression-computed amount is readonly and CurrencyField.tsx:64 returns before HomeAmountPreview at :227. The detail page's "Converted at 0.9 on Nov 13, 2026" hint is correct. A contributor-bound member gets no preview either (amount "—", their own rate read 403).
platform-core.bare-name-one-holder-refusal · A0, A3 — stale spec, re-point card card-A-1.md. Two namespaces (qa_a, qa_b) both holding webhook qa_hook: both installs exit 0, the package-less GET /api/v1/meta/webhook/qa_hook answers 409 naming both, and a cold boot of a packages[] stack with both holders logs no webhook warning; rev 3 expects the second install refused 422 and one boot warning. #32577 (e55347d, 05:13Z) put webhook into the namespace-scoped bare-name set an hour after #32965 (cf1b55c, 04:04Z) re-pointed the clause to webhook. Control with tool: the install is refused 422 PLUGIN_REGISTER_FAILED naming the holder and the rename, and the cold boot logs exactly one "Bare-name conflict at boot" warning, for the tool. Round 1 (#32940 F-10) failed the same way on flow.
Off-clause probes (rule 8)
Per-item minutes and doors are in the probe log (record-A-R1F-clauses-1.md). No new product defect.
- os start with the stdio MCP transport drops a host plugin console.log written after boot: it reaches neither stdout nor stderr #32942 (interceptor over stdio): if the client sends its calls before "✓ Server is ready", the first call's
[qa-interceptor]line reaches neither stream while later ones do; sent after ready, 2/2. This is likely round 1's case — worth adding to os start with the stdio MCP transport drops a host plugin console.log written after boot: it reaches neither stdout nor stderr #32942's repro (the card stays open). - Re-installing qa_b without its webhook answers exit 0 but the package-less webhook read keeps naming com.qa.addr-b until the next restart: the same shape as the browser record's
card-browser-2.md(an upgrade doesn't withdraw dropped items until restart), not re-carded.
Parked-on #32908
Fixture notes: cli.deploy-runtime-dry-run-json should tell runners to isolate HOME (use-runtime writes the shared ~/.objectstack/cloud.json); a package declaring a webhook needs requires: ['webhooks','realtime'] or objectstack build refuses it; the only seeded USD draft (INV-1002) is re-currencied to EUR by multi-currency step 2, so preview-states should not run after it on the same DB.
Per-item checklist-accuracy notes follow.
records-forms.multi-currency-invoice
- Seed thin: only INV-1004 (EUR) and INV-1008 (JPY) carry a non-zero amount among the foreign invoices; the other three foreign rows prove only the rate choice (0 ÷ rate = 0).
records-forms.home-amount-preview-states
- (from the earlier browser-slice run, still applicable) A2's expected string spells the date ISO ("2024-06-01"); where the preview does mount (a scratch editable record-mode amount) the product renders "Jun 1, 2024". Not re-driven here.
- S0 names "a USD draft invoice"; the only USD draft seeded is INV-1002, which the sibling item's step 2 re-currencies to EUR. Run this item before multi-currency's step 2 on a shared boot, or use QA-created drafts.
ai.mcp-tool-call-interceptor
- The inline plugin's object literal needs a cast (
as any) in a typed config; otherwise it boots as written. - A registered call's log line carries no
registeredkey (JSON.stringify dropsundefined); only the unregistered call showsregistered:false. The clause reads it only on the unregistered one, so this is fine. - A4 should say "call after the server is ready", given the boot-window drop above.
studio-authoring.dataset-member-vocabulary
- A5's source pointer (packages/spec/src/ui/dataset.form.ts#datasetForm) is not what Studio renders: the designer is
DatasetDefaultInspector+DatasetMemberVocabulary.tsx(fix(studio): the dataset designer edits a dimension's and a measure's synonyms and description #33022), which take the spec form's copy. The testids aredataset-measures-synonyms/dataset-measures-description(plural), useful to name in the item. The fields sit behind the row's "Advanced" toggle, which the step does not say.
ai.mcp-read-file-pdf-word-extraction
- The page the budget stops at varies run to run on one host (7 and 20 at 60 ms), so the note's "after page N" is not a fixed oracle; the clause correctly asserts only the opening of the sentence.
cli.deploy-runtime-dry-run-json
os environments use-runtimewrites the target into ~/.objectstack/cloud.json (the user's home, shared by every runner on the host). Runners should set HOME to their work dir; the fixture text does not say so.
platform-core.namespace-co-owner-name-refusal
- A3's step says "repeat the install … in base"; with the same ids the base build is an upgrade of the qa_n com.qa.n-one (installed exit 0, namespace moved to base). Fresh ids would make the leg cleaner.
platform-core.namespace-object-name-refusal
- POST /api/v1/packages refuses
label("Unrecognized key(s) on this package manifest:label") and needstype; the fixture could spell the body: {id, name, type: 'app', version, namespace}. - The draft save is
?mode=drafton the same PUT; the step says "save it as a draft" without naming the switch.
platform-core.bare-name-one-holder-refusal
- A webhook in a package needs
requires: ['webhooks', 'realtime']orobjectstack buildrefuses the stack ("webhook 'qa_hook' is declared butrequiresdoes not include…"); the fixture text omits it. - The cold-boot leg is reachable with a defineStack
packages[]of two bodies (no install door): this scratch app is a usable fixture for the item.
Activity
objectstack-fleet commentedon Nov 13, 2026
qa#3 · os-tesla · session_01L9qibw6yXcLi9aRRBpPT4W
Probe log (rule 8)
[qa-interceptor]line is on neither stream; the later delete_record and describe_object lines do appear. 2 of 2 runs. So a host plugin's console.log written while the boot is still quiet is lost on the s…os deploy --confirm-upgradewith a made-up finding-set token → "✗ Upgrade stopped — it would rename or retype stored fields without carrying their values", runtime still at 1.0.0. Nothing found.Per-clause tables
records-forms.multi-currency-invoice · rev 2 · FAIL
[data-testid=home-amount-preview]count 0; "Total incl. Tax" is drawn as read text "€450.00"; after switching Currency to JPY and Invoice Date to 01/15/2026 (unsaved) the amount reads "¥450",…records-forms.home-amount-preview-states · rev 1 · FAIL
[data-testid=home-amount-preview]count 0; "Total incl. Tax" is read text "€450.00"; after Currency → JPY and date → 01/15/2026, "¥450", count 0, no sys_exchange_rate request. 2 fresh browser contexts. USD…ai.mcp-tool-call-interceptor · rev 1 · PASS
[qa-interceptor] {"door":"mcp","transport":"http","toolName":"list_objects","userId":"9cj3sucwLJCGEIZ1Evjjhba7SOZxcL8F"}= the key owner[MCP] The installed tool-call interceptor answered "describe_object" with neither a tool result nor a { outcome: 'deny', code, message } refusal, so the call was refused as a server fault…[qa-interceptor] {…"toolName":"qa_no_such_tool","registered":false,…}os startover stdio, calls sent after the HTTP health answered 200: stderr carries[qa-interceptor] {"door":"mcp","transport":"stdio","toolName":"list_objects","userId":"9cj3…"}(and delete_record, describe_object lines, plus the A2 WARN); stdout holds only the JSON-RPC answers (delete_record PERMISSION_DENIED, de…studio-authoring.dataset-member-vocabulary · rev 1 · PASS
_and-are folded (ADR-0149 D1)…"_and-are folded…"ai.mcp-read-file-pdf-word-extraction · rev 2 · PASS
cli.deploy-runtime-dry-run-json · rev 2 · PASS
os deploy --dry-runexit 0: build, then "→ Asking http://localhost:41276 for the upgrade plan (dry run — nothing is installed)…", plan "Objects + qa_deploy_item", "Nothing in this plan asks for a confirmation:os deployinstalls it as it is.", "✓ Dry run: nothing was installed into http://localhost:41276. Run `os …os deploy --dry-run --json, stdout and stderr captured apart: exit 0; stdout (43 lines) parses as one JSON object {target 'runtime', url 'http://localhost:41276', result 'planned', package {manifestId 'com.qa.deploy', version '1.0.0', installedVersion null}, plan {…}, environment {…}, wouldStop [], refusal null, con…os deployexit 0: "✓ Package installed into the running kernel", "✓ Live: http://localhost:41276 now serves com.qa.deploy 1.0.0."; GET /api/v1/packages lists com.qa.deploy 1.0.0; GET /api/v1/data/qa_deploy_item → 200; two rows with a note created 201os deploy --dry-runexit 0: "Suspected renames (no renamedFrom links them) qa_deploy_item.note → memo? — 2 row(s) hold a value…", "⚠ Deploying this build would stop for your confirmation — 1 finding(s): • qa_deploy_item.note (text) is removed while qa_deploy_item.memo (text) is added, and norenamedFromlin…platform-core.namespace-co-owner-name-refusal · rev 4 · PASS
os validateexit 1 andobjectstack buildexit 1 (no dist written), both "✗ The server would refuse this stack at boot (1 package holding a name another package of its namespace holds) • Namespace name conflict: package "com.qa.n-two" … declares the page "qa_board" in namespace "qa_n", already h…os validateexit 0 (summary only, no refusal), by designplatform-core.namespace-object-name-refusal · rev 2 · PASS
os validateexit 1,objectstack buildexit 2 (no dist), both "✗ defineStack namespace-prefix validation failed (1 issue): ✗ Namespace 'qa_k_case' of package 'com.qa.k-case' equals the object 'qa_k_case' of package 'com.qa.k'… (ADR-0150 D6). Rename the namespace or the object." (pkg-qa-k-case alone: v…os package install pkg-qa-k-case/dist/objectstack.json→ exit 1 "✗ Install failed (422 PLUGIN_REGISTER_FAILED): Failed to register imported manifest: Namespace 'qa_k_case' of package 'com.qa.k-case' equals the object 'qa_k_case' of package 'com.qa.k'…" (namespace and object spelled, both packa…os validateexit 1 "✗ The object 'qa_k_custom' of package 'com.qa.k-custom' is short-named 'custom'. The paired customization package of namespace 'qa_k' takes the namespace 'qa_k_custom' (ADR-0146), which would equal this object name (ADR-0150 D6). Rename the object."api-backend.actions-namespace-address · rev 3 · PASS
platform-core.bare-name-one-holder-refusal · rev 3 · FAIL
access-security.permission-set-address-in-execution-context · rev 3 · PASS
const agent = !anonymous && !account && oauth?.clientId ? oauth : undefined;and :349permissionSetAddresses: agent ? undefined : authz.permissionSetAddresses,— the OAuth agent arm carries no addresses; the AI service account is theaccountarm, which…objectstack-fleet commentedon Nov 13, 2026
qa#3 · os-tesla · session_01L9qibw6yXcLi9aRRBpPT4W
Close-out 2026-11-13T10:40Z.
Extracted: #32941 · records-forms.multi-currency-invoice · acceptance[5]
Extracted: #32941 · records-forms.home-amount-preview-states · acceptance[0]
Extracted: #33091 · platform-core.bare-name-one-holder-refusal · acceptance[0], acceptance[3]
objectstack-fleet commentedon Nov 13, 2026
qa#3 · os-tesla · session_01L9qibw6yXcLi9aRRBpPT4W
Closed 2026-11-13T10:44Z: round 1's FAILs re-judged, three left on #32941 and a re-point card; close-out above.