Repository navigation
docs(qa): qa-media-constraints and qa-feeds-disabled declare namespaces their object names carry - #26907
Merged
Conversation
…es their object names carry
Both recipes installed a package with no manifest.namespace, so the
install derived 'media' / 'feeds' from the id and the object save
answered 422 NAMESPACE_PREFIX. Neither may declare 'qa' (owned by
qa-scratch-authz's package; a second owner answers NAMESPACE_CONFLICT),
so each declares its own namespace and its object is renamed:
qa_media -> qamedia_media ('qamedia'), qa_nofeeds -> qafeeds_nofeeds
('qafeeds'). The two opting-in items take a revision and a history row.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JQwxbWktv4mkt4CV6quMSp
…for its carrier The item authored qa_group_gate inline under a scratch package that named no namespace, so the install derived one from the id and the object save answered 422 NAMESPACE_PREFIX. steps[1] now names the package id and declares namespace 'qagroup' (not 'qa', which qa-scratch-authz owns), and the object is renamed qagroup_group_gate. Revision 7 -> 8 with a history row recording the replay. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JQwxbWktv4mkt4CV6quMSp
This was referenced Oct 27, 2026
…-w4r8ig # Conflicts: # docs/qa/platform-checklist/areas/records-forms.json
Contributor
Author
维护者速读
席位核对ACCEPT ·
|
os-warren
pushed a commit
that referenced
this pull request
Oct 27, 2026
…discussion-mentions and fold the seat-requested stale texts main's #26907 landed record-discussion-mentions revision 10, so this branch's row becomes revision 11 after it. At the seat's request the same commit retires the text the recipes made stale: record-discussion-mentions automated.ref no longer says the walled leg waits on this card; action-location-matrix steps[6] and acceptance[4].verify name the qaact-placement-specimen recipe and the surfaces that count; import-job-undo-cancel fixtures.requires[2] and steps[0] name the qa-crm-import-console route, keeping the showcase scratch-copy route as the alternative. The three history rows say so. Claude-Session: https://claude.ai/code/session_01JQwxbXyxFGYMNdVd5maF1e Co-Authored-By: Claude <noreply@anthropic.com>
8 tasks done
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.
Requested by Warren · project thread
Fixes #26876
Clause-②: no
Metadata-protocol: none
维护者速读
qa-media-constraints→qamedia,qa-feeds-disabled→qafeeds),对象随之改名qa_media→qamedia_media、qa_nofeeds→qafeeds_nofeeds;用到它们的两个条目 revision 各升一级(6、9)并加一行 history。media/feeds,第 2 步建对象 422 NAMESPACE_PREFIX,条目只能记 blocked(fixture)。不能也声明qa:qa已归qa-scratch-authz的包所有,同机第二个qa包实测 422 NAMESPACE_CONFLICT。node scripts/check-platform-checklist.mjs,预期 OK。What changes
areas/attachments-storage.json, recipeqa-media-constraints: step 1 declaresmanifest.namespace: "qamedia"; step 2 savesqamedia_media. Step 1'sexpectsays why the namespace is declared, why it is notqa, and that the three QA packages (qa,qamedia,qafeeds) co-install on one boot as a supported run shape; itssourcecites the derivation, the prefix judge andNamespaceConflictError.provenancerecords the replay below. The stale knownGap "this recipe has NOT yet been proven by a live run" now points at the two live proofs (QA run QA run · attachments-storage (11/11) · 5b14b7f3 · 2026-10-19 · 10 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #24560 and this replay).areas/records-forms.json, recipeqa-feeds-disabled: the same change withqafeeds/qafeeds_nofeeds, includingprovenance.historyrow citing qa(checklist): two more package-authored QA recipes (qa-media-constraints, qa-feeds-disabled) answer 422 NAMESPACE_PREFIX at their first object save, and neither may declare the namespace qa #26876 each:attachments-storage.field-accept-maxsize-server-enforced(5 → 6):qa_media→qamedia_mediain fixtures.requires[0], provisioning.why, steps, acceptance and negative.records-forms.record-discussion-mentions(8 → 9):qa_nofeeds→qafeeds_nofeedsin steps[8], steps[9], acceptance[5], acceptance[6].verify and negative[2], thethread_idspelling'qafeeds_nofeeds:<id>'included.Why
The only namespace
qa_mediaandqa_nofeedsalready carry isqa, and PR #26875 gaveqatocom.objectstack.qa.attachments. A namespace has one owner per boot, so a rename was the only fix that keeps all three recipes installable together. Each recipe now declares a namespace instead of relying on the id-derived default, and the object keeps its old stem after the new prefix (qa_X→qaNS_X), following theqasubprecedent inareas/automation.json. The package ids are unchanged, so each teardownDELETEstill names the same package.Recipe sweep (triage 6452130965)
Every area recipe in
docs/qa/platform-checklist/areas/*.jsonwas read for the same shape: a step-1 manifest with no namespace whose objects carry another prefix. 8 recipes:qa-scratch-authzqaqa-media-constraintsqa-feeds-disabledqa-flow-status-doorsautomationobjectsaves (protocol.ts,singularType === 'object'); replayed steps 1–3 on the same boot, 201/200/200qa-second-packaged-callerqasub, flowqasub_*qa-cross-org-requestcli-18-prerelease-dbqa-contributor-bound-memberVerification
No code changed. Both recipes were replayed REST only on one fresh stock showcase boot built from main a51ba63 (full
turbo run build, thenpnpm dev -- --fresh -p 4876, no env posture). The script read each recipe's JSON from the file and sent it literally: the "before" leg from origin/main's text, the "after" leg from this branch.Replay transcript
Local gates on head 40d6c4f (main c4a4aef), derived by
node scripts/pm/dispatch-gates.mjs --commands: 16 families, all exit 0;--ranreconciles 16 derived, 16 run, 0 NOT-MEASURED.check:platform-checklistprintsOK — 16 areas, 329 items … provisioning: 8 area recipes, 13 item references resolved … 8/8 recipes referenced.Gate run
CI families outside the derived list are left to the PR's check-runs.
Acceptance notes
records-forms.field-group-visible-whenauthorsqa_group_gateinline ("install a scratch package, then PUT /api/v1/meta/object/qa_group_gate?package=", reusing this recipe's pattern) with no namespace named. Under any scratch id other than one ending inqait meets the same 422, and declaringqacollides withqa-scratch-authz. It is an item step, not an area recipe, so the sweep did not touch it.packages/rest/src/rest-declared-client-refusal-log.test.tsstill mocks an object namedqa_media. It is a unit-test stand-in that never reads this recipe, so it is left alone.records-forms.json(other items). Whichever PR lands second mergesorigin/mainand re-runscheck-platform-checklist.Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses. (no linted file touched)main, one pull request.skip-changeset)packages/spectouched: its generated artifacts are regenerated and committed. (not touched)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01JQwxbWktv4mkt4CV6quMSp