Skip to content

Config: some options are gated by a different section than the one they sit in, and the schema doesn't say so #715

Open

Description

@null-axiom

Magic Context: 0.49.7 (checked that the relevant code is unchanged in 0.49.10) · Config: memory.enabled: false, dreamer.disable: true, smart_notes.enabled: false

This is about config structure, separate from #709 (OpenCode 2 wiring). In several places an option's position in the config, or its description, suggests one dependency while the code has another. I read the bundled dist/ and the shipped src/config/schema/magic-context.ts. Line numbers are approximate.

Hidden gates

  1. memory.enabled: false disables every scheduled dreamer task. runDueTasksForProject returns 0 when projectMemoryEnabled === false (index-tagss15p.js ~11004), so a user with the dreamer on and memory off gets no dream runs. The schema describes memory.enabled only as cross-session memory. If this is intended, the schema and README should say so, and a startup warning when the dreamer is enabled with memory off would help.

  2. Smart notes need the dreamer, but the tool doesn't know that up front. With the dreamer off, ctx_note still describes surface_condition, then returns "Error: Smart notes require dreamer to be enabled…" (index-tagss15p.js ~27605). The tool description only drops the smart-note text when smart_notes.enabled === false (~27555). It should also drop it when the dreamer isn't runnable, and the schema for smart_notes.enabled should mention the dependency.

  3. User-observation collection ignores dreamer.disable. userMemoryCollectionEnabled checks only that the review-user-memories schedule is a non-empty string (index-ghc9f0n7.js ~178). The default schedule is non-empty, so with the dreamer disabled the historian may still be asked to collect observations that nothing will review. I haven't confirmed whether the historian prompt actually requests them when memory.enabled is false.

Options nested under sections they don't depend on

  1. memory.auto_search and memory.git_commit_indexing sit under memory but work with memory.enabled: false. The schema says so in their descriptions, but the nesting still reads as "part of memory". I turned auto-search off along with memory for that reason, without realising it searches past conversation, not just memories.
  2. dreamer.inject_docs controls whether project docs are injected into the prompt. On OpenCode 1 it applies with the dreamer disabled, so it isn't really a dreamer setting.
  3. historian_timeout_ms and commit_cluster_trigger are historian settings at the top level rather than under historian.

Moving these would break existing configs, so aliases with a deprecation warning, or just clearer schema descriptions, would be enough.

Possibly dead

  1. memory.retrieval_count_promotion_threshold: the only references I found in dist/ are schema definitions, with no reader. Either it's unused or I missed an indirect read.

Expected

The schema and README describe each option's real dependencies. Where an option has no effect because of another setting, log a warning at startup, the same way the #709 fix plans to for options unsupported on OpenCode 2.

Activity

  1. magic-alfonso commented on Oct 17, 2026

    @magic-alfonso

    Thanks, this is a careful report. We'll check each of the seven points against the current source and come back with which are real gaps, which are intended, and what we change. Where an option has no effect because of another setting, the schema descriptions should say so and Magic Context should log it once at startup. Point 3, observation collection while the dreamer is disabled, looks like wasted work in the summarizer if it holds.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions