| content |
{"Commits":[{"Sha1":"bf52bdf93 {"Commits":[{"Sha1":"bf52bdf93120179ab34271834d1ad59d0aef9715","Message":"feat(customer): customer@1.8.0 candidate adds cus_ canonical ID to CustomerAccount (G0 ID03)\n\nOpenCustomerAccount now generates a cus_ canonical ID (prefix + 26 lowercase\nCrockford: 48-bit millisecond time + 80 cryptographic random bits, same shape\nas Contact con_), stores it in customer.customer_account.canonical_id (unique\nper tenant, immutable), and returns it in the receipt and the\nCustomerAccountOpened event. Entity reads, ListCustomerAccounts (new exact\ncanonicalId filter) and both account read guards expose canonicalId.\n\nAppend-only migration sql/008_customer_account_canonical_id.sql adds the\ncolumn and constraints, requires a canonical ID on new rows and replaces the\naccount guard and the two read-guard bodies. Existing accounts are not\nbackfilled (no Contact backfill precedent): they read canonicalId null and the\nguard refuses filling them in later. Never derived from UUID, name or phone.\n\nOmni read candidate projects canonicalId for CustomerAccount (null when\nabsent), rejects malformed values and mapping/Owner mismatches. Descriptions,\nonboarding SOP (revision 4), generated tools/knowledge/procedures, delivery\nunit, omni read contract, queries README and README status synced.\n\nFull suite 551/551 (0 fail/cancel/skip); npm run check zero findings; eight\nmaterial checks pass. Not tagged, not pushed, not loaded into EES.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-22T10:06:17-07:00"},{"Sha1":"b658f4696cf3e02b48d716c4a43f2c3ec549d16f","Message":"docs(agents): point package work at the 02 business-platform-development skill\n\nAGENTS.md 开头加一段:在本仓开工前先读 02 层的 skills/business-platform-development/SKILL.md(分流与停止条件、改动 → 生成 → 检查 → 同步矩阵、测试覆盖、发布与交 04 装载前置);技能只给方法,与本文件硬约束冲突时以本文件为准。不改规则、包或测试。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-22T11:02:42-07:00"}],"HeadCommit":{"Sha1":"bf52bdf93120179ab34271834d1ad59d0aef9715","Message":"feat(customer): customer@1.8.0 candidate adds cus_ canonical ID to CustomerAccount (G0 ID03)\n\nOpenCustomerAccount now generates a cus_ canonical ID (prefix + 26 lowercase\nCrockford: 48-bit millisecond time + 80 cryptographic random bits, same shape\nas Contact con_), stores it in customer.customer_account.canonical_id (unique\nper tenant, immutable), and returns it in the receipt and the\nCustomerAccountOpened event. Entity reads, ListCustomerAccounts (new exact\ncanonicalId filter) and both account read guards expose canonicalId.\n\nAppend-only migration sql/008_customer_account_canonical_id.sql adds the\ncolumn and constraints, requires a canonical ID on new rows and replaces the\naccount guard and the two read-guard bodies. Existing accounts are not\nbackfilled (no Contact backfill precedent): they read canonicalId null and the\nguard refuses filling them in later. Never derived from UUID, name or phone.\n\nOmni read candidate projects canonicalId for CustomerAccount (null when\nabsent), rejects malformed values and mapping/Owner mismatches. Descriptions,\nonboarding SOP (revision 4), generated tools/knowledge/procedures, delivery\nunit, omni read contract, queries README and README status synced.\n\nFull suite 551/551 (0 fail/cancel/skip); npm run check zero findings; eight\nmaterial checks pass. Not tagged, not pushed, not loaded into EES.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-22T10:06:17-07:00"},"CompareURL":"luoanwu/juhai-seven-domain-platform/compare/4f85f3dc59fcefd804c674ea76cc9cfc72058637...bf52bdf93120179ab34271834d1ad59d0aef9715","Len":2}... |