plans: add regression analysis (none found)

Regression review:
- Compiles: Internal.hs has OverloadedStrings, so B64UrlByteString "" is fine
  (mempty is a pragma-independent equivalent).
- Existing "link/whitespace-only must not re-approve" test (DirectoryTests
  296-326) is the owner-update path editing welcome-message URL text - not
  publicGroupId, not groupLink, not the link-check path. Unaffected.
- No missed re-approval: only publicGroupId excluded; all moderatable fields
  still trigger.
- Non-directory clients unaffected (return flag unread; skipped store is a
  no-op since public_group_id is never written there).
- Other caller (Commands.hs:4331 CTName) ignores the Bool; its domain check
  reads the claim domain, which still converges.
This commit is contained in:
Narasimha-sc
2026-07-06 17:26:31 +00:00
parent f114b27236
commit b07ca4ee64
@@ -171,6 +171,29 @@ not a directory policy, so it belongs where the comparison lives:
pre-update snapshot (enqueue-vs-process window) and leaves `groupUpdated`
misleading for any future consumer. Core is preferred per §5.
## 7b. Regressions checked (none found)
- **Compiles.** `Internal.hs` has `{-# LANGUAGE OverloadedStrings #-}`, so
`B64UrlByteString ""` type-checks. (`B64UrlByteString mempty` — inner
`ByteString` `mempty` — is an equivalent pragma-independent form.)
- **Existing "link/whitespace-only must not re-approve" test is untouched**
(`DirectoryTests.hs:296-326`). That test changes a URL inside the *welcome
message* text and exercises the owner-update path (`deGroupUpdated`) — not
`publicGroup.groupLink`, not `publicGroupId`, and not the link-check path. The
fix normalizes only `publicGroupId`, so every non-`publicGroupId` field
(including `groupLink`, description, image) compares exactly as before.
- **No missed re-approval.** Only `publicGroupId` is excluded; any moderatable
field still differs under the comparison and still re-approves.
- **Non-directory clients unaffected.** They don't read the returned flag (the
mobile/desktop `GroupLinkPlan.Known` variant omits it, §2.4); the only other
effect is skipping an `updateGroupProfile` call when *only* `publicGroupId`
differs — a no-op, since that column is never written there anyway.
- **Other `updateGroupFromLinkData` callers safe.** `Commands.hs:4331` (CTName
path) ignores the returned `Bool` and uses `g'`; its domain check reads the
claim *domain*, which still converges (a real claim change keeps
`profileChanged` true and stores). `Commands.hs:4358` is the directory path this
fix targets.
## 8. Verification plan
1. **Regression test** in `tests/Bots/DirectoryTests.hs` (beside the existing