Make xmd plan authorship observable during and after an invocation #676

Description

@taras

Story

As an operator, I want visible progress while xmd plan authors a program and
an optional diagnostic journal when I need lasting evidence, so a long or failed
planning invocation is understandable without contaminating the approved source.

Common paths

Ordinary planning reports readable Markdown progress on stderr while stdout
remains reserved for exact approved XMD source:

xmd plan "Prepare the release program."> release.md

Long-form verbose presentation adds generated drafts and structured XMD check
diagnostics after secret detection clears them:

xmd plan "Prepare the release program." --verbose

An exclusive authorship journal preserves diagnostic evidence:

xmd plan "Prepare the release program." --journal plan-authorship.jsonl

--verbose and --journal describe authorship only. They never observe a later
program execution because #724 makes xmd plan source-only.

Live presentation

The phase prose is authored in the packaged Plan.md beside the control flow it
describes. A private command-only presentation component emits it only for the
xmd plan surface. On the ordinary component surface it returns before
expanding its content.

Default progress covers:

  • getting the available XMD components and constructs and preparing the
    planning session;
  • drafting the Plan, with the current attempt shown separately;
  • checking and repairing a draft, including the bounded repair count;
  • waiting for human review;
  • revising after requested changes;
  • closing the planning session and producing the final Plan from the approved
    draft;
  • authored Stop; and
  • the automatic final explanation already owned by Make <Plan> emit or capture approved XMD source #722 when the tenth invalid
    attempt exhausts its repairs.

Every phase appears before the potentially long operation it describes. The
host drains the command document's output while the producer is alive,
normalizes the Markdown prose, and applies terminal formatting only when stderr
is a TTY. Non-TTY stderr receives normalized Markdown progressively rather than
one synthesized report at the end.

Default progress never includes the request, draft source, diagnostics, review
feedback, Agent output, tool or provider output, or approved program source.
Approval and finalization may be reported when they occur, but presentation does
not claim stdout or --output delivery before final host validation and the
artifact sink succeed.

The command adapter renders no incidental prose. Ordinary bare <Plan> emits
only exact approved source, captured <Plan as="…"> binds those bytes and emits
nothing, and neither receives command progress.

Verbose authorship presentation

Only the long --verbose spelling is accepted. It adds two command-only blocks
to stderr:

  • each generated draft after its Agent turn; and
  • the exact structured diagnostics after a failed XMD draft check.

Both are provisional authorship material, never stdout or --output content.
They do not add the request, review feedback, tool output, provider chatter, or
approved source as separate presentation.

Verbose material is emitted only after the durable event that supplied it
passes the existing secret-detection boundary and commits. A rejected Agent
result or draft-check result creates no binding, so the private presentation
call holding that draft or diagnostics is never reached. The rejected material
is neither displayed nor persisted. Authorship fails, its complete scope tears
down, and no approved source reaches stdout or --output.

Help says:

--verbose show generated drafts and XMD check diagnostics on stderr

The removed -V alias remains unsupported.

Authorship journal and secret detection

Only the long --journal <path> spelling is accepted. The host exclusively
creates that path before authorship and selects either its file-backed
DurableStream or a fresh in-memory stream when no journal was requested. It
passes that selected stream to the plan-command executeInstalled() call with
secret detection enabled.

Every live durable event crosses useSecretDetection() and its pre-append
serialized-event gate before the selected stream receives it. A cleared event is
appended in ordinary execution order. A rejected event is absent from the file
and the in-memory committed sequence, while every earlier complete JSONL entry
remains readable. Rejection fails authorship after complete teardown and writes
no approved source.

The journal is the existing raw durable-event sequence, not a curated or
separately versioned projection. It includes cleared Agent turns, draft checks,
review decisions, admission, and the terminal outcome that commits. It contains
no later program-execution events. xmd plan never opens the file as replay
input and the journal grants no resume authority.

A pre-existing journal path refuses before planning begins. A write failure
after authorship begins fails the invocation and leaves the previously committed
prefix readable. An invocation without --journal creates no diagnostic file.

Help says:

--journal <path> record the planning process as diagnostic JSONL (path must not exist)
Secret detection checks journal entries before they are recorded, but it may not catch every sensitive detail. The journal can contain prompts, drafts, and review answers.

The removed -j alias remains unsupported.

Failure and teardown

Presentation consumption remains inside the command-document execution scope. A
stderr write failure stops consumption, cancels the producer, and completes all
provider, Prompt, Elicitation, session-directory, and execution teardown before
the command returns nonzero. It never attempts stdout or --output afterward;
stderr bytes already accepted by the host are not rolled back.

Cancellation, teardown failure, journal rejection, journal write failure, final
host validation failure, and artifact-sink failure retain their ordinary
diagnostics. No presentation claims final delivery before it succeeds.

Acceptance

  • A slow successful invocation presents the phases progressively on stderr while
    stdout or --output receives only byte-identical approved source.
  • Draft and repair ordinals remain correct through repair and requested-change
    revisions.
  • Non-TTY stderr receives normalized Markdown; a stderr TTY receives terminal
    formatting.
  • The Make <Plan> emit or capture approved XMD source #722 automatic explanation is presented with no final invalid-draft
    Elicitation and no Plan afterward.
  • Cleared --verbose drafts and structured diagnostics appear in phase order on
    stderr and nowhere in the artifact.
  • A secret-containing verbose draft or diagnostic is neither displayed nor
    appended; rejection completes teardown and produces no Plan.
  • --journal exclusively creates the diagnostic file before the first Agent
    turn and preserves a readable committed prefix after success, ordinary
    failure, write failure, and secret-detection rejection.
  • A rejected journal event is absent, and the journal contains no later
    program-execution events.
  • No-journal planning creates no diagnostic file.
  • Ordinary bare and captured <Plan> remain free of command presentation.
  • Existing exact-source, output exclusivity, cancellation, teardown, and sink
    failure behavior remains unchanged.

Documentation and focused evidence

Add the presentation, verbose, secret-detection, and authorship-journal contract
to specs/plan-command-spec.md and the host/authorship lifecycle in
architecture.md. Update the affected command lifecycle and <Plan> sections
of specs/executable-mdx-spec.md, CLI grammar and help, and the relevant
component and command inventory. Preserve #722's post-teardown admission order
and #724's source-only command.

Focused feedback evidence:

deno task test \
packages/cli/tests/plan-cli.test.ts \
packages/cli/tests/plan-component.test.ts \
packages/cli/tests/plan-command-document.test.ts

The command-document suite owns progressive phase order, ordinals, verbose
blocks, and the automatic-explanation presentation. The component suite owns
the ordinary bare/captured negative controls. The CLI suite owns stderr/stdout
separation, TTY choice, grammar, journal creation and prefixes, secret rejection,
cancellation, teardown, and artifact-sink failures.

Add packages/cli/tests/plan-args.test.ts,
packages/cli/tests/syntax-cli.test.ts, and
packages/cli/tests/packaged-document.test.ts to the focused command when the
grammar, help, or packaged private declaration changes. Add a shared output- or
secret-middleware suite only if implementation changes that shared boundary;
using the existing boundary requires only Plan integration evidence.

After the focused cases pass, create the feedback commit and return its exact SHA
with every focused command run. Then run deno task test --changed=origin/main
on that revision. Do not wait for CI for feedback review.

Dependencies

Planning and prompt-quality review may proceed before those dependencies land.
Implementation starts from the exact accepted #724 head or merged result. This
story remains a related follow-up and does not block #725.

Out of scope

  • Implicit or automatic execution of approved source.
  • Public progress syntax or ordinary <Plan> presentation.
  • Draft or diagnostic presentation without long-form --verbose.
  • Authorship replay, resume, or a stable diagnostic projection.
  • Changing post-teardown Plan admission.
  • New XMD language primitives.
  • Unrelated Quest: Preserve planned XMD programs for explicit execution #725 work.

Activity

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      Make xmd plan authorship observable during and after an invocation #676

      Description

      @taras

      Story

      As an operator, I want visible progress while xmd plan authors a program and
      an optional diagnostic journal when I need lasting evidence, so a long or failed
      planning invocation is understandable without contaminating the approved source.

      Common paths

      Ordinary planning reports readable Markdown progress on stderr while stdout
      remains reserved for exact approved XMD source:

      xmd plan "Prepare the release program."> release.md

      Long-form verbose presentation adds generated drafts and structured XMD check
      diagnostics after secret detection clears them:

      xmd plan "Prepare the release program." --verbose

      An exclusive authorship journal preserves diagnostic evidence:

      xmd plan "Prepare the release program." --journal plan-authorship.jsonl

      --verbose and --journal describe authorship only. They never observe a later
      program execution because #724 makes xmd plan source-only.

      Live presentation

      The phase prose is authored in the packaged Plan.md beside the control flow it
      describes. A private command-only presentation component emits it only for the
      xmd plan surface. On the ordinary component surface it returns before
      expanding its content.

      Default progress covers:

      • getting the available XMD components and constructs and preparing the
        planning session;
      • drafting the Plan, with the current attempt shown separately;
      • checking and repairing a draft, including the bounded repair count;
      • waiting for human review;
      • revising after requested changes;
      • closing the planning session and producing the final Plan from the approved
        draft;
      • authored Stop; and
      • the automatic final explanation already owned by Make <Plan> emit or capture approved XMD source #722 when the tenth invalid
        attempt exhausts its repairs.

      Every phase appears before the potentially long operation it describes. The
      host drains the command document's output while the producer is alive,
      normalizes the Markdown prose, and applies terminal formatting only when stderr
      is a TTY. Non-TTY stderr receives normalized Markdown progressively rather than
      one synthesized report at the end.

      Default progress never includes the request, draft source, diagnostics, review
      feedback, Agent output, tool or provider output, or approved program source.
      Approval and finalization may be reported when they occur, but presentation does
      not claim stdout or --output delivery before final host validation and the
      artifact sink succeed.

      The command adapter renders no incidental prose. Ordinary bare <Plan> emits
      only exact approved source, captured <Plan as="…"> binds those bytes and emits
      nothing, and neither receives command progress.

      Verbose authorship presentation

      Only the long --verbose spelling is accepted. It adds two command-only blocks
      to stderr:

      • each generated draft after its Agent turn; and
      • the exact structured diagnostics after a failed XMD draft check.

      Both are provisional authorship material, never stdout or --output content.
      They do not add the request, review feedback, tool output, provider chatter, or
      approved source as separate presentation.

      Verbose material is emitted only after the durable event that supplied it
      passes the existing secret-detection boundary and commits. A rejected Agent
      result or draft-check result creates no binding, so the private presentation
      call holding that draft or diagnostics is never reached. The rejected material
      is neither displayed nor persisted. Authorship fails, its complete scope tears
      down, and no approved source reaches stdout or --output.

      Help says:

      --verbose show generated drafts and XMD check diagnostics on stderr
      

      The removed -V alias remains unsupported.

      Authorship journal and secret detection

      Only the long --journal <path> spelling is accepted. The host exclusively
      creates that path before authorship and selects either its file-backed
      DurableStream or a fresh in-memory stream when no journal was requested. It
      passes that selected stream to the plan-command executeInstalled() call with
      secret detection enabled.

      Every live durable event crosses useSecretDetection() and its pre-append
      serialized-event gate before the selected stream receives it. A cleared event is
      appended in ordinary execution order. A rejected event is absent from the file
      and the in-memory committed sequence, while every earlier complete JSONL entry
      remains readable. Rejection fails authorship after complete teardown and writes
      no approved source.

      The journal is the existing raw durable-event sequence, not a curated or
      separately versioned projection. It includes cleared Agent turns, draft checks,
      review decisions, admission, and the terminal outcome that commits. It contains
      no later program-execution events. xmd plan never opens the file as replay
      input and the journal grants no resume authority.

      A pre-existing journal path refuses before planning begins. A write failure
      after authorship begins fails the invocation and leaves the previously committed
      prefix readable. An invocation without --journal creates no diagnostic file.

      Help says:

      --journal <path> record the planning process as diagnostic JSONL (path must not exist)
      Secret detection checks journal entries before they are recorded, but it may not catch every sensitive detail. The journal can contain prompts, drafts, and review answers.
      

      The removed -j alias remains unsupported.

      Failure and teardown

      Presentation consumption remains inside the command-document execution scope. A
      stderr write failure stops consumption, cancels the producer, and completes all
      provider, Prompt, Elicitation, session-directory, and execution teardown before
      the command returns nonzero. It never attempts stdout or --output afterward;
      stderr bytes already accepted by the host are not rolled back.

      Cancellation, teardown failure, journal rejection, journal write failure, final
      host validation failure, and artifact-sink failure retain their ordinary
      diagnostics. No presentation claims final delivery before it succeeds.

      Acceptance

      • A slow successful invocation presents the phases progressively on stderr while
        stdout or --output receives only byte-identical approved source.
      • Draft and repair ordinals remain correct through repair and requested-change
        revisions.
      • Non-TTY stderr receives normalized Markdown; a stderr TTY receives terminal
        formatting.
      • The Make <Plan> emit or capture approved XMD source #722 automatic explanation is presented with no final invalid-draft
        Elicitation and no Plan afterward.
      • Cleared --verbose drafts and structured diagnostics appear in phase order on
        stderr and nowhere in the artifact.
      • A secret-containing verbose draft or diagnostic is neither displayed nor
        appended; rejection completes teardown and produces no Plan.
      • --journal exclusively creates the diagnostic file before the first Agent
        turn and preserves a readable committed prefix after success, ordinary
        failure, write failure, and secret-detection rejection.
      • A rejected journal event is absent, and the journal contains no later
        program-execution events.
      • No-journal planning creates no diagnostic file.
      • Ordinary bare and captured <Plan> remain free of command presentation.
      • Existing exact-source, output exclusivity, cancellation, teardown, and sink
        failure behavior remains unchanged.

      Documentation and focused evidence

      Add the presentation, verbose, secret-detection, and authorship-journal contract
      to specs/plan-command-spec.md and the host/authorship lifecycle in
      architecture.md. Update the affected command lifecycle and <Plan> sections
      of specs/executable-mdx-spec.md, CLI grammar and help, and the relevant
      component and command inventory. Preserve #722's post-teardown admission order
      and #724's source-only command.

      Focused feedback evidence:

      deno task test \
      packages/cli/tests/plan-cli.test.ts \
      packages/cli/tests/plan-component.test.ts \
      packages/cli/tests/plan-command-document.test.ts

      The command-document suite owns progressive phase order, ordinals, verbose
      blocks, and the automatic-explanation presentation. The component suite owns
      the ordinary bare/captured negative controls. The CLI suite owns stderr/stdout
      separation, TTY choice, grammar, journal creation and prefixes, secret rejection,
      cancellation, teardown, and artifact-sink failures.

      Add packages/cli/tests/plan-args.test.ts,
      packages/cli/tests/syntax-cli.test.ts, and
      packages/cli/tests/packaged-document.test.ts to the focused command when the
      grammar, help, or packaged private declaration changes. Add a shared output- or
      secret-middleware suite only if implementation changes that shared boundary;
      using the existing boundary requires only Plan integration evidence.

      After the focused cases pass, create the feedback commit and return its exact SHA
      with every focused command run. Then run deno task test --changed=origin/main
      on that revision. Do not wait for CI for feedback review.

      Dependencies

      Planning and prompt-quality review may proceed before those dependencies land.
      Implementation starts from the exact accepted #724 head or merged result. This
      story remains a related follow-up and does not block #725.

      Out of scope

      • Implicit or automatic execution of approved source.
      • Public progress syntax or ordinary <Plan> presentation.
      • Draft or diagnostic presentation without long-form --verbose.
      • Authorship replay, resume, or a stable diagnostic projection.
      • Changing post-teardown Plan admission.
      • New XMD language primitives.
      • Unrelated Quest: Preserve planned XMD programs for explicit execution #725 work.

      Activity

      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

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          Make xmd plan authorship observable during and after an invocation #676

          Description

          @taras

          Story

          As an operator, I want visible progress while xmd plan authors a program and
          an optional diagnostic journal when I need lasting evidence, so a long or failed
          planning invocation is understandable without contaminating the approved source.

          Common paths

          Ordinary planning reports readable Markdown progress on stderr while stdout
          remains reserved for exact approved XMD source:

          xmd plan "Prepare the release program."> release.md

          Long-form verbose presentation adds generated drafts and structured XMD check
          diagnostics after secret detection clears them:

          xmd plan "Prepare the release program." --verbose

          An exclusive authorship journal preserves diagnostic evidence:

          xmd plan "Prepare the release program." --journal plan-authorship.jsonl

          --verbose and --journal describe authorship only. They never observe a later
          program execution because #724 makes xmd plan source-only.

          Live presentation

          The phase prose is authored in the packaged Plan.md beside the control flow it
          describes. A private command-only presentation component emits it only for the
          xmd plan surface. On the ordinary component surface it returns before
          expanding its content.

          Default progress covers:

          • getting the available XMD components and constructs and preparing the
            planning session;
          • drafting the Plan, with the current attempt shown separately;
          • checking and repairing a draft, including the bounded repair count;
          • waiting for human review;
          • revising after requested changes;
          • closing the planning session and producing the final Plan from the approved
            draft;
          • authored Stop; and
          • the automatic final explanation already owned by Make <Plan> emit or capture approved XMD source #722 when the tenth invalid
            attempt exhausts its repairs.

          Every phase appears before the potentially long operation it describes. The
          host drains the command document's output while the producer is alive,
          normalizes the Markdown prose, and applies terminal formatting only when stderr
          is a TTY. Non-TTY stderr receives normalized Markdown progressively rather than
          one synthesized report at the end.

          Default progress never includes the request, draft source, diagnostics, review
          feedback, Agent output, tool or provider output, or approved program source.
          Approval and finalization may be reported when they occur, but presentation does
          not claim stdout or --output delivery before final host validation and the
          artifact sink succeed.

          The command adapter renders no incidental prose. Ordinary bare <Plan> emits
          only exact approved source, captured <Plan as="…"> binds those bytes and emits
          nothing, and neither receives command progress.

          Verbose authorship presentation

          Only the long --verbose spelling is accepted. It adds two command-only blocks
          to stderr:

          • each generated draft after its Agent turn; and
          • the exact structured diagnostics after a failed XMD draft check.

          Both are provisional authorship material, never stdout or --output content.
          They do not add the request, review feedback, tool output, provider chatter, or
          approved source as separate presentation.

          Verbose material is emitted only after the durable event that supplied it
          passes the existing secret-detection boundary and commits. A rejected Agent
          result or draft-check result creates no binding, so the private presentation
          call holding that draft or diagnostics is never reached. The rejected material
          is neither displayed nor persisted. Authorship fails, its complete scope tears
          down, and no approved source reaches stdout or --output.

          Help says:

          --verbose show generated drafts and XMD check diagnostics on stderr
          

          The removed -V alias remains unsupported.

          Authorship journal and secret detection

          Only the long --journal <path> spelling is accepted. The host exclusively
          creates that path before authorship and selects either its file-backed
          DurableStream or a fresh in-memory stream when no journal was requested. It
          passes that selected stream to the plan-command executeInstalled() call with
          secret detection enabled.

          Every live durable event crosses useSecretDetection() and its pre-append
          serialized-event gate before the selected stream receives it. A cleared event is
          appended in ordinary execution order. A rejected event is absent from the file
          and the in-memory committed sequence, while every earlier complete JSONL entry
          remains readable. Rejection fails authorship after complete teardown and writes
          no approved source.

          The journal is the existing raw durable-event sequence, not a curated or
          separately versioned projection. It includes cleared Agent turns, draft checks,
          review decisions, admission, and the terminal outcome that commits. It contains
          no later program-execution events. xmd plan never opens the file as replay
          input and the journal grants no resume authority.

          A pre-existing journal path refuses before planning begins. A write failure
          after authorship begins fails the invocation and leaves the previously committed
          prefix readable. An invocation without --journal creates no diagnostic file.

          Help says:

          --journal <path> record the planning process as diagnostic JSONL (path must not exist)
          Secret detection checks journal entries before they are recorded, but it may not catch every sensitive detail. The journal can contain prompts, drafts, and review answers.
          

          The removed -j alias remains unsupported.

          Failure and teardown

          Presentation consumption remains inside the command-document execution scope. A
          stderr write failure stops consumption, cancels the producer, and completes all
          provider, Prompt, Elicitation, session-directory, and execution teardown before
          the command returns nonzero. It never attempts stdout or --output afterward;
          stderr bytes already accepted by the host are not rolled back.

          Cancellation, teardown failure, journal rejection, journal write failure, final
          host validation failure, and artifact-sink failure retain their ordinary
          diagnostics. No presentation claims final delivery before it succeeds.

          Acceptance

          • A slow successful invocation presents the phases progressively on stderr while
            stdout or --output receives only byte-identical approved source.
          • Draft and repair ordinals remain correct through repair and requested-change
            revisions.
          • Non-TTY stderr receives normalized Markdown; a stderr TTY receives terminal
            formatting.
          • The Make <Plan> emit or capture approved XMD source #722 automatic explanation is presented with no final invalid-draft
            Elicitation and no Plan afterward.
          • Cleared --verbose drafts and structured diagnostics appear in phase order on
            stderr and nowhere in the artifact.
          • A secret-containing verbose draft or diagnostic is neither displayed nor
            appended; rejection completes teardown and produces no Plan.
          • --journal exclusively creates the diagnostic file before the first Agent
            turn and preserves a readable committed prefix after success, ordinary
            failure, write failure, and secret-detection rejection.
          • A rejected journal event is absent, and the journal contains no later
            program-execution events.
          • No-journal planning creates no diagnostic file.
          • Ordinary bare and captured <Plan> remain free of command presentation.
          • Existing exact-source, output exclusivity, cancellation, teardown, and sink
            failure behavior remains unchanged.

          Documentation and focused evidence

          Add the presentation, verbose, secret-detection, and authorship-journal contract
          to specs/plan-command-spec.md and the host/authorship lifecycle in
          architecture.md. Update the affected command lifecycle and <Plan> sections
          of specs/executable-mdx-spec.md, CLI grammar and help, and the relevant
          component and command inventory. Preserve #722's post-teardown admission order
          and #724's source-only command.

          Focused feedback evidence:

          deno task test \
          packages/cli/tests/plan-cli.test.ts \
          packages/cli/tests/plan-component.test.ts \
          packages/cli/tests/plan-command-document.test.ts

          The command-document suite owns progressive phase order, ordinals, verbose
          blocks, and the automatic-explanation presentation. The component suite owns
          the ordinary bare/captured negative controls. The CLI suite owns stderr/stdout
          separation, TTY choice, grammar, journal creation and prefixes, secret rejection,
          cancellation, teardown, and artifact-sink failures.

          Add packages/cli/tests/plan-args.test.ts,
          packages/cli/tests/syntax-cli.test.ts, and
          packages/cli/tests/packaged-document.test.ts to the focused command when the
          grammar, help, or packaged private declaration changes. Add a shared output- or
          secret-middleware suite only if implementation changes that shared boundary;
          using the existing boundary requires only Plan integration evidence.

          After the focused cases pass, create the feedback commit and return its exact SHA
          with every focused command run. Then run deno task test --changed=origin/main
          on that revision. Do not wait for CI for feedback review.

          Dependencies

          Planning and prompt-quality review may proceed before those dependencies land.
          Implementation starts from the exact accepted #724 head or merged result. This
          story remains a related follow-up and does not block #725.

          Out of scope

          • Implicit or automatic execution of approved source.
          • Public progress syntax or ordinary <Plan> presentation.
          • Draft or diagnostic presentation without long-form --verbose.
          • Authorship replay, resume, or a stable diagnostic projection.
          • Changing post-teardown Plan admission.
          • New XMD language primitives.
          • Unrelated Quest: Preserve planned XMD programs for explicit execution #725 work.

          Activity

          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

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              Make xmd plan authorship observable during and after an invocation #676

              Description

              @taras

              Story

              As an operator, I want visible progress while xmd plan authors a program and
              an optional diagnostic journal when I need lasting evidence, so a long or failed
              planning invocation is understandable without contaminating the approved source.

              Common paths

              Ordinary planning reports readable Markdown progress on stderr while stdout
              remains reserved for exact approved XMD source:

              xmd plan "Prepare the release program."> release.md

              Long-form verbose presentation adds generated drafts and structured XMD check
              diagnostics after secret detection clears them:

              xmd plan "Prepare the release program." --verbose

              An exclusive authorship journal preserves diagnostic evidence:

              xmd plan "Prepare the release program." --journal plan-authorship.jsonl

              --verbose and --journal describe authorship only. They never observe a later
              program execution because #724 makes xmd plan source-only.

              Live presentation

              The phase prose is authored in the packaged Plan.md beside the control flow it
              describes. A private command-only presentation component emits it only for the
              xmd plan surface. On the ordinary component surface it returns before
              expanding its content.

              Default progress covers:

              • getting the available XMD components and constructs and preparing the
                planning session;
              • drafting the Plan, with the current attempt shown separately;
              • checking and repairing a draft, including the bounded repair count;
              • waiting for human review;
              • revising after requested changes;
              • closing the planning session and producing the final Plan from the approved
                draft;
              • authored Stop; and
              • the automatic final explanation already owned by Make <Plan> emit or capture approved XMD source #722 when the tenth invalid
                attempt exhausts its repairs.

              Every phase appears before the potentially long operation it describes. The
              host drains the command document's output while the producer is alive,
              normalizes the Markdown prose, and applies terminal formatting only when stderr
              is a TTY. Non-TTY stderr receives normalized Markdown progressively rather than
              one synthesized report at the end.

              Default progress never includes the request, draft source, diagnostics, review
              feedback, Agent output, tool or provider output, or approved program source.
              Approval and finalization may be reported when they occur, but presentation does
              not claim stdout or --output delivery before final host validation and the
              artifact sink succeed.

              The command adapter renders no incidental prose. Ordinary bare <Plan> emits
              only exact approved source, captured <Plan as="…"> binds those bytes and emits
              nothing, and neither receives command progress.

              Verbose authorship presentation

              Only the long --verbose spelling is accepted. It adds two command-only blocks
              to stderr:

              • each generated draft after its Agent turn; and
              • the exact structured diagnostics after a failed XMD draft check.

              Both are provisional authorship material, never stdout or --output content.
              They do not add the request, review feedback, tool output, provider chatter, or
              approved source as separate presentation.

              Verbose material is emitted only after the durable event that supplied it
              passes the existing secret-detection boundary and commits. A rejected Agent
              result or draft-check result creates no binding, so the private presentation
              call holding that draft or diagnostics is never reached. The rejected material
              is neither displayed nor persisted. Authorship fails, its complete scope tears
              down, and no approved source reaches stdout or --output.

              Help says:

              --verbose show generated drafts and XMD check diagnostics on stderr
              

              The removed -V alias remains unsupported.

              Authorship journal and secret detection

              Only the long --journal <path> spelling is accepted. The host exclusively
              creates that path before authorship and selects either its file-backed
              DurableStream or a fresh in-memory stream when no journal was requested. It
              passes that selected stream to the plan-command executeInstalled() call with
              secret detection enabled.

              Every live durable event crosses useSecretDetection() and its pre-append
              serialized-event gate before the selected stream receives it. A cleared event is
              appended in ordinary execution order. A rejected event is absent from the file
              and the in-memory committed sequence, while every earlier complete JSONL entry
              remains readable. Rejection fails authorship after complete teardown and writes
              no approved source.

              The journal is the existing raw durable-event sequence, not a curated or
              separately versioned projection. It includes cleared Agent turns, draft checks,
              review decisions, admission, and the terminal outcome that commits. It contains
              no later program-execution events. xmd plan never opens the file as replay
              input and the journal grants no resume authority.

              A pre-existing journal path refuses before planning begins. A write failure
              after authorship begins fails the invocation and leaves the previously committed
              prefix readable. An invocation without --journal creates no diagnostic file.

              Help says:

              --journal <path> record the planning process as diagnostic JSONL (path must not exist)
              Secret detection checks journal entries before they are recorded, but it may not catch every sensitive detail. The journal can contain prompts, drafts, and review answers.
              

              The removed -j alias remains unsupported.

              Failure and teardown

              Presentation consumption remains inside the command-document execution scope. A
              stderr write failure stops consumption, cancels the producer, and completes all
              provider, Prompt, Elicitation, session-directory, and execution teardown before
              the command returns nonzero. It never attempts stdout or --output afterward;
              stderr bytes already accepted by the host are not rolled back.

              Cancellation, teardown failure, journal rejection, journal write failure, final
              host validation failure, and artifact-sink failure retain their ordinary
              diagnostics. No presentation claims final delivery before it succeeds.

              Acceptance

              • A slow successful invocation presents the phases progressively on stderr while
                stdout or --output receives only byte-identical approved source.
              • Draft and repair ordinals remain correct through repair and requested-change
                revisions.
              • Non-TTY stderr receives normalized Markdown; a stderr TTY receives terminal
                formatting.
              • The Make <Plan> emit or capture approved XMD source #722 automatic explanation is presented with no final invalid-draft
                Elicitation and no Plan afterward.
              • Cleared --verbose drafts and structured diagnostics appear in phase order on
                stderr and nowhere in the artifact.
              • A secret-containing verbose draft or diagnostic is neither displayed nor
                appended; rejection completes teardown and produces no Plan.
              • --journal exclusively creates the diagnostic file before the first Agent
                turn and preserves a readable committed prefix after success, ordinary
                failure, write failure, and secret-detection rejection.
              • A rejected journal event is absent, and the journal contains no later
                program-execution events.
              • No-journal planning creates no diagnostic file.
              • Ordinary bare and captured <Plan> remain free of command presentation.
              • Existing exact-source, output exclusivity, cancellation, teardown, and sink
                failure behavior remains unchanged.

              Documentation and focused evidence

              Add the presentation, verbose, secret-detection, and authorship-journal contract
              to specs/plan-command-spec.md and the host/authorship lifecycle in
              architecture.md. Update the affected command lifecycle and <Plan> sections
              of specs/executable-mdx-spec.md, CLI grammar and help, and the relevant
              component and command inventory. Preserve #722's post-teardown admission order
              and #724's source-only command.

              Focused feedback evidence:

              deno task test \
              packages/cli/tests/plan-cli.test.ts \
              packages/cli/tests/plan-component.test.ts \
              packages/cli/tests/plan-command-document.test.ts

              The command-document suite owns progressive phase order, ordinals, verbose
              blocks, and the automatic-explanation presentation. The component suite owns
              the ordinary bare/captured negative controls. The CLI suite owns stderr/stdout
              separation, TTY choice, grammar, journal creation and prefixes, secret rejection,
              cancellation, teardown, and artifact-sink failures.

              Add packages/cli/tests/plan-args.test.ts,
              packages/cli/tests/syntax-cli.test.ts, and
              packages/cli/tests/packaged-document.test.ts to the focused command when the
              grammar, help, or packaged private declaration changes. Add a shared output- or
              secret-middleware suite only if implementation changes that shared boundary;
              using the existing boundary requires only Plan integration evidence.

              After the focused cases pass, create the feedback commit and return its exact SHA
              with every focused command run. Then run deno task test --changed=origin/main
              on that revision. Do not wait for CI for feedback review.

              Dependencies

              Planning and prompt-quality review may proceed before those dependencies land.
              Implementation starts from the exact accepted #724 head or merged result. This
              story remains a related follow-up and does not block #725.

              Out of scope

              • Implicit or automatic execution of approved source.
              • Public progress syntax or ordinary <Plan> presentation.
              • Draft or diagnostic presentation without long-form --verbose.
              • Authorship replay, resume, or a stable diagnostic projection.
              • Changing post-teardown Plan admission.
              • New XMD language primitives.
              • Unrelated Quest: Preserve planned XMD programs for explicit execution #725 work.

              Activity

              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

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  Make xmd plan authorship observable during and after an invocation #676

                  Description

                  @taras

                  Story

                  As an operator, I want visible progress while xmd plan authors a program and
                  an optional diagnostic journal when I need lasting evidence, so a long or failed
                  planning invocation is understandable without contaminating the approved source.

                  Common paths

                  Ordinary planning reports readable Markdown progress on stderr while stdout
                  remains reserved for exact approved XMD source:

                  xmd plan "Prepare the release program."> release.md

                  Long-form verbose presentation adds generated drafts and structured XMD check
                  diagnostics after secret detection clears them:

                  xmd plan "Prepare the release program." --verbose

                  An exclusive authorship journal preserves diagnostic evidence:

                  xmd plan "Prepare the release program." --journal plan-authorship.jsonl

                  --verbose and --journal describe authorship only. They never observe a later
                  program execution because #724 makes xmd plan source-only.

                  Live presentation

                  The phase prose is authored in the packaged Plan.md beside the control flow it
                  describes. A private command-only presentation component emits it only for the
                  xmd plan surface. On the ordinary component surface it returns before
                  expanding its content.

                  Default progress covers:

                  • getting the available XMD components and constructs and preparing the
                    planning session;
                  • drafting the Plan, with the current attempt shown separately;
                  • checking and repairing a draft, including the bounded repair count;
                  • waiting for human review;
                  • revising after requested changes;
                  • closing the planning session and producing the final Plan from the approved
                    draft;
                  • authored Stop; and
                  • the automatic final explanation already owned by Make <Plan> emit or capture approved XMD source #722 when the tenth invalid
                    attempt exhausts its repairs.

                  Every phase appears before the potentially long operation it describes. The
                  host drains the command document's output while the producer is alive,
                  normalizes the Markdown prose, and applies terminal formatting only when stderr
                  is a TTY. Non-TTY stderr receives normalized Markdown progressively rather than
                  one synthesized report at the end.

                  Default progress never includes the request, draft source, diagnostics, review
                  feedback, Agent output, tool or provider output, or approved program source.
                  Approval and finalization may be reported when they occur, but presentation does
                  not claim stdout or --output delivery before final host validation and the
                  artifact sink succeed.

                  The command adapter renders no incidental prose. Ordinary bare <Plan> emits
                  only exact approved source, captured <Plan as="…"> binds those bytes and emits
                  nothing, and neither receives command progress.

                  Verbose authorship presentation

                  Only the long --verbose spelling is accepted. It adds two command-only blocks
                  to stderr:

                  • each generated draft after its Agent turn; and
                  • the exact structured diagnostics after a failed XMD draft check.

                  Both are provisional authorship material, never stdout or --output content.
                  They do not add the request, review feedback, tool output, provider chatter, or
                  approved source as separate presentation.

                  Verbose material is emitted only after the durable event that supplied it
                  passes the existing secret-detection boundary and commits. A rejected Agent
                  result or draft-check result creates no binding, so the private presentation
                  call holding that draft or diagnostics is never reached. The rejected material
                  is neither displayed nor persisted. Authorship fails, its complete scope tears
                  down, and no approved source reaches stdout or --output.

                  Help says:

                  --verbose show generated drafts and XMD check diagnostics on stderr
                  

                  The removed -V alias remains unsupported.

                  Authorship journal and secret detection

                  Only the long --journal <path> spelling is accepted. The host exclusively
                  creates that path before authorship and selects either its file-backed
                  DurableStream or a fresh in-memory stream when no journal was requested. It
                  passes that selected stream to the plan-command executeInstalled() call with
                  secret detection enabled.

                  Every live durable event crosses useSecretDetection() and its pre-append
                  serialized-event gate before the selected stream receives it. A cleared event is
                  appended in ordinary execution order. A rejected event is absent from the file
                  and the in-memory committed sequence, while every earlier complete JSONL entry
                  remains readable. Rejection fails authorship after complete teardown and writes
                  no approved source.

                  The journal is the existing raw durable-event sequence, not a curated or
                  separately versioned projection. It includes cleared Agent turns, draft checks,
                  review decisions, admission, and the terminal outcome that commits. It contains
                  no later program-execution events. xmd plan never opens the file as replay
                  input and the journal grants no resume authority.

                  A pre-existing journal path refuses before planning begins. A write failure
                  after authorship begins fails the invocation and leaves the previously committed
                  prefix readable. An invocation without --journal creates no diagnostic file.

                  Help says:

                  --journal <path> record the planning process as diagnostic JSONL (path must not exist)
                  Secret detection checks journal entries before they are recorded, but it may not catch every sensitive detail. The journal can contain prompts, drafts, and review answers.
                  

                  The removed -j alias remains unsupported.

                  Failure and teardown

                  Presentation consumption remains inside the command-document execution scope. A
                  stderr write failure stops consumption, cancels the producer, and completes all
                  provider, Prompt, Elicitation, session-directory, and execution teardown before
                  the command returns nonzero. It never attempts stdout or --output afterward;
                  stderr bytes already accepted by the host are not rolled back.

                  Cancellation, teardown failure, journal rejection, journal write failure, final
                  host validation failure, and artifact-sink failure retain their ordinary
                  diagnostics. No presentation claims final delivery before it succeeds.

                  Acceptance

                  • A slow successful invocation presents the phases progressively on stderr while
                    stdout or --output receives only byte-identical approved source.
                  • Draft and repair ordinals remain correct through repair and requested-change
                    revisions.
                  • Non-TTY stderr receives normalized Markdown; a stderr TTY receives terminal
                    formatting.
                  • The Make <Plan> emit or capture approved XMD source #722 automatic explanation is presented with no final invalid-draft
                    Elicitation and no Plan afterward.
                  • Cleared --verbose drafts and structured diagnostics appear in phase order on
                    stderr and nowhere in the artifact.
                  • A secret-containing verbose draft or diagnostic is neither displayed nor
                    appended; rejection completes teardown and produces no Plan.
                  • --journal exclusively creates the diagnostic file before the first Agent
                    turn and preserves a readable committed prefix after success, ordinary
                    failure, write failure, and secret-detection rejection.
                  • A rejected journal event is absent, and the journal contains no later
                    program-execution events.
                  • No-journal planning creates no diagnostic file.
                  • Ordinary bare and captured <Plan> remain free of command presentation.
                  • Existing exact-source, output exclusivity, cancellation, teardown, and sink
                    failure behavior remains unchanged.

                  Documentation and focused evidence

                  Add the presentation, verbose, secret-detection, and authorship-journal contract
                  to specs/plan-command-spec.md and the host/authorship lifecycle in
                  architecture.md. Update the affected command lifecycle and <Plan> sections
                  of specs/executable-mdx-spec.md, CLI grammar and help, and the relevant
                  component and command inventory. Preserve #722's post-teardown admission order
                  and #724's source-only command.

                  Focused feedback evidence:

                  deno task test \
                  packages/cli/tests/plan-cli.test.ts \
                  packages/cli/tests/plan-component.test.ts \
                  packages/cli/tests/plan-command-document.test.ts

                  The command-document suite owns progressive phase order, ordinals, verbose
                  blocks, and the automatic-explanation presentation. The component suite owns
                  the ordinary bare/captured negative controls. The CLI suite owns stderr/stdout
                  separation, TTY choice, grammar, journal creation and prefixes, secret rejection,
                  cancellation, teardown, and artifact-sink failures.

                  Add packages/cli/tests/plan-args.test.ts,
                  packages/cli/tests/syntax-cli.test.ts, and
                  packages/cli/tests/packaged-document.test.ts to the focused command when the
                  grammar, help, or packaged private declaration changes. Add a shared output- or
                  secret-middleware suite only if implementation changes that shared boundary;
                  using the existing boundary requires only Plan integration evidence.

                  After the focused cases pass, create the feedback commit and return its exact SHA
                  with every focused command run. Then run deno task test --changed=origin/main
                  on that revision. Do not wait for CI for feedback review.

                  Dependencies

                  Planning and prompt-quality review may proceed before those dependencies land.
                  Implementation starts from the exact accepted #724 head or merged result. This
                  story remains a related follow-up and does not block #725.

                  Out of scope

                  • Implicit or automatic execution of approved source.
                  • Public progress syntax or ordinary <Plan> presentation.
                  • Draft or diagnostic presentation without long-form --verbose.
                  • Authorship replay, resume, or a stable diagnostic projection.
                  • Changing post-teardown Plan admission.
                  • New XMD language primitives.
                  • Unrelated Quest: Preserve planned XMD programs for explicit execution #725 work.

                  Activity

                  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

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      Make xmd plan authorship observable during and after an invocation #676

                      Description

                      @taras

                      Story

                      As an operator, I want visible progress while xmd plan authors a program and
                      an optional diagnostic journal when I need lasting evidence, so a long or failed
                      planning invocation is understandable without contaminating the approved source.

                      Common paths

                      Ordinary planning reports readable Markdown progress on stderr while stdout
                      remains reserved for exact approved XMD source:

                      xmd plan "Prepare the release program."> release.md

                      Long-form verbose presentation adds generated drafts and structured XMD check
                      diagnostics after secret detection clears them:

                      xmd plan "Prepare the release program." --verbose

                      An exclusive authorship journal preserves diagnostic evidence:

                      xmd plan "Prepare the release program." --journal plan-authorship.jsonl

                      --verbose and --journal describe authorship only. They never observe a later
                      program execution because #724 makes xmd plan source-only.

                      Live presentation

                      The phase prose is authored in the packaged Plan.md beside the control flow it
                      describes. A private command-only presentation component emits it only for the
                      xmd plan surface. On the ordinary component surface it returns before
                      expanding its content.

                      Default progress covers:

                      • getting the available XMD components and constructs and preparing the
                        planning session;
                      • drafting the Plan, with the current attempt shown separately;
                      • checking and repairing a draft, including the bounded repair count;
                      • waiting for human review;
                      • revising after requested changes;
                      • closing the planning session and producing the final Plan from the approved
                        draft;
                      • authored Stop; and
                      • the automatic final explanation already owned by Make <Plan> emit or capture approved XMD source #722 when the tenth invalid
                        attempt exhausts its repairs.

                      Every phase appears before the potentially long operation it describes. The
                      host drains the command document's output while the producer is alive,
                      normalizes the Markdown prose, and applies terminal formatting only when stderr
                      is a TTY. Non-TTY stderr receives normalized Markdown progressively rather than
                      one synthesized report at the end.

                      Default progress never includes the request, draft source, diagnostics, review
                      feedback, Agent output, tool or provider output, or approved program source.
                      Approval and finalization may be reported when they occur, but presentation does
                      not claim stdout or --output delivery before final host validation and the
                      artifact sink succeed.

                      The command adapter renders no incidental prose. Ordinary bare <Plan> emits
                      only exact approved source, captured <Plan as="…"> binds those bytes and emits
                      nothing, and neither receives command progress.

                      Verbose authorship presentation

                      Only the long --verbose spelling is accepted. It adds two command-only blocks
                      to stderr:

                      • each generated draft after its Agent turn; and
                      • the exact structured diagnostics after a failed XMD draft check.

                      Both are provisional authorship material, never stdout or --output content.
                      They do not add the request, review feedback, tool output, provider chatter, or
                      approved source as separate presentation.

                      Verbose material is emitted only after the durable event that supplied it
                      passes the existing secret-detection boundary and commits. A rejected Agent
                      result or draft-check result creates no binding, so the private presentation
                      call holding that draft or diagnostics is never reached. The rejected material
                      is neither displayed nor persisted. Authorship fails, its complete scope tears
                      down, and no approved source reaches stdout or --output.

                      Help says:

                      --verbose show generated drafts and XMD check diagnostics on stderr
                      

                      The removed -V alias remains unsupported.

                      Authorship journal and secret detection

                      Only the long --journal <path> spelling is accepted. The host exclusively
                      creates that path before authorship and selects either its file-backed
                      DurableStream or a fresh in-memory stream when no journal was requested. It
                      passes that selected stream to the plan-command executeInstalled() call with
                      secret detection enabled.

                      Every live durable event crosses useSecretDetection() and its pre-append
                      serialized-event gate before the selected stream receives it. A cleared event is
                      appended in ordinary execution order. A rejected event is absent from the file
                      and the in-memory committed sequence, while every earlier complete JSONL entry
                      remains readable. Rejection fails authorship after complete teardown and writes
                      no approved source.

                      The journal is the existing raw durable-event sequence, not a curated or
                      separately versioned projection. It includes cleared Agent turns, draft checks,
                      review decisions, admission, and the terminal outcome that commits. It contains
                      no later program-execution events. xmd plan never opens the file as replay
                      input and the journal grants no resume authority.

                      A pre-existing journal path refuses before planning begins. A write failure
                      after authorship begins fails the invocation and leaves the previously committed
                      prefix readable. An invocation without --journal creates no diagnostic file.

                      Help says:

                      --journal <path> record the planning process as diagnostic JSONL (path must not exist)
                      Secret detection checks journal entries before they are recorded, but it may not catch every sensitive detail. The journal can contain prompts, drafts, and review answers.
                      

                      The removed -j alias remains unsupported.

                      Failure and teardown

                      Presentation consumption remains inside the command-document execution scope. A
                      stderr write failure stops consumption, cancels the producer, and completes all
                      provider, Prompt, Elicitation, session-directory, and execution teardown before
                      the command returns nonzero. It never attempts stdout or --output afterward;
                      stderr bytes already accepted by the host are not rolled back.

                      Cancellation, teardown failure, journal rejection, journal write failure, final
                      host validation failure, and artifact-sink failure retain their ordinary
                      diagnostics. No presentation claims final delivery before it succeeds.

                      Acceptance

                      • A slow successful invocation presents the phases progressively on stderr while
                        stdout or --output receives only byte-identical approved source.
                      • Draft and repair ordinals remain correct through repair and requested-change
                        revisions.
                      • Non-TTY stderr receives normalized Markdown; a stderr TTY receives terminal
                        formatting.
                      • The Make <Plan> emit or capture approved XMD source #722 automatic explanation is presented with no final invalid-draft
                        Elicitation and no Plan afterward.
                      • Cleared --verbose drafts and structured diagnostics appear in phase order on
                        stderr and nowhere in the artifact.
                      • A secret-containing verbose draft or diagnostic is neither displayed nor
                        appended; rejection completes teardown and produces no Plan.
                      • --journal exclusively creates the diagnostic file before the first Agent
                        turn and preserves a readable committed prefix after success, ordinary
                        failure, write failure, and secret-detection rejection.
                      • A rejected journal event is absent, and the journal contains no later
                        program-execution events.
                      • No-journal planning creates no diagnostic file.
                      • Ordinary bare and captured <Plan> remain free of command presentation.
                      • Existing exact-source, output exclusivity, cancellation, teardown, and sink
                        failure behavior remains unchanged.

                      Documentation and focused evidence

                      Add the presentation, verbose, secret-detection, and authorship-journal contract
                      to specs/plan-command-spec.md and the host/authorship lifecycle in
                      architecture.md. Update the affected command lifecycle and <Plan> sections
                      of specs/executable-mdx-spec.md, CLI grammar and help, and the relevant
                      component and command inventory. Preserve #722's post-teardown admission order
                      and #724's source-only command.

                      Focused feedback evidence:

                      deno task test \
                      packages/cli/tests/plan-cli.test.ts \
                      packages/cli/tests/plan-component.test.ts \
                      packages/cli/tests/plan-command-document.test.ts

                      The command-document suite owns progressive phase order, ordinals, verbose
                      blocks, and the automatic-explanation presentation. The component suite owns
                      the ordinary bare/captured negative controls. The CLI suite owns stderr/stdout
                      separation, TTY choice, grammar, journal creation and prefixes, secret rejection,
                      cancellation, teardown, and artifact-sink failures.

                      Add packages/cli/tests/plan-args.test.ts,
                      packages/cli/tests/syntax-cli.test.ts, and
                      packages/cli/tests/packaged-document.test.ts to the focused command when the
                      grammar, help, or packaged private declaration changes. Add a shared output- or
                      secret-middleware suite only if implementation changes that shared boundary;
                      using the existing boundary requires only Plan integration evidence.

                      After the focused cases pass, create the feedback commit and return its exact SHA
                      with every focused command run. Then run deno task test --changed=origin/main
                      on that revision. Do not wait for CI for feedback review.

                      Dependencies

                      Planning and prompt-quality review may proceed before those dependencies land.
                      Implementation starts from the exact accepted #724 head or merged result. This
                      story remains a related follow-up and does not block #725.

                      Out of scope

                      • Implicit or automatic execution of approved source.
                      • Public progress syntax or ordinary <Plan> presentation.
                      • Draft or diagnostic presentation without long-form --verbose.
                      • Authorship replay, resume, or a stable diagnostic projection.
                      • Changing post-teardown Plan admission.
                      • New XMD language primitives.
                      • Unrelated Quest: Preserve planned XMD programs for explicit execution #725 work.

                      Activity

                      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

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          Make xmd plan authorship observable during and after an invocation #676

                          Description

                          @taras

                          Story

                          As an operator, I want visible progress while xmd plan authors a program and
                          an optional diagnostic journal when I need lasting evidence, so a long or failed
                          planning invocation is understandable without contaminating the approved source.

                          Common paths

                          Ordinary planning reports readable Markdown progress on stderr while stdout
                          remains reserved for exact approved XMD source:

                          xmd plan "Prepare the release program."> release.md

                          Long-form verbose presentation adds generated drafts and structured XMD check
                          diagnostics after secret detection clears them:

                          xmd plan "Prepare the release program." --verbose

                          An exclusive authorship journal preserves diagnostic evidence:

                          xmd plan "Prepare the release program." --journal plan-authorship.jsonl

                          --verbose and --journal describe authorship only. They never observe a later
                          program execution because #724 makes xmd plan source-only.

                          Live presentation

                          The phase prose is authored in the packaged Plan.md beside the control flow it
                          describes. A private command-only presentation component emits it only for the
                          xmd plan surface. On the ordinary component surface it returns before
                          expanding its content.

                          Default progress covers:

                          • getting the available XMD components and constructs and preparing the
                            planning session;
                          • drafting the Plan, with the current attempt shown separately;
                          • checking and repairing a draft, including the bounded repair count;
                          • waiting for human review;
                          • revising after requested changes;
                          • closing the planning session and producing the final Plan from the approved
                            draft;
                          • authored Stop; and
                          • the automatic final explanation already owned by Make <Plan> emit or capture approved XMD source #722 when the tenth invalid
                            attempt exhausts its repairs.

                          Every phase appears before the potentially long operation it describes. The
                          host drains the command document's output while the producer is alive,
                          normalizes the Markdown prose, and applies terminal formatting only when stderr
                          is a TTY. Non-TTY stderr receives normalized Markdown progressively rather than
                          one synthesized report at the end.

                          Default progress never includes the request, draft source, diagnostics, review
                          feedback, Agent output, tool or provider output, or approved program source.
                          Approval and finalization may be reported when they occur, but presentation does
                          not claim stdout or --output delivery before final host validation and the
                          artifact sink succeed.

                          The command adapter renders no incidental prose. Ordinary bare <Plan> emits
                          only exact approved source, captured <Plan as="…"> binds those bytes and emits
                          nothing, and neither receives command progress.

                          Verbose authorship presentation

                          Only the long --verbose spelling is accepted. It adds two command-only blocks
                          to stderr:

                          • each generated draft after its Agent turn; and
                          • the exact structured diagnostics after a failed XMD draft check.

                          Both are provisional authorship material, never stdout or --output content.
                          They do not add the request, review feedback, tool output, provider chatter, or
                          approved source as separate presentation.

                          Verbose material is emitted only after the durable event that supplied it
                          passes the existing secret-detection boundary and commits. A rejected Agent
                          result or draft-check result creates no binding, so the private presentation
                          call holding that draft or diagnostics is never reached. The rejected material
                          is neither displayed nor persisted. Authorship fails, its complete scope tears
                          down, and no approved source reaches stdout or --output.

                          Help says:

                          --verbose show generated drafts and XMD check diagnostics on stderr
                          

                          The removed -V alias remains unsupported.

                          Authorship journal and secret detection

                          Only the long --journal <path> spelling is accepted. The host exclusively
                          creates that path before authorship and selects either its file-backed
                          DurableStream or a fresh in-memory stream when no journal was requested. It
                          passes that selected stream to the plan-command executeInstalled() call with
                          secret detection enabled.

                          Every live durable event crosses useSecretDetection() and its pre-append
                          serialized-event gate before the selected stream receives it. A cleared event is
                          appended in ordinary execution order. A rejected event is absent from the file
                          and the in-memory committed sequence, while every earlier complete JSONL entry
                          remains readable. Rejection fails authorship after complete teardown and writes
                          no approved source.

                          The journal is the existing raw durable-event sequence, not a curated or
                          separately versioned projection. It includes cleared Agent turns, draft checks,
                          review decisions, admission, and the terminal outcome that commits. It contains
                          no later program-execution events. xmd plan never opens the file as replay
                          input and the journal grants no resume authority.

                          A pre-existing journal path refuses before planning begins. A write failure
                          after authorship begins fails the invocation and leaves the previously committed
                          prefix readable. An invocation without --journal creates no diagnostic file.

                          Help says:

                          --journal <path> record the planning process as diagnostic JSONL (path must not exist)
                          Secret detection checks journal entries before they are recorded, but it may not catch every sensitive detail. The journal can contain prompts, drafts, and review answers.
                          

                          The removed -j alias remains unsupported.

                          Failure and teardown

                          Presentation consumption remains inside the command-document execution scope. A
                          stderr write failure stops consumption, cancels the producer, and completes all
                          provider, Prompt, Elicitation, session-directory, and execution teardown before
                          the command returns nonzero. It never attempts stdout or --output afterward;
                          stderr bytes already accepted by the host are not rolled back.

                          Cancellation, teardown failure, journal rejection, journal write failure, final
                          host validation failure, and artifact-sink failure retain their ordinary
                          diagnostics. No presentation claims final delivery before it succeeds.

                          Acceptance

                          • A slow successful invocation presents the phases progressively on stderr while
                            stdout or --output receives only byte-identical approved source.
                          • Draft and repair ordinals remain correct through repair and requested-change
                            revisions.
                          • Non-TTY stderr receives normalized Markdown; a stderr TTY receives terminal
                            formatting.
                          • The Make <Plan> emit or capture approved XMD source #722 automatic explanation is presented with no final invalid-draft
                            Elicitation and no Plan afterward.
                          • Cleared --verbose drafts and structured diagnostics appear in phase order on
                            stderr and nowhere in the artifact.
                          • A secret-containing verbose draft or diagnostic is neither displayed nor
                            appended; rejection completes teardown and produces no Plan.
                          • --journal exclusively creates the diagnostic file before the first Agent
                            turn and preserves a readable committed prefix after success, ordinary
                            failure, write failure, and secret-detection rejection.
                          • A rejected journal event is absent, and the journal contains no later
                            program-execution events.
                          • No-journal planning creates no diagnostic file.
                          • Ordinary bare and captured <Plan> remain free of command presentation.
                          • Existing exact-source, output exclusivity, cancellation, teardown, and sink
                            failure behavior remains unchanged.

                          Documentation and focused evidence

                          Add the presentation, verbose, secret-detection, and authorship-journal contract
                          to specs/plan-command-spec.md and the host/authorship lifecycle in
                          architecture.md. Update the affected command lifecycle and <Plan> sections
                          of specs/executable-mdx-spec.md, CLI grammar and help, and the relevant
                          component and command inventory. Preserve #722's post-teardown admission order
                          and #724's source-only command.

                          Focused feedback evidence:

                          deno task test \
                          packages/cli/tests/plan-cli.test.ts \
                          packages/cli/tests/plan-component.test.ts \
                          packages/cli/tests/plan-command-document.test.ts

                          The command-document suite owns progressive phase order, ordinals, verbose
                          blocks, and the automatic-explanation presentation. The component suite owns
                          the ordinary bare/captured negative controls. The CLI suite owns stderr/stdout
                          separation, TTY choice, grammar, journal creation and prefixes, secret rejection,
                          cancellation, teardown, and artifact-sink failures.

                          Add packages/cli/tests/plan-args.test.ts,
                          packages/cli/tests/syntax-cli.test.ts, and
                          packages/cli/tests/packaged-document.test.ts to the focused command when the
                          grammar, help, or packaged private declaration changes. Add a shared output- or
                          secret-middleware suite only if implementation changes that shared boundary;
                          using the existing boundary requires only Plan integration evidence.

                          After the focused cases pass, create the feedback commit and return its exact SHA
                          with every focused command run. Then run deno task test --changed=origin/main
                          on that revision. Do not wait for CI for feedback review.

                          Dependencies

                          Planning and prompt-quality review may proceed before those dependencies land.
                          Implementation starts from the exact accepted #724 head or merged result. This
                          story remains a related follow-up and does not block #725.

                          Out of scope

                          • Implicit or automatic execution of approved source.
                          • Public progress syntax or ordinary <Plan> presentation.
                          • Draft or diagnostic presentation without long-form --verbose.
                          • Authorship replay, resume, or a stable diagnostic projection.
                          • Changing post-teardown Plan admission.
                          • New XMD language primitives.
                          • Unrelated Quest: Preserve planned XMD programs for explicit execution #725 work.

                          Activity

                          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

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              Make xmd plan authorship observable during and after an invocation #676

                              Description

                              @taras

                              Story

                              As an operator, I want visible progress while xmd plan authors a program and
                              an optional diagnostic journal when I need lasting evidence, so a long or failed
                              planning invocation is understandable without contaminating the approved source.

                              Common paths

                              Ordinary planning reports readable Markdown progress on stderr while stdout
                              remains reserved for exact approved XMD source:

                              xmd plan "Prepare the release program."> release.md

                              Long-form verbose presentation adds generated drafts and structured XMD check
                              diagnostics after secret detection clears them:

                              xmd plan "Prepare the release program." --verbose

                              An exclusive authorship journal preserves diagnostic evidence:

                              xmd plan "Prepare the release program." --journal plan-authorship.jsonl

                              --verbose and --journal describe authorship only. They never observe a later
                              program execution because #724 makes xmd plan source-only.

                              Live presentation

                              The phase prose is authored in the packaged Plan.md beside the control flow it
                              describes. A private command-only presentation component emits it only for the
                              xmd plan surface. On the ordinary component surface it returns before
                              expanding its content.

                              Default progress covers:

                              • getting the available XMD components and constructs and preparing the
                                planning session;
                              • drafting the Plan, with the current attempt shown separately;
                              • checking and repairing a draft, including the bounded repair count;
                              • waiting for human review;
                              • revising after requested changes;
                              • closing the planning session and producing the final Plan from the approved
                                draft;
                              • authored Stop; and
                              • the automatic final explanation already owned by Make <Plan> emit or capture approved XMD source #722 when the tenth invalid
                                attempt exhausts its repairs.

                              Every phase appears before the potentially long operation it describes. The
                              host drains the command document's output while the producer is alive,
                              normalizes the Markdown prose, and applies terminal formatting only when stderr
                              is a TTY. Non-TTY stderr receives normalized Markdown progressively rather than
                              one synthesized report at the end.

                              Default progress never includes the request, draft source, diagnostics, review
                              feedback, Agent output, tool or provider output, or approved program source.
                              Approval and finalization may be reported when they occur, but presentation does
                              not claim stdout or --output delivery before final host validation and the
                              artifact sink succeed.

                              The command adapter renders no incidental prose. Ordinary bare <Plan> emits
                              only exact approved source, captured <Plan as="…"> binds those bytes and emits
                              nothing, and neither receives command progress.

                              Verbose authorship presentation

                              Only the long --verbose spelling is accepted. It adds two command-only blocks
                              to stderr:

                              • each generated draft after its Agent turn; and
                              • the exact structured diagnostics after a failed XMD draft check.

                              Both are provisional authorship material, never stdout or --output content.
                              They do not add the request, review feedback, tool output, provider chatter, or
                              approved source as separate presentation.

                              Verbose material is emitted only after the durable event that supplied it
                              passes the existing secret-detection boundary and commits. A rejected Agent
                              result or draft-check result creates no binding, so the private presentation
                              call holding that draft or diagnostics is never reached. The rejected material
                              is neither displayed nor persisted. Authorship fails, its complete scope tears
                              down, and no approved source reaches stdout or --output.

                              Help says:

                              --verbose show generated drafts and XMD check diagnostics on stderr
                              

                              The removed -V alias remains unsupported.

                              Authorship journal and secret detection

                              Only the long --journal <path> spelling is accepted. The host exclusively
                              creates that path before authorship and selects either its file-backed
                              DurableStream or a fresh in-memory stream when no journal was requested. It
                              passes that selected stream to the plan-command executeInstalled() call with
                              secret detection enabled.

                              Every live durable event crosses useSecretDetection() and its pre-append
                              serialized-event gate before the selected stream receives it. A cleared event is
                              appended in ordinary execution order. A rejected event is absent from the file
                              and the in-memory committed sequence, while every earlier complete JSONL entry
                              remains readable. Rejection fails authorship after complete teardown and writes
                              no approved source.

                              The journal is the existing raw durable-event sequence, not a curated or
                              separately versioned projection. It includes cleared Agent turns, draft checks,
                              review decisions, admission, and the terminal outcome that commits. It contains
                              no later program-execution events. xmd plan never opens the file as replay
                              input and the journal grants no resume authority.

                              A pre-existing journal path refuses before planning begins. A write failure
                              after authorship begins fails the invocation and leaves the previously committed
                              prefix readable. An invocation without --journal creates no diagnostic file.

                              Help says:

                              --journal <path> record the planning process as diagnostic JSONL (path must not exist)
                              Secret detection checks journal entries before they are recorded, but it may not catch every sensitive detail. The journal can contain prompts, drafts, and review answers.
                              

                              The removed -j alias remains unsupported.

                              Failure and teardown

                              Presentation consumption remains inside the command-document execution scope. A
                              stderr write failure stops consumption, cancels the producer, and completes all
                              provider, Prompt, Elicitation, session-directory, and execution teardown before
                              the command returns nonzero. It never attempts stdout or --output afterward;
                              stderr bytes already accepted by the host are not rolled back.

                              Cancellation, teardown failure, journal rejection, journal write failure, final
                              host validation failure, and artifact-sink failure retain their ordinary
                              diagnostics. No presentation claims final delivery before it succeeds.

                              Acceptance

                              • A slow successful invocation presents the phases progressively on stderr while
                                stdout or --output receives only byte-identical approved source.
                              • Draft and repair ordinals remain correct through repair and requested-change
                                revisions.
                              • Non-TTY stderr receives normalized Markdown; a stderr TTY receives terminal
                                formatting.
                              • The Make <Plan> emit or capture approved XMD source #722 automatic explanation is presented with no final invalid-draft
                                Elicitation and no Plan afterward.
                              • Cleared --verbose drafts and structured diagnostics appear in phase order on
                                stderr and nowhere in the artifact.
                              • A secret-containing verbose draft or diagnostic is neither displayed nor
                                appended; rejection completes teardown and produces no Plan.
                              • --journal exclusively creates the diagnostic file before the first Agent
                                turn and preserves a readable committed prefix after success, ordinary
                                failure, write failure, and secret-detection rejection.
                              • A rejected journal event is absent, and the journal contains no later
                                program-execution events.
                              • No-journal planning creates no diagnostic file.
                              • Ordinary bare and captured <Plan> remain free of command presentation.
                              • Existing exact-source, output exclusivity, cancellation, teardown, and sink
                                failure behavior remains unchanged.

                              Documentation and focused evidence

                              Add the presentation, verbose, secret-detection, and authorship-journal contract
                              to specs/plan-command-spec.md and the host/authorship lifecycle in
                              architecture.md. Update the affected command lifecycle and <Plan> sections
                              of specs/executable-mdx-spec.md, CLI grammar and help, and the relevant
                              component and command inventory. Preserve #722's post-teardown admission order
                              and #724's source-only command.

                              Focused feedback evidence:

                              deno task test \
                              packages/cli/tests/plan-cli.test.ts \
                              packages/cli/tests/plan-component.test.ts \
                              packages/cli/tests/plan-command-document.test.ts

                              The command-document suite owns progressive phase order, ordinals, verbose
                              blocks, and the automatic-explanation presentation. The component suite owns
                              the ordinary bare/captured negative controls. The CLI suite owns stderr/stdout
                              separation, TTY choice, grammar, journal creation and prefixes, secret rejection,
                              cancellation, teardown, and artifact-sink failures.

                              Add packages/cli/tests/plan-args.test.ts,
                              packages/cli/tests/syntax-cli.test.ts, and
                              packages/cli/tests/packaged-document.test.ts to the focused command when the
                              grammar, help, or packaged private declaration changes. Add a shared output- or
                              secret-middleware suite only if implementation changes that shared boundary;
                              using the existing boundary requires only Plan integration evidence.

                              After the focused cases pass, create the feedback commit and return its exact SHA
                              with every focused command run. Then run deno task test --changed=origin/main
                              on that revision. Do not wait for CI for feedback review.

                              Dependencies

                              Planning and prompt-quality review may proceed before those dependencies land.
                              Implementation starts from the exact accepted #724 head or merged result. This
                              story remains a related follow-up and does not block #725.

                              Out of scope

                              • Implicit or automatic execution of approved source.
                              • Public progress syntax or ordinary <Plan> presentation.
                              • Draft or diagnostic presentation without long-form --verbose.
                              • Authorship replay, resume, or a stable diagnostic projection.
                              • Changing post-teardown Plan admission.
                              • New XMD language primitives.
                              • Unrelated Quest: Preserve planned XMD programs for explicit execution #725 work.

                              Activity

                              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

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions