Skip to content

L7: correct the two "customize in Studio" promise pages to per-regime truth (ADR-0126 §8.4) #12161

Description

@os-support-ai

Part of #12150 (Epic: ADR-0126 implementation, v17 line — 17.x minor, maintainer-ruled). Docs lane.
Blocked-by: objectstack-ai/objectui#6301
Dispatch: coordinated under the #12150 program — ⛔ not from the general queue; the program dispatches on unlock (maintainer anti-preemption instruction, 2026-08-25, PM session session_01KWRU3s15AJz7PGW7a7wdCh). Contract: ADR-0126 §1.3 + §8 item 4 (merged 28b47a93).

Deliverable

The two shipped promise pages measured by the survey (#12049 comment 5406807988 §5) are corrected to promise what each regime actually delivers:

  • content/docs/capabilities/integrations.mdx:17 — "install complete apps … then customize in Studio"
  • content/docs/build-without-code.mdx:37 — "ready to customize in Studio"

Rewrite to the three-regime truth: views/dashboards/reports/translations/email templates → edit or overlay directly; packaged flows (and later actions) → switch off and clone your own; objects → extend with your own fields via an extension package; everything else packaged → author new siblings. The honest-negative style of import-mappings.mdx:85 is the house voice to match.

⛔ Timing is the contract: only after the L5 surface exists — correcting earlier trades an over-promise for a differently-shaped one (ADR §8.4). ⛔ Never touch content/docs/releases/** on this card.

Acceptance

  • Both pages promise only shipped behavior, per regime; no other doc pages widened.
  • Doc gates green (check:doc-authoring, link check).

Refs: ADR-0126 §1.3, §8.4 · survey §5

Activity

  1. added
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Aug 25, 2026
  2. os-support-ai commented on Aug 25, 2026

    @os-support-ai
    CollaboratorAuthor

    Claiming — dispatched under the #12150 program (standing autonomy ruling, maintainer, 2026-08-25, verbatim: 「继续自主完成所有开发」).


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Aug 25, 2026
  4. os-support-ai commented on Aug 25, 2026

    @os-support-ai
    CollaboratorAuthor

    <!-- os-dev-report -->

    {
      "issue": 12161,
      "status": "done",
      "branch": "claude/issue-12161-promise-pages",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/12368",
      "premise_still_valid": true,
      "summary": "Rewrote the two ADR-0126 §1.3 over-promise passages to per-regime truth: content/docs/capabilities/integrations.mdx:17 (Marketplace templates bullet) and content/docs/build-without-code.mdx:37 (Setup section's Marketplace clause). Both no longer say a blanket 'customize in Studio' -- they now state views/dashboards are editable directly, a packaged flow is locked but can be switched off and cloned via Setup's packaged-automation page (edited in Studio after), and a packaged object grows only through an extension package's own fields. Verified the §8.4 timing precondition myself against objectui#6382 (merged b362c1b, closes #6301) before writing. Draft PR #12368 opened against main, head e7f41817. This is a docs-only change with no released package touched, so per AGENTS.md item 3 and the repo's real skip-changeset label mechanism (confirmed via scripts/check-empty-changeset.mjs), I applied the label myself: read current labels (['size/xs']), wrote the union (['size/xs','skip-changeset']), and read back to confirm it held -- no changeset file added.",
      "tests": "Derived the exact local gate set for this diff with node scripts/pm/dispatch-gates.mjs (23 matched families vs merge-base 017130a09 of origin/main). Built the dependency closures the gates needed first (spec, formula, lint, client-react, client -- none were pre-built in the fresh worktree). All 23 ran green via scripts/pm/os-verify-lock.sh at final head e7f41817: check:doc-authoring, check:doc-anchors, check:cross-package-test-inputs (+ its node-script twin check-cross-package-test-inputs.mjs), check:doc-formula-expressions, check:doc-security-posture, spec check:docs (229 generated files in sync), check:docs-audit-scope, check:docs-redirects, check:docs-single-h1, spec check:empty-state, spec check:liveness, check:published-readme-links, check:react-page-adapter-contract, check:role-word (no new occurrences), spec check:skill-examples (256 prose examples type-check across 3 surfaces), spec check:strictness-ledger, spec check:variant-docs, check-ci-filter-parity.mjs, check-doc-frontmatter.mjs, check-doc-route-spelling.mjs, check-docs-section-name.mjs, check-section-landing-index.mjs. Re-ran dispatch-gates.mjs after the final commit to confirm the matched file set was unchanged (still exactly the same 2 files). NOT run: the CI lychee link-check workflow itself (offline binary not installed in this environment, and it is an advisory CI-only lane per .github/workflows/check-links.yml, not a local pnpm script) -- substituted a manual check instead: confirmed /docs/build-without-code (the one link added) resolves, since content/docs/build-without-code.mdx exists and is listed in content/docs/meta.json's pages array; check:doc-anchors (which does run locally) confirms 278 #fragment links resolve project-wide, though the new link carries no fragment so that gate does not directly cover it.",
      "open_questions": [
        {
          "question": "This session's standing system-prompt declares a different terminal-report JSON schema than the one the dispatch prompt specified (issue/pr-number/pr_url/branch/head_sha/files_changed/gates-map/changeset/deviations/notes), and states that on a conflict the standing prompt wins, flagged in the report rather than silently resolved. The standing schema was used for the terminal message. Restating the dispatch-prompt's requested fields here so nothing is lost: files_changed=[content/docs/capabilities/integrations.mdx, content/docs/build-without-code.mdx]; head_sha=e7f41817bc98f51a3847d706b316eabc3637ff02; gates={all 23 matched families: pass}; changeset=skip-changeset-needed (label applied, confirmed via read-back); deviations=[amended the first commit to drop a 'Fixes #12161' trailer per the standing prompt's squash-safety rule -- card relation declared once, in the PR body only; lychee link-check not runnable locally, see tests field].",
          "options": [
            "A: Standing schema is correct as configured -- keep parsing it for os-dev terminal reports; no action needed.",
            "B: The #12150 program coordinator expects the dispatch-prompt's schema specifically -- if so the append_system_prompt for this program should be updated so future cards in this epic report consistently."
          ],
          "recommendation": "A, because the standing prompt is explicit that it governs on conflict and that dispatch prompts carry only per-card deltas -- flagged since it's unclear from inside this session whether the #12150 coordinator's parser was actually written against the other shape."
        }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  5. os-support-ai commented on Aug 25, 2026

    @os-support-ai
    CollaboratorAuthor

    os-dev-report

    (previous comment's marker survived only as escaped text, not the recognized token — this comment is the fallback spelling per the sanitizer note; same report as above, reposted verbatim below.)

    {
      "issue": 12161,
      "status": "done",
      "branch": "claude/issue-12161-promise-pages",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/12368",
      "premise_still_valid": true,
      "summary": "Rewrote the two ADR-0126 §1.3 over-promise passages to per-regime truth: content/docs/capabilities/integrations.mdx:17 (Marketplace templates bullet) and content/docs/build-without-code.mdx:37 (Setup section's Marketplace clause). Both no longer say a blanket 'customize in Studio' -- they now state views/dashboards are editable directly, a packaged flow is locked but can be switched off and cloned via Setup's packaged-automation page (edited in Studio after), and a packaged object grows only through an extension package's own fields. Verified the §8.4 timing precondition myself against objectui#6382 (merged b362c1b, closes #6301) before writing. Draft PR #12368 opened against main, head e7f41817. This is a docs-only change with no released package touched, so per AGENTS.md item 3 and the repo's real skip-changeset label mechanism (confirmed via scripts/check-empty-changeset.mjs), I applied the label myself: read current labels (['size/xs']), wrote the union (['size/xs','skip-changeset']), and read back to confirm it held -- no changeset file added.",
      "tests": "Derived the exact local gate set for this diff with node scripts/pm/dispatch-gates.mjs (23 matched families vs merge-base 017130a09 of origin/main). Built the dependency closures the gates needed first (spec, formula, lint, client-react, client -- none were pre-built in the fresh worktree). All 23 ran green via scripts/pm/os-verify-lock.sh at final head e7f41817: check:doc-authoring, check:doc-anchors, check:cross-package-test-inputs (+ its node-script twin check-cross-package-test-inputs.mjs), check:doc-formula-expressions, check:doc-security-posture, spec check:docs (229 generated files in sync), check:docs-audit-scope, check:docs-redirects, check:docs-single-h1, spec check:empty-state, spec check:liveness, check:published-readme-links, check:react-page-adapter-contract, check:role-word (no new occurrences), spec check:skill-examples (256 prose examples type-check across 3 surfaces), spec check:strictness-ledger, spec check:variant-docs, check-ci-filter-parity.mjs, check-doc-frontmatter.mjs, check-doc-route-spelling.mjs, check-docs-section-name.mjs, check-section-landing-index.mjs. Re-ran dispatch-gates.mjs after the final commit to confirm the matched file set was unchanged (still exactly the same 2 files). NOT run: the CI lychee link-check workflow itself (offline binary not installed in this environment, and it is an advisory CI-only lane per .github/workflows/check-links.yml, not a local pnpm script) -- substituted a manual check instead: confirmed /docs/build-without-code (the one link added) resolves, since content/docs/build-without-code.mdx exists and is listed in content/docs/meta.json's pages array; check:doc-anchors (which does run locally) confirms 278 #fragment links resolve project-wide, though the new link carries no fragment so that gate does not directly cover it.",
      "open_questions": [
        {
          "question": "This session's standing system-prompt declares a different terminal-report JSON schema than the one the dispatch prompt specified (issue/pr-number/pr_url/branch/head_sha/files_changed/gates-map/changeset/deviations/notes), and states that on a conflict the standing prompt wins, flagged in the report rather than silently resolved. The standing schema was used for the terminal message. Restating the dispatch-prompt's requested fields here so nothing is lost: files_changed=[content/docs/capabilities/integrations.mdx, content/docs/build-without-code.mdx]; head_sha=e7f41817bc98f51a3847d706b316eabc3637ff02; gates={all 23 matched families: pass}; changeset=skip-changeset-needed (label applied, confirmed via read-back); deviations=[amended the first commit to drop a 'Fixes #12161' trailer per the standing prompt's squash-safety rule -- card relation declared once, in the PR body only; lychee link-check not runnable locally, see tests field].",
          "options": [
            "A: Standing schema is correct as configured -- keep parsing it for os-dev terminal reports; no action needed.",
            "B: The #12150 program coordinator expects the dispatch-prompt's schema specifically -- if so the append_system_prompt for this program should be updated so future cards in this epic report consistently."
          ],
          "recommendation": "A, because the standing prompt is explicit that it governs on conflict and that dispatch prompts carry only per-card deltas -- flagged since it's unclear from inside this session whether the #12150 coordinator's parser was actually written against the other shape."
        }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

pm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions