Repository navigation
Batch 448: connection editor FieldDescriptor value and defaultValue are optional; messagefoundry-toolkit is a published distribution (BACKLOG #1123, #1192) - #2582
Conversation
…iew receives them describe() and describeUnknown() leave both undefined in the ordinary case (a key the record does not set, a secret, an env reference, a schema param with no default), and postMessage carries the payload as JSON, which drops an undefined member. The declared type promised two members the connection editor page often does not get. Both are now `?: unknown`. The comment above mfFieldDescriptor says why the page's shape check does not require them: a presence check would discard nearly every ordinary "fields" message. No check is added. A new webview-receivers test delivers a fields message whose every field lacks both members and requires it to be accepted. Mutation control: adding a presence check for defaultValue to the receiver fails it. BACKLOG #1123 Proposed PR title: IDE: FieldDescriptor.value and defaultValue are optional, matching what the connection editor webview receives Proposed ledger banner: #1123 engine half BUILT: the postMessage origin guard (mfTrusted plus per-render token) was already at all eight receivers (PRs 1755, 1791, 2196, 2203, 2212); this change makes FieldDescriptor.value/defaultValue optional to match the JSON the webview receives, with a positive-control receiver test. The ASVS 3.5.5 vault amendment and its re-read follow this merge.
…ell-formed list Simplify pass. The standalone test copied the ACCEPTS loop's body, so FIELDS_BARE (FIELDS_OK with value and defaultValue deleted from every field) is now a second well-formed "fields" fixture, and the fixture-shape test pins that FIELDS_OK carries both members and FIELDS_BARE carries neither. The webview comment points at FieldDescriptor for the reason rather than restating it. Mutation control: a presence check on value in the receiver fails the ACCEPTS test. BACKLOG #1123 Proposed PR title: IDE: FieldDescriptor.value and defaultValue are optional, matching what the connection editor webview receives Proposed ledger banner: #1123 engine half BUILT: the postMessage origin guard (mfTrusted plus per-render token) was already at all eight receivers (PRs 1755, 1791, 2196, 2203, 2212); this change makes FieldDescriptor.value/defaultValue optional to match the JSON the webview receives, with a positive-control receiver fixture. The ASVS 3.5.5 vault amendment and its re-read follow this merge.
…ned; fixtures carry envDefault and preserveValue Round one of the diff check. `connection schema --json` always emits `default` (null when the factory has none), so defaultValue is undefined at least for a key the schema does not describe and for a schema param with no `default` member; the first commit's message said "a schema param with no default", which yields null, not undefined. value is undefined for a secret and an env reference too, not only an unset key; the doc now says so. The webview comment no longer calls envDefault and preserveValue "carried-through": the page never reads either. FIELDS_OK now carries an env default and an inline secret literal, and the fixture-shape test pins both members present and absent, so a shape clause refusing either would fail. BACKLOG #1123 Proposed PR title: IDE: FieldDescriptor.value and defaultValue are optional, matching what the connection editor webview receives Proposed ledger banner: #1123 engine half BUILT: the postMessage origin guard (mfTrusted plus per-render token) was already at all eight receivers (PRs 1755, 1791, 2196, 2203, 2212); this change makes FieldDescriptor.value/defaultValue optional to match the JSON the webview receives, with a positive-control receiver fixture. The ASVS 3.5.5 vault amendment and its re-read follow this merge.
The toolkit name is claimed on PyPI, so the install-provenance guard moves it from _UNPUBLISHED_DISTRIBUTIONS to _PUBLISHED_DISTRIBUTIONS. The unpublished set is empty again, the goal state. Probe read 2026-10-27 against PyPI's JSON API: 200 for /pypi/messagefoundry-toolkit/json, /0.5.0/json and /0.5.1/json; 404 for the control /0.0.0.dev999/json and for an unregistered project name. The 0.5.0 wheel's provenance names publisher MEFORORG/MessageFoundry, workflow release.yml. The harness at 0.5.1 returned 200 as the ADR's control. Moves no CLI subcommand or module; that is slice 4. Touches only the one distribution in the two sets that BACKLOG #1193 shares. BACKLOG #1192
The comment said "All four distributions"; a pinned count goes stale at the next distribution. /simplify finding. BACKLOG #1192
The _refuse_toolkit_command docstring said the toolkit was not yet on PyPI; it now says the line was written while the name was unclaimed and slice 3 recorded the claim. The provenance test restores the note that its detector matches an install verb only, and its probe record names the harness control, scopes each control path, and rests "this repo's upload" on the release list plus every wheel's provenance, not on 0.5.0 alone. BACKLOG #1192 Proposed PR title: ADR 0201 slice 3: messagefoundry-toolkit is a published distribution (BACKLOG #1192) Proposed ledger banner: #1192: ADR 0201 slice 3 built (the install-provenance guard lists messagefoundry-toolkit as published after a PyPI probe with controls). Slice 5 is on its own PR; slices 4, 6, 7 and the release-gated 15.2.3 re-score (slice 8) remain.
|
QA -- korus roles/BUILDER.md step 11 (BACKLOG #1123) |
|
QA -- korus roles/BUILDER.md step 11 (BACKLOG #1192, slices 3 and 5, one review over both) |
|
Manager triage of the two red legs on head 51ca7e4 (the attribution is a reading for the Lander, not a ruling):
|
|
Lander (session 8a04c9f3), 2026-10-28. Enqueuing at pinned head Review proof: the Builder QA lines cover source heads Open findings, each filed on vault
|
Batch 448 (security-asvs), engine wave. Two items. ADR 0201 slice 5 of #1192 is on its own PR, #2580, as ADR 0201 section 5 requires.
BACKLOG #1123 -- research an honest pass for ASVS 3.5.5 (postMessage origin check in a VS Code webview)
Merge danger
Reversible: yes -- reverting the squash undoes it; a hand revert of
ide/src/and its test if only this item must go.Blast radius: the IDE extension's connection editor types and one receiver test suite:
ide/src/connectionForm.ts,ide/src/connectionEditorWebview.ts(comment only),ide/src/test/suite/webview-receivers.test.ts. No engine runtime code.Evidence
FieldDescriptor.valueanddefaultValuewere declared required, butdescribe()/describeUnknown()set them toundefinedand JSON drops undefined members, so the declared type over-promised what the webview receives. No fixture exercised a descriptor without them.?: unknown. A newFIELDS_BAREfixture joins the connection editor's well-formed list and the ACCEPTS loop accepts it. Mutation control: adding('value' in f)(and separately('defaultValue' in f)) to the receiver made the ACCEPTSfieldstest fail both times; the receiver was restored after each run.npm run typecheckexit 0,npm run compileOK,npm run test:unit1200 passing, 0 failing.Item detail
b448-1123-descriptor-optional, head96e35b0d9f01adbb4e34869784ea24bb3b809923, base93f6438c7.-Take. The item is cited only in commit bodies.ide build (windows-latest). It alone runs the Extension Host suite, and the Builder did not run that suite locally.defaultmember of an{env, default}setting; the page never readsenvDefault. Reproduced in jsdom.fieldsrebuild, becausepreserveValueis never posted back. Reproduced in jsdom.describe()could omit the members instead of setting them toundefined.preserveValuesends the plaintext inline credential to a webview that never reads it.bare.every(...)assertion only re-checks the fixture's own delete loop.Proposed ledger banner, carried verbatim from the branch's final commit:
BACKLOG #1192 -- ADR 0201 slice 3: messagefoundry-toolkit is a published distribution
Merge danger
Reversible: yes -- a revert of the squash, or a hand revert of the two files.
Blast radius:
tests/test_install_instruction_provenance.py(the published/unpublished distribution sets) and one docstring in_refuse_toolkit_commandinmessagefoundry/__main__.py. Behaviour is unchanged; no CLI subcommand or module moved.Evidence
messagefoundry-toolkitsat in_UNPUBLISHED_DISTRIBUTIONS, and the__main__.pydocstring said the toolkit was "not yet on PyPI".messagefoundry-toolkit/json200 (releases 0.5.0, 0.5.1, 0.5.2; earliest uploaded 2026-10-01),/0.5.0/json200,/0.5.1/json200,messagefoundry-harness/0.5.1/json200; controlsmessagefoundry-toolkit/0.0.0.dev999/json404 andmessagefoundry-toolkit-notreal-zz9/json404. Every toolkit wheel's provenance names publisherMEFORORG/MessageFoundry, workflowrelease.yml. The distribution moved to_PUBLISHED_DISTRIBUTIONS; no other distribution changed, so the sets docs(method): a Manager and the Lander may spawn a session #1193 shares are otherwise untouched.Item detail
b448-1192-slice-3, head7c0eb57e94f54aea83564b505fb04b8651f0ea0d, base4e52f4ede.release.ymlheader still describes the Trusted Publisher as pending. Possible security gap for the owner, unverified: every toolkit wheel's provenance showsenvironment: None, while ADR 0201 section 1 says the publisher should carry environmentpypi. The__main__.pydocstring now names slice 4 and will go stale when slice 4 lands.Proposed ledger banner, carried verbatim from the branch's final commit:
Combined tree (batch/b448 at the head of this PR, base origin/main 4e52f4e)
ruff check .: all checks passed.ruff format --check .: 2152 files already formatted.mypy --platform linux messagefoundry messagefoundry_webconsole messagefoundry_toolkit --exclude messagefoundry/tray/: no issues in 364 files.mypy --platform win32 messagefoundry messagefoundry_toolkit: no issues in 345 files.python scripts/hooks/ledger_check.py --ci: exit 0.pytest -n auto: 52239 passed, 1219 skipped, 151 xfailed, 6 failed. None of the six reads a file this PR changes (the diff is threeide/srcfiles, one__main__.pydocstring andtests/test_install_instruction_provenance.py); they test this machine's installed hooks and local tooling:test_gate_installed_parity,test_installed_coord_hooks(claim_check.py, coord/coord_root.py),test_steer_inject(CRLF case),test_workflow_shell_syntax,test_durability_hook_rewrite_coverage. A control run on origin/main could not run (the suite refuses a second checkout'stestsunder this venv), so CI is the arbiter for these.

Confidence Score: 5/5
The PR appears safe to merge; no new actionable issues were found.Summary
Makes
FieldDescriptor.valueanddefaultValueoptional to match the JSON sent to the connection editor.valueanddefaultValue.Acknowledgments from
wshallwshall, excluded from findings:preserveValuecarries plaintext that the page does not read. These were identified as pre-existing and deferred.Reviews (1) · Last reviewed commit: "Merge remote-tracking branch 'origin/b44..." · Reviewed by Greptile