title: "Gather — "What do we NOT know?"" source: "tasks/TFW-52__tfw_light_v1/research/iter2/2_gather.md"
Gather — "What do we NOT know?"¶
Mindset: Explorer. You're mapping unknown territory. Widen before you narrow. Every assumption is a question. Test: "Can I name every dimension and its alternatives without checking my sources?" Parent: HL-TFW-52 Goal: Determine the smallest reliable Assisted mechanisms for discipline, collaboration, identity, and durable memory while preserving Light's simplicity and the approved edition boundary.
Evidence Method¶
Gather ran three DEEP-mode OODA passes without modifying the approved HL, control files, adapters, product files, or any real synchronized folder.
- Official-contract pass: current OpenAI/ChatGPT Codex documentation was used for
AGENTS.md, hooks, scheduled tasks, memories, skills/customization, and Windows-specific hook configuration. Current Google Drive Help was used only for the bounded synchronized-folder failure model. - Local-observation pass: read-only inspection recorded the installed Windows desktop package, trust/config state, hook/memory presence, current repository guidance, and the nested TFW-51 root path. No Codex child session was launched because that could create session state outside the five permitted iteration files.
- Disposable-model pass: PowerShell data structures simulated candidate allocation, semantic duplicates, two offline lease claimants, conflict-copy names, interruption, idempotent recovery, and index rebuild entirely in memory. No fixture files and no real Drive data were created.
The OpenAI documentation helper was not run because it writes a temporary manual cache outside research/iter2/, which the owner lock forbids. The official documentation pages below were fetched directly instead.
Official Primary Sources¶
| ID | Source | Material used |
|---|---|---|
| O1 | Custom instructions with AGENTS.md | Instruction discovery runs once per Codex run; project scope starts at the project root (typically Git root), walks toward cwd, and falls back to the current directory when no project root is found. Nested guidance is concatenated root-to-leaf. |
| O2 | Hooks | Supported lifecycle events and wire behavior; hook locations and trust; SessionStart, PreCompact, PostCompact, Stop, and SessionEnd; command-only handlers; Windows override; concurrent hook execution; current release limitations. |
| O3 | Scheduled tasks | Local-project schedules need the computer on, desktop app running, and project available; web schedules cannot work directly in a local folder; CLI/IDE do not provide the Scheduled management interface. |
| O4 | Memories | Local Codex memories are off by default, stored under ~/.codex/memories/, updated asynchronously after eligible idle chats, may skip generation near rate limits, and are generated state rather than a primary control surface. |
| O5 | Customization overview | AGENTS.md, memories, skills, MCP, and subagents are complementary surfaces with different scopes; skills package reusable workflows rather than lifecycle guarantees. |
| G1 | Fix problems in Drive for desktop | Incompatible local/cloud changes can leave a copy rather than update the original; retry and recovery are not equivalent to an atomic merge. |
| G2 | Stream and mirror files with Drive for desktop | Offline/mirrored files later synchronize, and when differing content already exists Drive can keep both. This supports modeling conflict copies and delayed visibility. |
The current hooks page explicitly warns that linked main-branch schemas may lead the installed release; this research treats the page's described release behavior, not repository-main schemas, as the platform contract.
Dimensions¶
Each row is an independent decision factor. Alternatives remain open; none is marked recommended in Gather.
| Dimension | Alt A | Alt B | Alt C | Alt D |
|---|---|---|---|---|
| D1 Root/instruction authority | Codex-discovered Git/current-directory root | Explicit Assisted root marker found by ancestor walk | User/configured absolute project root | Installed plugin root plus project marker |
| D2 Enforcement surface | AGENTS.md only |
Start/compact/stop hooks | Wider prompt/tool/session hook set | External wrapper/scheduler around Codex |
| D3 Session-start context | Static AGENTS.md chain |
SessionStart additional context |
Explicit start skill/command | Manual launch prompt |
| D4 Checkpoint trigger | PreCompact |
Periodic/time-based check | Significant tool/file transition | Manual or task-close only |
| D5 Completion gate | Stop continuation |
SessionEnd advisory save |
Explicit close skill/command | Continuous task-state validation |
| D6 Weekly execution | Lazy catch-up on next project start | Desktop scheduled task | External OS scheduler | Web scheduled task with connected storage |
| D7 Staleness signal | last_success_at + interval |
Calendar/ISO-period bucket | Candidate high-water/dirty marker | Time plus unprocessed-input hybrid |
| D8 Candidate identity | Random UUID | UTC timestamp + profile + random suffix | Content hash | Shared sequence/counter |
| D9 Consolidator coordination | Designated guardian, no lease | Shared expiring lease | Unique run staging plus deterministic reconciliation | External lock/service |
| D10 Record publication | Mutable records in place | Write-new then replace | Immutable versioned records with supersession | Per-run immutable snapshot |
| D11 Index publication | Incremental edit | Local temp-and-replace | Full rebuild from accepted records | Versioned index snapshots plus active pointer |
| D12 Identity selection | Ask every session/task | Single profile auto, otherwise one question | Device-local binding | OS/workspace account mapping |
| D13 Participant identity key | Mutable display handle | Stable opaque profile ID | Email/workspace identity | Cryptographic identity |
| D14 Authorship provenance | Author handle only | Profile ID + display snapshot + source/task/time | Profile + device/run identity | Signed record/receipt |
| D15 Task activation | Every prompt creates a task | Explicit user command only | Semantic prompt heuristic | First durable-result/file transition |
| D16 Risk handling | Ask before every promotion | Category-based gate | Allowlist-only promotion | No shared promotion; pointers only |
| D17 Platform implementation | One portable runtime | Per-OS commands/scripts | Windows-first implementation | Plugin-packaged runtime abstraction |
Findings¶
G-F1 — H1 platform contracts exist, but their guarantees are narrower than the HL wording¶
The current official hooks page documents all three lifecycle surfaces named by H1:
SessionStartsources arestartup,resume,clear, andcompact. Plain text or JSONadditionalContextbecomes developer context. After root-session compaction, aSessionStartmatchingcompactruns before the immediate next model request.PreCompactruns formanualorautocompaction. Plain-text stdout is ignored. JSON can stop compaction, but the hook itself must persist any checkpoint; Codex does not create a task checkpoint automatically.Stopreceivesturn_id,stop_hook_active, andlast_assistant_message. A blocking decision creates a continuation prompt instead of rejecting the turn. The hook must usestop_hook_activeand idempotent state checks to avoid continuation loops.
Important boundaries:
- Only
type: commandhandlers execute today.promptandagenthandlers are parsed but skipped. Therefore semantic questions such as “is this a substantive task?” cannot be delegated to an agent hook handler under the current release contract. - Project hooks run only from a trusted project
.codex/layer, and each non-managed command definition must be reviewed/trusted by hash. Changed hooks are skipped pending re-review. “Mandatory” therefore means mandatory after an explicit installation/trust step, not zero-touch on first open. - Matching hooks from multiple sources all load and matching command hooks launch concurrently. A project hook cannot assume it is the only hook or prevent another matching hook from starting.
- Hook commands run with the session
cwd. The official page recommends Git-root resolution for repo hooks because Codex may start in a subdirectory. That example does not solve a non-Git Drive-style project; Assisted needs another root-authority mechanism or an explicit correct-root requirement. commandWindows/command_windowsis available, asynchronous hooks are not supported, and hard-codedpython3, POSIX quoting, orgit rev-parseis not cross-platform/non-Git-safe.SessionEndis advisory. It may run on archive/delete, normal close, or after 30 idle minutes, does not run for subagents, cannot steer Codex, and does not immediately run when merely switching away. It is not a completion gate.- Transcript paths are exposed for convenience but are explicitly not a stable hook interface. An Assisted checkpoint should not parse transcript internals as its only source of active-task truth.
The lifecycle events can enforce file/state invariants that a command can inspect. They cannot by themselves understand the user's goal, guarantee that an old already-running session rereads newly changed guidance, or prove that a semantically correct trace was written.
G-F2 — Evidence lanes for H1 must stay separate¶
| Mechanism | Documented support | Observed in this local session | Unavailable or not evidenced locally | Candidate Assisted behavior to compare in Extract |
|---|---|---|---|---|
AGENTS.md discovery |
Once per run; Git/current root chain; nested overrides | Root AGENTS.md content is present in this task's project instructions |
No child-session smoke test under alternative roots | Root self-check plus short durable rules |
SessionStart |
startup/resume/clear/compact, additional context |
No user/project hooks.json is installed |
Event execution and trust UX not exercised | Load project/task/memory summary; check due state |
PreCompact |
Before manual/auto compact; command may persist state or stop compaction | No hook installed | Actual compaction callback not exercised | Idempotent active-task checkpoint from files, not transcript schema |
PostCompact/compact start |
Post event plus SessionStart source=compact |
No hook installed | Restoration after real compact not exercised | Re-inject short state after checkpoint |
Stop |
Can create continuation prompt; stop_hook_active exposed |
No hook installed | Loop prevention and file correction not exercised | Compare inspect-only, direct safe repair, and continue-agent policies |
SessionEnd |
Advisory, delayed/close/archive cases | No hook installed | Timing not exercised | Optional best-effort receipt only, never sole close gate |
| Skills | Official reusable workflow surface | Repository tfw-research skill routed this /tfw-research session and gates are being followed |
No evidence that an ordinary prompt selects a task skill | Compare explicit close/start skill as fallback, not lifecycle replacement |
| Local memories | Local generated state, off by default, delayed | Memory directory exists but is empty; no memory feature key was found | No generation/use pass executed | Exclude as shared truth; optional personal convenience only |
| Scheduled tasks | Desktop/web scheduled surfaces documented | No task run inspected | Local scheduled execution not exercised | Optional accelerator that invokes the same idempotent consolidator |
G-F3 — Read-only local observations¶
| Observation | Result | Interpretation boundary |
|---|---|---|
| Installed desktop package | OpenAI.Codex Windows x64 package version 26.727.6591.0 |
This is the desktop package version, not a semantic CLI release number. |
| Project trust | Global config.toml contains the exact steps-framework path with trust_level = "trusted" |
Project trust exists, but individual hook-definition trust is separate and no project hooks exist. |
| Hook configuration | No global ~/.codex/hooks.json; no repository .codex/hooks.json or .codex/config.toml |
Current local behavior cannot demonstrate H1 hook execution without forbidden product/config writes. |
| Memory configuration/state | No matching memory feature keys; ~/.codex/memories/ exists with zero entries |
This is consistent with the documented default-off behavior, not proof about another device/account. |
| CLI executable | Desktop-bundled codex.exe resolves under WindowsApps but execution from this thread's shell returned Access Denied |
CLI smoke testing is unavailable from this host context; it does not imply the desktop app itself cannot run Codex. |
| Current skill | Repository-local tfw-research skill was selected and enforced |
Confirms skill routing in this task, not task-start/completion enforcement for arbitrary prompts. |
G-F4 — Bounded root-discovery fixture¶
The existing TFW-51 prototype is stored at tasks/TFW-51__tfw_light_ru/tfw-light-ru/ inside this repository. A read-only ancestor walk found:
- Git root:
D:\projects\research\steps-framework - Guidance on the documented root-to-
cwdpath: rootAGENTS.mdand nested prototypeAGENTS.md
According to O1, opening that nested source directory in place does not behave like opening a copied standalone starter: the parent repository guidance participates in the instruction chain. In a non-Git standalone copy where Codex finds no other project root, only the current directory is checked. This validates wrong-root/source-versus-runtime as a real bounded scenario without reopening iteration-1 topology selection.
G-F5 — H2: schedule and catch-up are not equivalent in wall-clock freshness¶
Official scheduled-task behavior creates four distinct execution states:
| State | Local project schedule | Lazy catch-up | External alternative |
|---|---|---|---|
| Computer on, desktop app running, project available | Supported | Runs at next start/prompt if due | OS scheduler also possible |
| Computer on, desktop app closed | Not supported for local project files | Does not run until next project start | Task Scheduler/cron/launchd must run a separate deterministic local program |
| Computer off/asleep | Does not run | Does not run | No local mechanism runs until wake/boot |
| Web scheduled task | Runs in hosted context | N/A | Cannot directly work in the local project folder; needs uploaded/connected storage |
| CLI or IDE only | No Scheduled management interface | A start hook/explicit command can catch up | External scheduler remains outside Codex |
Consequences:
- A lazy catch-up can provide equivalent freshness at the boundary of the next successful project start, if no consumer needs the shared index between the missed deadline and that start and the hook is installed/trusted.
- It cannot provide the same calendar-time freshness. The delay is unbounded while the project remains unopened.
- The smallest quiet interaction is zero questions for a successful routine run, followed by at most one terse status line. Sensitive or conflicting candidates can be held and asked as one compact batch. A question is not needed merely because time elapsed.
- Desktop scheduling and start catch-up must invoke the same idempotent consolidator. Otherwise simultaneous schedule/start runs create two code paths and two failure modes.
Staleness itself has multiple meanings: time overdue, unprocessed input, incomplete prior run, or stale derived index. A time-only flag can say “fresh” while new candidates remain; a candidate-only flag never triggers maintenance when index pruning is due. Extract must combine or explicitly choose among D7 alternatives.
G-F6 — In-memory H3 fixtures¶
The successful fixture ran in Windows PowerShell with no filesystem writes.
| Scenario | Fixture result | What it establishes / does not establish |
|---|---|---|
| Three writers, random-suffixed IDs | 3,000 generated, 3,000 distinct, 0 observed collisions | Demonstrates the construction avoids central allocation in this sample; does not mathematically prove zero UUID collisions. |
| Two writers, shared counter | Both read/allocated C-000042; 1 collision |
A central next-ID file is a hot read-modify-write point. |
| Formatting duplicate | Two differently cased/spaced claims normalized to the same SHA-256 key | Unique candidate files do not remove semantic duplicates; consolidation still needs explicit deduplication and source retention. |
| Two offline lease claimants | Both saw no lease and believed they acquired it | A lease file in an asynchronously synchronized folder cannot guarantee strict mutual exclusion during offline/delayed visibility. |
| Conflict-copy/unexpected filenames | 4 physical files; a strict filename pattern accepted 2, schema parsing recovered 3 unique candidate IDs | Recovery must validate payload identity and deduplicate by candidate ID; filename shape alone can silently omit conflict copies. |
| Interrupted consolidation | 3 candidates, 1 record before crash, 3 deterministic records after rerun, 3 rebuilt index entries, 0 source deletions | Idempotent record IDs plus retained candidates allow recovery in this bounded model. It does not validate actual Drive upload ordering or cross-device atomicity. |
Google's official support material supplies counter-evidence to treating ordinary file updates as transactions: incompatible local/cloud changes can leave copies or move edits to recovery locations. Therefore a synchronized folder must be treated as delayed multi-copy transport, not a lock service or database.
G-F7 — H3 architecture implications remain alternatives, not a selected design¶
The phrase “one consolidator” has three different possible meanings:
- One designated human/device normally runs it. This removes routine multi-writer pressure but does not prevent an accidental or offline second run.
- One active run is coordinated by a shared lease. This reduces ordinary overlap when visibility is timely but cannot provide strict exclusion offline.
- Multiple runs may occur, but immutable inputs and receipts make split-brain detectable and recoverable. This accepts duplicate work and requires reconciliation/publish authority.
Knowledge-loss prevention also decomposes:
- Candidate preservation: every candidate is immutable, uniquely identified in its payload, and never pruned before a receipt accounts for it.
- Semantic consolidation: duplicate/contradictory candidates can map to one or more records while preserving all source IDs and epistemic status.
- Record publication: a crash or second consolidator cannot silently overwrite the only accepted durable record.
- Index recovery:
INDEX.mdis recreated entirely from accepted records; its absence or conflict is a navigation failure, not knowledge loss. - Conflict-copy intake: unexpected physical filenames and duplicate physical copies are scanned by schema/payload identity, quarantined if invalid, and reported.
The Gather evidence supports recoverability under these conditions. It does not prove that a shared lease prevents two consolidators or that a derived index alone prevents loss.
G-F8 — H4 identity UX can attribute work, but it cannot authenticate the actor¶
| Scenario | Minimal behavior target | Remaining ambiguity |
|---|---|---|
| Exactly one valid profile | Auto-select; do not create or consult a current-user binding | The profile still represents declared project identity, not verified OS identity. |
| Multiple profiles, valid local binding | Reuse without a question | Binding must be keyed to stable project identity and stable profile ID, not path/display handle alone. |
| Multiple profiles, no binding/new device | Ask one short choice before recording authorship/ownership | Reading or an ordinary conversation does not need the question. |
| Binding points to missing profile | Treat as stale and ask once | Silent fallback would misattribute work. |
| Participant renamed | Preserve binding if profile has an immutable ID; read the new display handle from the profile | Handle-only bindings break or create false new users. |
| Participant removed/replaced | Invalidate binding and ask once | Historical records keep the old profile/display snapshot. |
| Unknown user reads or asks a non-work question | Do not create a task and do not require identity | If the conversation later creates durable work, identity becomes necessary at that boundary. |
| Unknown user begins durable work | Do not guess; require one choice or leave the contribution explicitly unattributed/pending | “Unknown” is safer than borrowing the last device user. |
| Privacy review | Keep device binding outside the synchronized folder and store only the minimum project-ID → profile-ID relation | Shared provenance still exposes project-level author identity by design. |
| Authorship dispute | Show declared profile, task/source, time, and consolidation receipt | Without account authentication/signature, the files cannot prove who physically used the device. |
This evidence supports H4 as a low-friction attribution/provenance mechanism. “Reliably establishes authorship” is too strong if interpreted as authentication or non-repudiation.
G-F9 — Task activation, owner/status consistency, and non-work conversation¶
No current hook event means “a substantive task has begun.” Available mechanisms observe prompts, tool calls, lifecycle events, and completion attempts:
UserPromptSubmitexposes prompt text, but only command handlers run; a deterministic semantic classifier will have false positives/negatives.- Tool hooks can observe commands/file operations, but task intent should exist before the first destructive or result-producing action, and tool coverage/surface names can vary.
Stopis late enough to repair omissions but cannot prove the trace was created before work.AGENTS.mdplusSessionStartcan direct the model to create a task early, but this remains agent behavior until a later hook checks physical invariants.
The alternatives in D15 therefore stay live. Any design must satisfy both sides of the HL: a meaningful task gets owner/trace/status discipline, while ordinary questions, reading, or project orientation do not create false tasks.
Task-local consistency can be mechanically inspected at Stop without a shared task board:
- exactly one task folder is declared active for the current run or none;
- trace owner equals the stable profile ID used in authored candidates;
- folder status, trace status, result links, and candidate receipts agree;
- another participant's trace is not rewritten without explicit ownership transfer;
- failure to determine identity leaves ownership pending rather than guessed.
Whether the Stop command repairs a safe mismatch directly or returns a continuation prompt remains an Extract/Challenge configuration choice.
G-F10 — Quiet risk gate categories¶
| Category | Candidate handling alternatives that remain open | Hard boundary observed from owner/HL |
|---|---|---|
| Routine project fact/decision/format preference | Quiet promotion; quiet candidate retention; confidence threshold | No question merely for routine processing. |
| Ambiguous/contradictory conclusion | Retain as candidate; create conflict record; one batched question | Do not silently choose a contested fact. |
| Health/medical, personal/sensitive data, minors | Redacted pointer; explicit opt-in to shared record; private/local-only retention | Do not silently promote identifiable sensitive content. |
| Legal dispute/high-stakes finance/safety | Source-required record; human-confirmed status; keep as unresolved claim | Do not convert a disputed/high-stakes conclusion into a fact autonomously. |
| Password/token/key/secret | Reject/quarantine metadata; replace with safe-store pointer | Never store the secret in trace/candidate/index; notify about removal/rotation. |
| Ordinary non-work conversation | No task, no candidate, no identity question | Escalate only if the conversation crosses into durable work or shared memory. |
A hook command can apply deterministic secret patterns and structural checks, but medical/legal/personal-context interpretation is semantic. With command-only hooks, the safest platform-supported pattern may be to add developer context and let the model hold/ask, then have Stop verify that no prohibited candidate was published. This remains a configuration, not a Gather recommendation.
G-F11 — Windows and cross-platform constraints¶
- Official hooks support
commandWindows; a single POSIXcommandis not sufficient evidence of Windows support. - Commands run at session
cwd; relative.codex/hooks/...paths are unsafe when a session starts below the project root. - Git-root discovery cannot be the only Assisted locator because the target includes non-Git synchronized folders. An ancestor marker, configured path, plugin root, or strict open-root requirement remains necessary.
python3,python, andpy -3availability differs; a bundled/runtime-free PowerShell path is Windows-specific, while shell scripts are not portable. The implementation choice must be explicit.- Local atomic replace semantics do not establish atomicity across a sync provider. Run staging, completion receipts, and rebuild behavior must tolerate delayed/conflict copies independently of local rename behavior.
- Paths, case sensitivity, reserved names, timestamp formatting, and line endings must be normalized in candidate IDs/receipts. Payload IDs must remain authoritative over filenames.
Preliminary Hypothesis Tests¶
These are Gather orientations, not final RES verdicts.
| Hypothesis | Gather orientation | Confirming evidence | Counter-evidence / unresolved proof |
|---|---|---|---|
| H1 | Partial support; reliability/sufficiency unproven | All named lifecycle events are documented; Stop can continue work; compact-start can re-inject context. | Hooks require trust, only command handlers run, no semantic task-start event exists, AGENTS loads once/run, cwd/root can be wrong, local hooks are not installed/tested. |
| H2 | Literal equivalence challenged; next-start equivalence plausible | Start catch-up can process overdue local state before later work without a permanently running app. | Calendar freshness is impossible while app/project remain closed; desktop local schedules need computer/app; web schedules cannot access local folder. |
| H3 | Bounded recoverability support; prevention wording too strong | Unique immutable inputs, deterministic rerun, retained candidates, receipts, and rebuild recovered the in-memory interruption model. | Shared-file lease failed strict offline exclusion; conflict copies and divergent consolidators remain possible; real sync ordering not tested. |
| H4 | UX rule supported for attribution; authentication claim challenged | Single-profile auto and valid local binding remove unnecessary questions; stable profile IDs handle rename. | A local binding is a declaration, not proof of physical actor; stale/deleted bindings and new devices still require one question. |
Gather Decisions (research-process only)¶
| # | Decision | Rationale |
|---|---|---|
| G-D1 | Preserve four evidence lanes in all later artifacts: documented support, observed local behavior, unavailable/unproven behavior, and proposed adapter behavior. | The approved HL currently blends platform and adapter claims; separation prevents an implementation proposal from becoming a claimed Codex guarantee. |
| G-D2 | Carry strict offline mutual exclusion as unproven/failed in the shared-file model; Extract must model both exclusion attempts and split-brain recovery. | Both offline claimants can observe no lease. Calling a lease “one writer” would hide counter-evidence. |
| G-D3 | Split H2 freshness into calendar-time freshness and next-project-start freshness. | Scheduled and lazy execution are comparable only at the later start boundary, not during the closed interval. |
| G-D4 | Split H4 into identity selection, shared provenance, and authentication/non-repudiation. | Device-local binding can select a declared profile but cannot prove who physically used the device. |
| G-D5 | Treat task activation as an independent dimension rather than assuming SessionStart creates tasks. |
Current hooks expose lifecycle/prompt/tool events, not the semantic start of meaningful work. This is necessary to protect non-work conversations. |
| G-D6 | Keep root discovery and Light → Assisted preservation bounded to runtime validation fixtures. | The coordinator lock excludes topology redesign; the nested TFW-51 observation is sufficient to keep wrong-root behavior in scope without choosing X1/X2/X3. |
Counter-Evidence and Simpler Alternatives Retained¶
AGENTS.mdplus one explicit close skill may be sufficient for low-frequency single-user Assisted work; hooks may not justify trust/setup cost in every environment.SessionStart + StopwithoutPreCompactmay be sufficient if traces are updated continuously; converselyPreCompactis valuable only when active task state is already explicit in files.- Catch-up-only is simpler than dual schedule/catch-up when no one consumes the index between sessions.
- Designated guardian plus recovery may be simpler and more honest than pretending a shared lease is a distributed lock.
- Deterministic full index rebuild may be safer than incremental index edits for the small Assisted scale.
- Session-local one-question identity avoids persistent binding/privacy state, at the cost of recurring friction.
- OS account mapping removes a question but can be wrong on shared devices and does not necessarily match a project participant.
- No automatic promotion (pointers/candidates only) minimizes sensitive-data risk but weakens the “quiet memory” value proposition.
Checkpoint¶
| Found | Remaining for Extract/Challenge |
|---|---|
Current Codex officially supports SessionStart, PreCompact, PostCompact, Stop, and SessionEnd, with precise but limited command-hook semantics. |
Choose and cross-reference lifecycle configurations; actual local hook execution is untested because no hooks are installed and product writes are forbidden. |
| Project hooks require project trust and per-definition hash review; only command handlers execute; matching hooks can run concurrently. | Model first-run/trust failure and multiple-hook interactions. |
| AGENTS/root discovery is once per run and root-dependent; nested TFW-51 source inherits parent-repository guidance. | Define bounded wrong-root detection/fail-safe alternatives without selecting product topology. |
| Local scheduled tasks require computer + desktop app + project; web schedules cannot directly use the local folder. | Build H2 state/configuration space and smallest quiet interaction. |
| Memory is local, generated, delayed, and off by default; local state is empty here. | Confirm it remains optional/personal in Challenge; do not use it as shared authority. |
| Unique candidates and deterministic rerun recovered the in-memory interruption; shared counter and offline lease failed. | Build configurations for guardian, lease, staging/receipts, reconciliation, and rebuild; attack dual-consolidator recovery. |
| Single-profile auto and local binding reduce questions, but only establish declared provenance. | Build identity state machine across new/stale/renamed/deleted/unknown cases and privacy/authorship dimensions. |
| No hook directly denotes semantic task start. | Compare prompt, explicit command, first durable transition, and hybrid activation while protecting ordinary conversations. |
Sufficiency: - [x] External source used? — current official OpenAI/ChatGPT Codex pages plus bounded official Google Drive support. - [x] Briefing gap closed? — Gather now separates platform contracts, local observations, unavailable behavior, and adapter alternatives for H1–H4. - [x] Dimensions identified? — 17 independent factors with at least three alternatives each. - [x] Hypothesis tested? — preliminary tests recorded for H1, H2, H3, and H4. - [x] Counter-evidence sought? — trust friction, command-only hooks, no semantic task-start event, closed-app schedule limits, offline lease split-brain, conflict copies, and attribution/authentication separation.
Metacognitive check: NEW findings were produced. The strongest change from the starting frame is not that lifecycle hooks are absent—they are now officially documented—but that their trust model, command-only semantics, concurrent execution, cwd/root dependence, and lack of a semantic task-start event prevent treating the H1 event set as a complete guarantee. H2's “same freshness,” H3's strict single-writer lease, and H4's “authorship” also require narrower definitions.
Blocking questions: None.
Recommendation: Close Gather and authorize Extract. Extract should construct configurations that preserve the evidence-lane separation, next-start freshness boundary, split-brain recovery, and attribution/authentication distinction.
Stage complete: YES Coordinator record: Gather accepted on 2026-08-08; Extract authorized.