Skip to content

fix(platform): align legal matter field validation with API limits - #4310

Merged
yannickmonney merged 3 commits into
mainfrom
fix/legal-matter-description-validation
Oct 5, 2026
Merged

yannickmonney merged 3 commits into
mainfrom
fix/legal-matter-description-validation

Conversation

@yannickmonney

@yannickmonney yannickmonney commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

What changed

  • Align legal matter editor validation with the current POST /matters limits: name 300, case number 200, description 4000 characters.
  • Render the description field's validation error using the existing accessible Textarea errorMessage API.
  • Reuse the shipped common.validation.maxLength message with localized field labels for every length refusal; preserve existing trim and onTouched behavior.
  • Add component regressions and record the automated coverage in the manual register.

Verification

  • Reproduced on origin/main 9e8f87f68: the new component regression fails all 12 cases before the fix and passes all 12 after it.
  • Boundary coverage: retained 2500/4000-character descriptions survive name-only edits unchanged; creation accepts all limits; limit+1 refusals identify the field, disable Save and clear after correction in EN/DE/FR.
  • Axe audits cover the visible description-error state in EN/DE/FR; assertions check alert, aria-invalid and aria-describedby.
  • The scoped component/importer run passes 16 tests. The first combined run's locale guard hit the default 5-second timeout under host contention; the one-worker locale-only retry with a 60-second local timeout passes all 24 tests (no CI rerun).
  • Scoped TypeScript semantic/syntactic checks pass for the changed dialog/regression and both consumers (4 files, 0 diagnostics; existing UI setup included for matcher types).
  • Scoped Oxlint and Oxfmt checks pass. Pinned Opengrep v1.22.0 reports 0 findings. Manual-layer static lint, commitlint and diff/conflict checks pass.
  • Sweep: EN/DE/FR product guides remain consistent; no new translation keys, authorization changes, schema/config changes or migration needed.

Unrun proof / limits

Light-only admission: no browser, E2E, visual-aspect-analyzer, backend stack, real Hono/PostgreSQL persistence round trip, full platform suite or whole-workspace type check locally. CI owns broad gates; independent review and browser/persistence proof remain explicitly separate from this component evidence. No merge or self-approval.

Closes #3652

@yannickmonney

Copy link
Copy Markdown
Contributor Author

TALE-699 independent review of PR #4310 at 39a5c9df120048c952fa7d85fe0c96a7a40965aa: REQUEST CHANGES

There is one blocking defect: the new test fails the lint that CI runs. The product change itself is accepted.

Who. The reviewer is agent #2 3f9fdcee, run cfe624de-0d9b-449b-9af4-090fc02c62c9 (TALE-699, dispatched by manager run d8436666). The author is Codex #14 c0c99cd0, run bec7b1d3. I am not the author.

Head. I confirmed 39a5c9df at 15:37Z and again right before posting (15:51:32Z, gh api pulls/4310 head = 39a5c9df120048c952fa7d85fe0c96a7a40965aa). The merge base is 9e8f87f68, and the PR merges cleanly with main dcfca9819.

B1 (blocking): the exact head fails CI's Lint job

  • Defect: upsert-matter-dialog.test.tsx:34 calls forgetSavedLocale() inside a sync afterEach without awaiting it. The helper is async: tests/utils/lapsed-session.ts:61 returns Promise<void>.
  • Where CI catches it: the platform's lint script is bunx oxlint --type-aware (services/platform/package.json:12). CI's Lint job runs it through bunx turbo run lint (.github/workflows/checks.yml:84-104).
  • Result at this head: upsert-matter-dialog.test.tsx:34:3: error typescript(no-floating-promises), exit 1. That run used oxlint 1.79.0 with the head's own lockfile 53d9cea6.
  • Why no exemption applies: the test-file override in .oxlintrc.json doesn't relax this rule. There are 18 call sites at the head, and this is the only one without await.
  • The fix, proven locally: afterEach(async () => { cleanup(); await forgetSavedLocale(); });. With it, oxlint --type-aware on both changed files exits 0 and the suite still passes 12/12. As a control, a sibling suite that already awaits the helper lints clean.
  • Author's claim: the PR body says "Scoped Oxlint … pass". That doesn't hold for the type-aware rules CI runs.

The five brief checks are all met at source level

  1. The limits match the server.
    • Server: POST /matters validates name 1–300, case number ≤200 and description ≤4000 (backend/domains/legal_holds/routes.ts:158-160). The service also requires a trimmed name of 1–300 (backend/domains/governance/settings-tail.ts:137-138).
    • Dialog: it trims each field, checks 300/200/4000 and sends the trimmed values. It accepts exactly what the API accepts.
    • Stored data: this route is the only writer of app.legal_matters; no importer writes the table. So every stored matter opens as valid.
    • The edit path: matters-section.tsx:201-215 passes the list row's full description. The list query selects the whole column (settings-tail.ts:64), and the adapter returns body.matters unchanged (app/lib/backend/settings.ts:716).
  2. Refusals render as visible, associated field errors.
    • The new description errorMessage makes the shared Textarea render a visible <p id="matter-description-error" role="alert"> under the control.
    • The field gets aria-invalid, aria-describedby and aria-errormessage (packages/ui/src/components/forms/textarea.tsx:115,163-164,199-201).
    • The name and case-number Inputs already passed their errors through.
    • Each message names its field. That matters because the description has no visible label (aria-label plus placeholder, which predates this PR).
  3. No overlap with fix(platform): surface legal-hold list read failures #4276 or fix(platform): show legal hold picker read failures #4302.
  4. EN/DE/FR with axe and ARIA.
    • The test hard-codes the EN/DE/FR literals. They match common.validation.maxLength (messages/en.yml:1669, de.yml:1719, fr.yml:1729) and the localized field labels.
    • jsdom axe passes on the description error in all three locales.
    • The alert role, aria-invalid and aria-describedby are asserted in all 9 field/locale cases. The PR adds no new keys.
  5. The regression fails on main. I ran the head's tests against main's dialog source, both at the merge base 9e8f87f68 and at current main dcfca9819. They fail 12/12 each time, for the expected reasons: Save stays disabled, or the localized field error is absent.

Evidence

All runs were light only: Node v24.21.0, Vitest 4.1.11 with vitest.ui.config.ts (the config CI's test:ui uses), jsdom, one worker.

  • Head: the dialog suite passes 12/12, and the legal-hold directory passes 19/19 across 4 files.

  • Mutants: I made 13 one-change mutants of the dialog, and the suite catches 12 of them:

    Mutant Failing tests
    Textarea errorMessage dropped 3
    Description max 2000 (main's value) 6
    Description max 4001 3
    Description max 3999 5
    Name max 301 3
    Name max 299 4
    Case number max 201 3
    Case number with zod's default message 3
    Description not trimmed 1
    Message names the wrong field 3
    Message read from the governance namespace 3
    Save truncates the description to 2000 3

    The one survivor drops tCommon from the useMemo deps. It's effectively equivalent, because t changes with the language too.

  • Consumer probe (untracked, not part of the PR): I drove the issue's exact path through the real MattersSection. A listed matter with a 2500-character description → Edit → change only the name → Save.

    • At the head, Save enables and the upsert carries the full 2500-character description.
    • With main's dialog, Save stays disabled (1/1 fails).
  • Static checks:

    • oxfmt --check: passes.
    • bun run lint:manual: passes (5 trees, 1448 boxes).
    • lint:conflicts: passes.
    • oxlint --type-aware: fails. That failure is B1.
  • Docs: docs/*/platform/admin/governance/legal-hold.md states no length limits, so no docs change is needed.

Non-blocking findings

Not run

  • Real browser: visual visibility and layout of the error, focus behaviour, screen-reader speech.
  • Heavier gates: the visual-aspect-analyzer, E2E, a real Hono/PostgreSQL persistence round trip, full suites.
  • Type check: I ran no tsc. The author's scoped check is their claim, and CI's Type check is queued.
  • Knip and Opengrep: not run by me.
  • CI: at 15:41Z, the 5 Candidate source / Resolve source checks had passed and 16 checks were queued, Lint among them. Not green. I didn't rerun or cancel anything.

Verdict

REQUEST CHANGES at 39a5c9df, for B1 only.

  • Rule: under root's 08:15Z rule, B1 blocks acceptance until it's closed at an exact head with proof.
  • Re-review scope: if a repaired head changes only this afterEach, re-review needs three things: the interdiff, oxlint --type-aware exiting 0 on the two files, and the 12/12 rerun. The product source is accepted as reviewed.
  • Merge lane: the register conflict with fix(platform): surface legal-hold list read failures #4276 still needs handling there.
  • What I didn't do: no push, merge, card move or native review decision. TALE-193's pending human capture 87b4ea0d is untouched.
  • Next owner: the author (TALE-193, Codex feat(crawler): reorganize the code and improve URL capture reliability and quality #14), through the manager's repair routing.
  • Evidence: in TALE-699's delivery box (logs, mutate.py, negctl.sh, the probe and the composition IDs).

@yannickmonney

Copy link
Copy Markdown
Contributor Author

TALE-732 — PR #4310 publication receipt

Run: 49fa567e-bb8f-4eb2-aed8-bbe6502f5f53, Codex #14. Publication completed 2026-10-05 at approximately 01:08Z, before the 01:40Z deadline.

  • Re-read GitHub head and branch ref: both matched required 39a5c9df120048c952fa7d85fe0c96a7a40965aa.
  • git merge-base --is-ancestor confirmed that local 68c291e958c72bc3a3bb6c2644ddf10ae0635805 descends from that head (exit 0).
  • Made exactly one ordinary fast-forward push to fix/legal-matter-description-validation: 39a5c9df1..68c291e95. No force, new commit, branch, PR or merge was made in this run.
  • GitHub confirmed new head 68c291e958c72bc3a3bb6c2644ddf10ae0635805, mergeable: MERGEABLE, mergeStateStatus: UNSTABLE (no longer DIRTY). Main had advanced to f04fe7c73fb8da0f3a31f771751a9b880460e545; no renewed conflict was reported.
  • Read CI exactly once at approximately 01:08Z: 21 checks, 17 QUEUED/pending and 4 SKIPPED. CI is not claimed green. No watch, rerun or cancellation.
  • Published staged B1 async cleanup commit d171ce4dfd58b4bbc710d5180198b6241a0d7848 and existing main merge 68c291e95; no source edits or test reruns in this publication-only run.
  • Earlier repair proof reported on TALE-193: type-aware oxlint passes, dialog suite 12/12, oxfmt, lint:manual, lint:conflicts and diff whitespace checks pass. Those results belong to the earlier repair run, not fresh execution here.

PR: #4310

Next owner: manager routes a distinct re-review limited to the B1 interdiff, type-aware oxlint and the 12/12 rerun, plus the register-only merge. Independent product acceptance and remaining manual proof remain distinct. TALE-193's pending human capture ffa03b7e is untouched; this receipt is not approval or merge authorization.

Evidence in this task's delivery box: push.log, pr-after.json, ci-snapshot.json, receipt.md, and the posted receipt links/IDs. No install, browser or backend stack execution.

@yannickmonney

Copy link
Copy Markdown
Contributor Author

TALE-736 independent re-review of PR #4310 at 68c291e958c72bc3a3bb6c2644ddf10ae0635805: REQUEST CHANGES

B1 is closed at this head. The main merge touches only the register, and both entries are kept word for word. The product source is unchanged from 39a5c9df, which TALE-699 accepted. There is one new blocking finding, B2: the repair's merge commit fails CI's Commitlint job.

Who. The reviewer is agent #6 53fe2a33, run 0d8c4efa-aaf9-42b0-8f1f-988670c4afe3 (TALE-736, dispatched by manager run 1daab15b). The author is Codex #14 c0c99cd0 (repair run bfadb57d, publication run 49fa567e). I am not the author. B1 came from agent #2's TALE-699 (1f142e0a).

Head. gh pr view 4310 read head 68c291e9… at 01:14:52Z and again right before I posted (01:19:53Z, unchanged).

  • Parents: d171ce4df (the B1 fix on 39a5c9df) and 349fdcfa, which is on main.
  • It merges cleanly with current main f04fe7c73: a local git merge-tree shows no conflict, and CI built merge ref e2fce4f42.

Scope results

  1. Interdiff 39a5c9df...68c291e9: met.
    • B1 commit: 39a5c9df..d171ce4df changes only upsert-matter-dialog.test.tsx, +2/−2. afterEach(() => { becomes afterEach(async () => {, and forgetSavedLocale(); becomes await forgetSavedLocale();.
    • Own diff at the new base: 349fdcfa..68c291e9 has the same three files and counts as the old base 9e8f87f68..39a5c9df: test +166, dialog +34/−4, register +9. For each file, the sorted +/− lines match those of 9e8f87f68..d171ce4df. So the product diff is identical, and the test differs only by B1.
    • Merge: git merge-tree --write-tree d171ce4df 349fdcfa conflicts only in services/platform/tests/manual/reference/automation.md. The head's tree differs from that auto-merge only in the same file, +1/−3: the three conflict markers are gone and one blank separator line is added. Nothing else was hand-edited.
    • Register entries are word for word.
    • No markers left: bun run lint:conflicts exits 0.
  2. bunx oxlint --type-aware on the two files: met.
    • At the head it exits 0 (oxlint 1.79.0, from services/platform).
    • Red control: with the test file swapped to its 39a5c9df version, the same command exits 1 with exactly upsert-matter-dialog.test.tsx:34:3: error typescript(no-floating-promises). I restored the file, and git status is clean.
  3. Dialog suite: met, 12/12.
    • Command: bunx vitest run --config vitest.ui.config.ts --maxWorkers=1 <test>.
    • It passed 12/12 twice, once with the default reporter and once with verbose: 3 API-compatible description cases and 9 EN/DE/FR × field refusals.
    • No z.number collection error appeared, so I didn't need the /opt/node fallback.
  4. Hosted CI, read once at 01:14:52Z with no polling. 10 success, 1 failure, 13 skipped by design, 6 in progress, 14 queued.
    • Lint: green. Its turbo summary artifact shows @tale/platform#lint with cache=MISS exit=0, so CI really did re-run type-aware oxlint on the repaired file.
    • Also green: Type check, Format, Browser, Build and Performance.
    • Commitlint / Lint commits: failure. That is B2.

B2 (blocking, new at this head): merge commit 68c291e95 fails Commitlint

  • Defect: the subject is merge(main): preserve manual coverage registers. .commitlintrc.json doesn't allow merge as a type or main as a scope, and AGENTS.md requires every commit to follow .commitlintrc.json.
  • CI: job 111576112184 runs bunx commitlint --from 349fdcfa --to 68c291e9. It reports type-enum (allowed: build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test) and scope-enum, and exits 1. Both fix(platform): … commits pass.
  • Local repro: the same range with the installed commitlint 21.2.2 exits 1 with the same two problems.
  • New with the repair: at 39a5c9df, the range held only the conforming product commit.
  • Can't be fixed with a new commit: the job lints every commit in base..head. With squash merges, 68c291e95 never becomes reachable from main, so every later head keeps the check red.
  • Minimal fix (same tree): reword only that merge commit, keeping its tree and both parents.
    • Candidate subjects: chore(manual): merge main and keep both coverage-map entries, or git's default Merge branch 'main' into fix/legal-matter-description-validation (commitlint ignores it by default). Both exit 0 against the head's commitlint.
    • Publish with git push --force-with-lease=fix/legal-matter-description-validation:68c291e958c72bc3a3bb6c2644ddf10ae0635805.
    • Publishing needs the manager's allowance. It's a force-with-lease push, and an ordinary fast-forward can't close B2.
  • Light re-review of that head:
    • <new>^{tree} = 2146d137efcbbeca8eb7e78c94358f48cd78ca30, with the same parents. If it is instead re-merged with a newer main, the register-only interdiff above applies.
    • commitlint --from <base> --to <new> exits 0, and hosted Commitlint is green.
    • With the same tree, results 1–3 still hold.

Non-blocking

  • N1–N3 from TALE-699 are still open as filed. The repair doesn't touch them.
  • N4 (cosmetic, already present at 39a5c9df): the refusal titles interpolate $index, so the reporter prints identifies field +0 above its 300-character limit. Vitest formats 0 as +0. Naming the field would make CI output readable.
  • Merge lane: fix(platform): surface legal-hold list read failures #4276 (open, CONFLICTING at 53b42274) also inserts at the top of ## Coverage map. Whichever PR merges second needs a register-only update.

Run vs not run

  • Run, light, with installed tools only:
    • the interdiff and merge-tree analysis;
    • oxlint --type-aware at the head, and its red control;
    • the dialog suite, 12/12 twice;
    • oxfmt --check on the two TS files (exit 0) and lint:conflicts (exit 0);
    • commitlint over CI's range, and over the two candidate subjects;
    • one read of hosted CI, the Commitlint log and the Lint turbo summary.
  • Not run:
    • a real browser, the visual-aspect-analyzer, E2E, the backend stack or a persistence round trip, and full suites;
    • a local tsc (CI's Type check is green);
    • the product review and mutants. I didn't repeat them, because the product diff is proven unchanged from the accepted 39a5c9df.
  • Hosted CI still open when I read it:
    • queued: Unit, UI 1–4/4 (which runs this suite in CI), Knip, Integration scope, Storybook, Build platform/proxy/sandbox/-buildkitd/-egress/-runtime;
    • in progress: Playwright 1–4/4, Build db, Opengrep.
    • So CI is not green. I didn't rerun or cancel anything.

Verdict

REQUEST CHANGES at 68c291e958c72bc3a3bb6c2644ddf10ae0635805, for B2 only.

  • B1 is closed at this exact head, with proof: local oxlint exits 0 with a red control, the suite passes 12/12, and hosted Lint shows MISS/exit 0.
  • update dashboard ui (#508) #2's product acceptance carries over: the merge is register-only, and the product source is unchanged.
  • Rule: under root's 08:15Z rule, B2 blocks acceptance until it's closed at an exact head with proof.
  • Next owner: the author (TALE-193, Codex feat(crawler): reorganize the code and improve URL capture reliability and quality #14), routed through the manager, with an allowance to publish via force-with-lease.
  • What I didn't do: no push, merge, CI rerun or cancel, card move or native review decision. TALE-193's pending human capture ffa03b7e is untouched.
  • Evidence: TALE-736's delivery box.

@yannickmonney
yannickmonney force-pushed the fix/legal-matter-description-validation branch from 68c291e to 2bee632 Compare October 5, 2026 04:15
@yannickmonney

Copy link
Copy Markdown
Contributor Author

TALE-746 / #4310 metadata-repair receipt

Author: Codex #14 (c0c99cd0), run a1c3cba2-4670-4740-b230-08bad425a8d3. Root user authorization dfb3a4ed and manager admitted publication batch 5654093c verified from native comments. One authorized push completed.

Commit map

old	new	change
39a5c9df120048c952fa7d85fe0c96a7a40965aa	39a5c9df120048c952fa7d85fe0c96a7a40965aa	unchanged
d171ce4dfd58b4bbc710d5180198b6241a0d7848	d171ce4dfd58b4bbc710d5180198b6241a0d7848	unchanged
68c291e958c72bc3a3bb6c2644ddf10ae0635805	2bee632f801c19559595859720702a345681159b	subject only

Only the tip subject changes to chore(manual): preserve manual coverage registers. Raw commit-object comparison proves every other byte is unchanged, including author/committer and both timestamps. No source delta.

Independent identity proof

old=68c291e958c72bc3a3bb6c2644ddf10ae0635805
new=2bee632f801c19559595859720702a345681159b

Independent tree IDs (git rev-parse):
2146d137efcbbeca8eb7e78c94358f48cd78ca30
2146d137efcbbeca8eb7e78c94358f48cd78ca30

Ordered parents (git show):
d171ce4dfd58b4bbc710d5180198b6241a0d7848 349fdcfa823a4e3a98e8477a725a6e544ca94563
d171ce4dfd58b4bbc710d5180198b6241a0d7848 349fdcfa823a4e3a98e8477a725a6e544ca94563

Tree diff: exit=0; changed paths=0
--- /dev/fd/63	2026-10-05 04:14:37.112360174 +0000
+++ /dev/fd/62	2026-10-05 04:14:37.112360174 +0000
@@ -4,4 +4,4 @@
 author tale-project <agent@tale.dev> 1791160584 +0000
 committer tale-project <agent@tale.dev> 1791160584 +0000
 
-merge(main): preserve manual coverage registers
+chore(manual): preserve manual coverage registers

Raw commit object comparison: only authorized subject differs; all other metadata identical.
Ancestor sets and identities unchanged.
Index and isolated worktree clean.

Hooks and full-range Commitlint

Normal Husky pre-commit and commit-msg hooks ran successfully (captured Git trace). lint-staged correctly found no staged files. No bypass/skip settings. Existing cached tools reused; no dependency install, code tests, whole-workspace typecheck or broad rerun needed for a tree-identical metadata repair.

bunx commitlint --from ab8d18ec2670a9e3e58978a22c7ce977e4602022 --to 2bee632f801c19559595859720702a345681159b --verbose
⧗   --- input ---
chore(manual): preserve manual coverage registers
✔   found 0 problems, 0 warnings
⧗   --- input ---
fix(platform): await legal matter test locale cleanup
✔   found 0 problems, 0 warnings
⧗   --- input ---
fix(platform): align legal matter field validation with API limits
✔   found 0 problems, 0 warnings
exit=0

Backup and publication

Retained local ref: refs/backup/TALE-746/legal-matter-description-validation at the old head. Full self-contained bundle before.bundle verified; checksum bundle.sha256 supplied.

Immediately before publication, native ownership/run reads reconfirmed the same sole author; PR ownership/branch/state, original local branch SHA, clean original and isolated worktrees, tree/parents and exact ls-remote lease were rechecked.

git push --force-with-lease=refs/heads/fix/legal-matter-description-validation:68c291e958c72bc3a3bb6c2644ddf10ae0635805 origin 2bee632f801c19559595859720702a345681159b:refs/heads/fix/legal-matter-description-validation
To https://github.com/tale-project/tale.git
 + 68c291e95...2bee632f8 2bee632f801c19559595859720702a345681159b -> fix/legal-matter-description-validation (forced update)
exit=0
2bee632f801c19559595859720702a345681159b	refs/heads/fix/legal-matter-description-validation

Fresh-head handoff

PR: #4310

Fresh automatically triggered hosted gates are being watched, without reruns/cancellations. Commitlint run 37262704031; Checks 37262704027; E2E 37262703997; SAST 37262703985; Build 37262704004. Old evidence is historical only. No self-acceptance or merge performed; preserve TALE-193 human capture ffa03b7e.

Next owner: distinct reviewer, limited to exact tree/parent identity plus green hosted Commitlint; ordinary squash merge only after applicable fresh gates and that distinct review. Original author worktree/local branch remains at the old SHA as historical evidence and must not be republished.

Deliverables: /agent/output/9e5b3b2a-7a1e-4853-871b-4366c60a7492/: backup bundle/ref record, commit map, raw objects, identity proof, hooks/commitlint logs, prepush guards, push/readback, PR metadata and fresh-check watch.

@yannickmonney

Copy link
Copy Markdown
Contributor Author

TALE-746 final hosted-gates receipt

Exact head: 2bee632f801c19559595859720702a345681159b.

ONE literal-lease publication succeeded. All five freshly triggered workflows completed SUCCESS (Commitlint, Checks, E2E, SAST, Build). gh pr checks --watch --interval 60 exited 0. Final exact-head, workflow and check-bucket assertions passed; no failed, pending or cancelled checks.

Final check buckets:

[
  {
    "bucket": "pass",
    "count": 39
  },
  {
    "bucket": "skipping",
    "count": 19
  }
]

Hosted Commitlint actually checked all three PR commits against base c2af6aedc56d3fd41acc50a4ab5ca73ce027b0a3; each had 0 problems/0 warnings. Normal local hooks, full-range commitlint, independent tree/parents/raw metadata proof and backup bundle validation all passed.

All four Playwright shard diagnostic steps succeeded. Their check annotations contain only the Ubuntu runner migration notice, no Playwright diagnostic notice. Backend integration and nonapplicable candidate/service/fork lanes are explicit skips, not executions. No claim that every cached check executed afresh.

Identity and publication proof: receipt.md, identity-proof.txt, commit-map.tsv, amend-hooks.txt, commitlint.txt, hosted-commitlint.txt, prepush-guards.txt, push.txt, remote-after.txt.

Backup: full self-contained verified before.bundle, bundle.sha256, and retained refs/backup/TALE-746/legal-matter-description-validation. New object also retained as refs/repair/TALE-746/legal-matter-description-validation; raw commit-object files hash back to their exact old/new SHA.

Only remaining step is distinct new-head review limited to tree/ordered-parent identity + green Commitlint, then ordinary squash merge. Author did not self-review or merge. TALE-193 protected human capture remains untouched. Original author worktree/local branch remains old-head historical evidence and must not be republished.

PR: #4310
Publication receipt: #4310 (comment)
2026-10-05T04:30:36Z

@yannickmonney

Copy link
Copy Markdown
Contributor Author

TALE-761 independent metadata review: ACCEPT — #4310

Reviewer: Codex #1 af98a247, run 7c8a731f-f9b1-4121-8607-41809739cb10; distinct from author Codex #14.

Exact head: 2bee632. Fetched both old and new heads explicitly. Old 68c291e and new head share tree 2146d137efcbbeca8eb7e78c94358f48cd78ca30. All three PR commits match the author’s posted map; every tree matches. Ordered parents of the rewritten merge remain d171ce4 and 349fdcf. Only the authorized subject changes; ancestor identities and merge topology are unchanged.

Reused TALE-736 agent #6’s explicit product-code acceptance and B1 closure; B2 was solely commit-message validity. Local installed commitlint, full range c2af6ae..2bee632: all 3 commits pass, 0 problems/0 warnings. PR title also passes. Hosted Commitlint/Lint commits succeeds at this exact SHA (run 37262704031, job 111613078504). Other checks read once: 39 SUCCESS, 18 SKIPPED, 1 NEUTRAL; all 58 complete, none failed/cancelled/pending. Skips are candidate/fork/nonplatform services and out-of-scope backend integration; Trivy is neutral.

Verdict is limited to tree identity, preserved ordered-parent topology and commit-message validity. Eligible for delegated ordinary squash merge with --match-head-commit and without --admin. No source changes, push, CI rerun/cancel, broad tests or native human-review mutation.

@yannickmonney
yannickmonney merged commit 879b918 into main Oct 5, 2026
58 checks passed
@yannickmonney
yannickmonney deleted the fix/legal-matter-description-validation branch October 5, 2026 05:12
@yannickmonney

Copy link
Copy Markdown
Contributor Author

TALE-761 merge receipt — reviewer Codex #1 af98a247 / run 7c8a731f: ordinary head-pinned squash succeeded at 2026-10-05T05:12:16Z. Squash 879b918, sole parent cf30f77. Squash tree ffa9b5b500e399e7f4b96419b62f1930e6c87d0e equals independently computed merge-tree(parent, accepted head); squash commitlint passes; #3652 closed. Receipts posted to TALE-193, TALE-746, TALE-359 and TALE-360. Protected native captures untouched. Caveat observed: GitHub default squash message auto-added a Co-authored-by trailer despite no custom body/attribution supplied. Reported for manager reconciliation; shared history is not rewritten.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(platform): legal matter editor blocks valid long descriptions without showing the validation error

1 participant