Skip to content

docs(acceptance): 17.0 GA acceptance for rc.2 — plan, full report, GA regression checklist - #676

Closed
yinlianghui wants to merge 11 commits into
mainfrom
claude/hotcrm-17-rc1-acceptance-hj869o
Closed

docs(acceptance): 17.0 GA acceptance for rc.2 — plan, full report, GA regression checklist#676
yinlianghui wants to merge 11 commits into
mainfrom
claude/hotcrm-17-rc1-acceptance-hj869o

Conversation

@yinlianghui

@yinlianghui yinlianghui commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Description

Acceptance-testing deliverables for the 17.0 GA release, run on current main (@objectstack/* 17.0.0-rc.2 — the task targeted rc.1, but main moved to rc.2 in #663 before this run started, so every verdict is stated against rc.2).

All eight planned sections executed. Automation baseline, object CRUD, 26 actions, 24 flows, 5 dashboards + 10 reports, four-locale i18n, the 5-profile permission matrix, and all ten platform-blocker retests.

Type of Change

  • Documentation update

Related Issues

Filed this run (23): #680 #681 #682 #683 #684 #688 #689 #690 #691 #692 #693 #696 #698 #700 #701 #702 #703 #704 #705 #706 #707 #708 #709
Retested / updated with rc.2 data (15): #494 #508 #509 #510 #521 #522 #524 #525 #526 #528 #548 #645 #661 #673 #682

Changes Made

  • docs/acceptance-17/test-plan.md — plan rebased onto current main
  • docs/acceptance-17/test-report.md — full results, evidence, honest record, and the GA minimal-regression checklist
  • docs/acceptance-17/parallel-task-packages.md — P1–P5 task packages
  • docs/acceptance-17/HANDOFF.md + evidence/ — handoff page and the run's text evidence (executor records, retest playbook, permission matrix)
  • .changeset/acceptance-17-rc2-test-plan.md — empty-frontmatter changeset (docs-only)

No src/ changes — the mandate was test-don't-fix.

Headline results

Green / lifted

Blocking for GA

The report's TL;DR states plainly that 17.0 GA should not ship a permission-bearing HotCRM until these are fixed and the §11 checklist re-passes.

Three rc.0-era records overturned and stated as such: #525 does not reproduce, there is no contract status board on main, and kanban drag is automatable via the real mouse API. One W1 finding (silent screen-flow no-op) was retracted after W2B could not reproduce it.

Testing

  • Unit tests pass (pnpm test — 1280 passed / 1 skipped)
  • Linting passes (pnpm lint)
  • Build succeeds (pnpm build)
  • Manual testing completed — all eight sections, evidence in the report
  • New tests added (not applicable — docs only)

Screenshots

Not applicable (docs-only). ~200 evidence screenshots live in the run's scratch directory; the committed evidence/ holds the text records.

Checklist

  • Docs-only; no src/ modifications
  • Changeset included (empty frontmatter)
  • Every verdict is backed by a status code, server-log line, or screenshot

🤖 Generated with Claude Code

https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g

…rent main

Rebases the rc.0-era plan from upgrade/objectstack-17 onto the current tree:
drops retired surfaces (AI agents #512, competitor #551), adds the activity
model (#592/#670), refreshes the metadata census to the rc.2 numbers
(17 objects / 26 actions / 24 flows / 5 dashboards / 10 reports), adds the
profile permission matrix, four-locale i18n checks, the full-coverage flow
pass, and the platform-blocker retest ledger with expected outcomes from the
upstream fixes shipped in rc.1/rc.2.

Refs #520 #521 #522 #524 #525 #526 #528 #508 #509 #510

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
hotcrm Ignored Ignored Aug 5, 2026 9:04am

Request Review

@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Aug 5, 2026
claude added 4 commits August 5, 2026 02:31
Baseline (pnpm verify, Playwright e2e 16/16, cold boot) plus the three
read-only sweeps: 15/17 objects clean with zero application console errors,
5/5 dashboards and 10/10 reports resolving real data, and the four-locale
i18n matrix. Confirms two rc.0-era blockers are lifted on rc.2 (#520 datetime
window filters, #523 matrix report date granularity) and records the honest
account of one hypothesis the probes disproved.

Write-phase sections are marked as being filled in.

Refs #520 #523 #494 #645 #661 #671 #680 #681 #682 #683 #684

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
…hases

The write phases run serially in the orchestrating session; this documents the
alternative delivery the maintainer asked for — five packages that can each be
driven from a separate chat, with per-package record prefixes, a shared-server
do-not-do list, and the physical-isolation fallback (own port + own DB file).

Carries the environment facts this run had to discover: the auth endpoint is
/api/v1/auth/sign-in/email (the obvious /auth/login returns 500), and the three
entrypoints default to three different SQLite files, so a migrate plan aimed at
the dev server's database needs an explicit --database-url.

Refs #507 #508 #509 #510 #515 #520 #521 #522 #523 #524 #525 #526 #528 #548 #549 #671 #684

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
…cts it found

REST-layer CRUD passes on all 17 objects with zero leftovers; the console New
form for crm_lead is unusable because the renderer ignores visibleOn while
enforcing required (#688). Also files the SQL-layer validation path (#689),
the null nameField formula (#690), the 403-for-a-missing-parent shape (#691),
the lookup redisplay (#692) and the mis-addressed cascade delete errors (#693).

Two rc.0-era records are overturned and stated as such: there is no contract
status board on main, and kanban drag IS automatable with the real mouse API.
#525 does not reproduce — cross-tab values survive a failed submit.

The honest-record section now carries the full arc of one hypothesis that was
disproved and then reinstated on further evidence, since stopping at either
intermediate step would have published a wrong conclusion.

Refs #515 #520 #523 #525 #547 #671 #684 #688 #689 #690 #691 #692 #693

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
… regression checklist

The sweep stopped early when the session budget ran out, so the report now says
so plainly: five of eight planned sections executed, three (full actions, full
flows, profile permission matrix) did not, and the six remaining blocker
retests are listed as unverified rather than silently absent.

Adds the GA minimal-regression checklist the run was asked for, marking each
item as either verified-this-round or still-unverified so the next session can
tell what it is confirming versus testing for the first time.

Records the teardown honestly, including the leftover W2 test records and the
two defects that blocked their deletion — one filed as #696, the other left
unfiled because it plausibly duplicates #548 and was not isolated.

Refs #494 #520 #521 #522 #523 #525 #548 #645 #661 #684 #688 #696

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
@yinlianghui yinlianghui changed the title docs(acceptance): 17.0 GA acceptance test plan (rc.2) + acceptance report docs(acceptance): 17.0 GA acceptance for rc.2 — plan, partial report, GA regression checklist Aug 5, 2026
claude added 5 commits August 5, 2026 03:53
…ence

The evidence lived only in the session scratchpad, which dies with the
container — so a colleague picking this up on their own account would have
inherited a report full of references to files they cannot open. The four
executor records, the blocker-retest playbook and the profile expectation
matrix are now in the repo (116KB of text); the ~200 screenshots are not, and
evidence/README.md says so plainly rather than leaving dead references
unexplained.

HANDOFF.md is the entry point: what is done, what is not, the three commands
to get running, the eight environment traps this run hit, and the one
observation deliberately left unfiled because it may duplicate #548.

Also replaces the four '(填充中)' placeholders in the result matrix with an
explicit 未执行, so nothing unrun can be misread as in progress.

Refs #520 #523 #548 #684 #688 #696

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
…ted on rc.2

Isolated-environment retest (own port, own DB file, nothing shared at risk):
migrate now detects an occupied database at plan time, refuses apply before
any DDL with a --force escape hatch, and demands --yes even when free — the
rc.0 confirmation-less DDL behaviour is gone. On a fresh rc.2 database all
five __search columns are live and plan reports in-sync, with a planted junk
column proving the orphan detector still fires; the orphan condition this
issue tracked only exists on rc.0-era databases.

One residual recorded on the issue rather than filed: the occupied-DB refusal
exits 0, which scripting would misread as success.

Refs #526 #528

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
…rdicts

The relaunched action executor covered all 26 actions: 25 pass with verified
data artifacts, the one failure being mass_update_stage. Blocker retests are
now 10/10 — nine lifted (including all three rc.0 upgrade blockers), #508
still reproducing on every invocation path though now honestly. All verdicts
are commented on their issues with evidence.

Also records the quantified #548 evidence (ctx.api inserts never stamp
owner_id, making any record with a logged activity undeletable for everyone),
files #698 (case autonumber lag + burn-on-failure), and retracts W1's
silent-no-op finding after W2B could not reproduce it — the retraction and
its reasoning live in the honest-record section.

Refs #508 #509 #510 #520 #521 #522 #523 #524 #526 #528 #548 #673 #682 #684 #688 #696 #698

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
…ct, three new issues

All 24 flows verified with run-store evidence (trigger.userId per run): screen
flows re-confirmed, all nine record-change flows healthy on the user-session
path, both approval flows through approve and reject with lock enforcement,
all seven scheduled sweeps exercised via manual trigger with idempotency
checks, and demo_bootstrap green under the #663 shape.

The #684 verdict is the headline: user path healthy, system path fully broken,
demonstrated in-window as an approval bypass — a 50K flow-created deal
shipped approval_status=not_required with no request. Files #700 (automation
create_record inserts owner_id/organization_id NULL — sweep-created records
born admin-untouchable on real installs), #701 (record-change flows re-enter
on their own write; the engine loop-breaker, not the authored condition, is
what stops the loop) and #702 (re-seed × snapshot phantom forecast row).

Refs #507 #548 #617 #663 #671 #684 #690 #696 #698 #700 #701 #702

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
…ections complete

The 5-profile matrix (188 probes) is the run's heaviest result: the app's
declared authorization posture is largely fiction at runtime. Five platform
root causes — a member_default wildcard grant that voids the object gate on
create/read/edit (#703), controlled_by_parent reads going org-wide and leaking
line-item pricing (#704), modifyAllRecords and edit-shares granting no write
(#705), a regressed campaign RLS widener (#706), and admin bypassing the export
hard-gate (#707) — plus demo_bootstrap confiscating user records (#708) and
matrix docs promising unfulfillable writes (#709). FLS, private-OWD read sets,
is_private RLS, share reads and the four personas' export bits are the layers
that match exactly. #548 is confirmed systematically: ownership splits across
three columns and a complete hand-off is impossible.

Finalizes the TL;DR (GA not recommended until the permission model, #688, the
ownership/write family and #684 are fixed), adds §6d, the C2 permission gate to
the GA checklist, and squares §8/§10 with what the later phases proved. All
eight planned sections are now executed.

Refs #547 #548 #620 #684 #688 #700 #703 #704 #705 #706 #707 #708 #709

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
@yinlianghui yinlianghui changed the title docs(acceptance): 17.0 GA acceptance for rc.2 — plan, partial report, GA regression checklist docs(acceptance): 17.0 GA acceptance for rc.2 — plan, full report, GA regression checklist Aug 5, 2026
…cuted

Reframes HANDOFF.md from a mid-run baton-pass to a re-run/repair guide now
that every section is done, and puts the one-line GA verdict up top: not
recommended to ship until the permission model (#703/#704), lead-create UI
(#688), the ownership/write family (#548/#700/#705) and #684 are fixed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URfByxcWd39Vv8u5z4F11g
@yinlianghui yinlianghui closed this Aug 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants