From 6e897322d57434f42403b2848acfc82621f47bc0 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Mon, 3 Aug 2026 03:00:56 -0500 Subject: [PATCH] =?UTF-8?q?docs(oddities):=20correct=20=C2=A75o=20(a)-(c)?= =?UTF-8?q?=20attribution=20to=20iOS=20(macOS=20presumed,=20unverified)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The three GUI drag/cascade constraints in §5o - no drag-into archived heading, one-way drag-out + reopen, and un-complete cascades unarchive - were attributed "host GUI, Things 3.22.12". They were maintainer-observed on iOS; macOS is presumed identical but unverified. Corrects the shared header attribution to match item (d)'s style. No behavior change. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01RYbJensXxHpJK1v1VDXYUD --- docs/things-app-oddities.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/things-app-oddities.md b/docs/things-app-oddities.md index af8b5d4..8afd088 100644 --- a/docs/things-app-oddities.md +++ b/docs/things-app-oddities.md @@ -164,7 +164,7 @@ While an unanswered Automation consent dialog is up (or after one was dismissed The [§5b](#5b-adding-an-open-child-silently-reopens-a-resolved-project) reopen law (an open child added/moved into a *resolved project* silently reopens the project) applies identically to **archived (completed, `status=3`) HEADINGS**: `things:///update?…&heading=` on an open to-do, `things:///add?…&heading=`, and reopening a completed child in place (`update?id=&completed=false`) each flip the archived heading back open — a single-row write, `status 3→0` + `stopDate→NULL`, **byte-identical to the AppleScript un-archive op** (`set status … to open`, [heading-research](../lab/heading-research.md) P10b-b2). The reopen is heading-ONLY: the heading's swept (completed) children stay resolved (status/stopDate untouched). A corollary: an archived heading **cannot** hold an open child — any write that would produce one reopens the heading, so the odd (archived-heading + open-child) state is not reachable on these headless surfaces. Automation-relevant because `resolveHeadingRef` (our `todo move/add --heading` resolver) has no status filter and resolves archived headings by name AND uuid — but the reopen makes that SAFE (the destination becomes visible; no stranding under an invisible section, unlike the trashed-child hazards §6½/§6¾). Also note the `heading=` name-match (oddity 2c) INCLUDES archived headings — an archived heading is matched, not treated as missing. *(HEADARC-1a/1b/2ii/3/4, 2026-08-03, [lab/headarc-archived-heading-moves.md](../lab/headarc-archived-heading-moves.md) — all four headless surfaces reopen with the identical byte delta.)* **The "not headlessly reachable" corollary is boundary-tight, not absolute — HEADARC2-C (2026-08-03, [lab/headarc2-residual-captures.md](../lab/headarc2-residual-captures.md)):** GUI **Put Back** of a *trashed* open child restores it in place under an archived heading WITHOUT reopening (§6¾ heading analog below), so the odd state IS reachable — just never via a headless surface we ship (our `todo.restore` un-traps to the Inbox, severing the FK). **Rendering (HEADARC2-A/B, macOS matches the maintainer's iOS recollection — no delta):** an archived heading is invisible in the default project view and, under "Show N logged items", renders as a GROUPED section header with its swept children nested beneath it; while a heading is still OPEN, its swept child sits in the flat project-level logged toggle carrying a muted HEADING sublabel (the in-project toggle labels the heading; the global Logbook labels the project). -**Maintainer-observed GUI constraints (host GUI, Things 3.22.12 — distinct from the VM-probed 3.22.11 evidence above; recorded here per the version-stamping policy, which forbids editing the immutable campaign docs):** the desktop GUI is STRICTER than every headless surface around an archived/log-swept heading, and the headless permissiveness self-heals. +**Maintainer-observed GUI constraints (iOS, Things 3.22.12; macOS presumed identical but unverified — distinct from the VM-probed 3.22.11 evidence above; recorded here per the version-stamping policy, which forbids editing the immutable campaign docs):** the desktop GUI is STRICTER than every headless surface around an archived/log-swept heading, and the headless permissiveness self-heals. - **(a) No add-after-archive in the GUI.** The GUI REFUSES dragging any to-do INTO an archived / log-swept heading — there is no way to file a new child under it by hand. The headless surfaces are MORE permissive: `update?…&heading=` / `add?…&heading=` land the child AND reopen the heading (HEADARC-1a/1b above), so no invisible-section stranding results. - **(b) Drag-out is one-way to the active bucket.** Dragging a child OUT of an archived / logged heading is allowed only TOWARD the active bucket; it reparents the to-do to the project ROOT and REOPENS it (`status→0`), matching our `todo.restore`'s Put-Back-to-Inbox severing intent. - **(c) Un-completing a child cascades upward.** Un-completing (reopening) a child of an archived heading cascades up — the HEADING unarchives — matching the HEADARC-4-odd byte evidence (reopening a completed child of a completed heading reopens the heading too).