Run <Plan> with <TestAgent> in Markdown tests #728

Description

@taras

Story

As an Executable Markdown author, I want a Markdown test to run a document that
uses <Plan> with a deterministic test agent, so I can verify planning
composition without launching a live coding agent or opening an interactive
review form.

Common path

A test runs the document through the production-shaped run child and supplies
the child’s agent behavior and review answer as declarations:

<Testname="a document captures its approved Plan">
<Executionhost="run"target="./uses-plan.md"as="run">
<TestAgent> <TestAgent.Scenario session="planner" src="./agents/approved-plan.md" /></TestAgent><Answers> <Answer value={{ decision: "Approve" }} /></Answers><CollectOutput as="output" /><AssertEquals actual={run.result.ok} expected={true} /><AssertStringIncludes actual={output} expected="# Approved program" />
</Execution>
</Test>

The child document uses the ordinary public component and a session the
scenario can address:

<Plansession="planner"as="approved">Write the release program.</Plan>
Approved source: {approved}

Current gap

<Execution host="run"> already accepts <TestAgent> and <Answers> as
trusted child configuration. The child receives the controlled ACP provider,
controlled launcher, and ordinary run-profile Agent components. But its
packaged <Plan> declaration was built before that configuration was known and
closes over no production Agent stack. <PlanAuthorship> therefore refuses at
its Agent context check even though the child has exactly the deterministic provider
Markdown tests use for Agent integrations.

TypeScript can exercise <Plan> through a private harness, but no checked-in
Markdown test can exercise the author-facing component workflow.

Contract

A canonical <TestAgent> declaration on one <Execution host="run"> lets that
child’s trusted host supply the Plan Agent context with the controlled
provider it created. The declaration supplies detached scenario data only; no
provider, scope, Context value, Api handler, or authority crosses from the test
document.

The test Agent context preserves the production Plan boundary:

  • the controlled provider is installed inside <PlanAuthorship> for that Plan
    invocation, not inherited from the outer test or installed around the child;
  • the Plan system instruction, deny-all permission mode, empty MCP-server set,
    empty native-tool set, prompt-failure policy, and document-capability refusals
    remain the production ones;
  • the host owns an empty, test-private authorship root and removes it after the
    child settles, including named Plan session directories;
  • <Answers> supplies review decisions through the child’s existing
    non-delegating matcher provider, so no browser or person is reached;
  • the child uses the production run profile’s component catalog, includes,
    structural draft check, private Plan phases, output stream, journal selection,
    and teardown ordering; and
  • sibling children receive distinct providers, session state, authorship roots,
    and Plan declarations.

Only the canonical child declaration recognized by the testing harness grants
this test path. A repository component named TestAgent, a provider installed
by the test document, middleware, props, or an unconfigured run child cannot
make an Agent context available.

Without <TestAgent>, a child that writes <Plan> keeps the existing refusal
before an authorship directory, provider, Agent turn, or review exists. A direct
xmd test root remains the test profile and does not become a Plan authorship
host.

The production xmd run and xmd plan authorship policies are unchanged. This story
supplies deterministic testing authority, not a new runtime provider-selection
surface.

Acceptance and evidence

#CriterionDiscriminating evidence
PMT1Configured PlanA checked-in Markdown suite runs a child document containing <Plan session="planner" as="approved"> with one matching TestAgent scenario and one authored approval answer; the approved source reaches the child’s ordinary binding and output with no live Agent or browser.
PMT2Draft inertnessThe scripted approved source names an observable file effect; the Markdown test receives the source and proves that file was not created.
PMT3Missing configurationThe same child without <TestAgent> is refused for want of an Agent context before a worker, directory, Agent turn, review, source, or binding exists; it does not fall through to the run profile’s live provider.
PMT4Trusted installationTypeScript host evidence records that the Plan invocation received the controlled provider under the production Plan restrictions and a test-private authorship root; changing any restriction or supplying the provider from document state fails the case.
PMT5Isolation and teardownTwo configured sibling children use distinct provider/session state and authorship roots, and both roots are absent after success, failure, and cancellation.
PMT6Canonical declaration onlyA repository TestAgent component and an unrecognized declaration supply no Plan Agent context and reach no child Agent work.
PMT7Profile boundariesA direct test root still cannot use this authority, while an ordinary production run keeps its existing ACPX Agent context and behavior.

The author-facing successful path and inert-source assertion live in
packages/cli/tests/document-suites/plan/Plan.test.md, launched by the same thin
Markdown-tier runner pattern as the other CLI document suites. Host-only
provider construction, authority, early refusal, isolation, and teardown remain
in packages/cli/tests/testing-execution-host.test.ts because a document cannot
inspect or construct those internals.

Focused feedback evidence:

deno task test \
packages/cli/tests/document-suites/plan/plan-markdown.test.ts \
packages/cli/tests/testing-execution-host.test.ts \
packages/cli/tests/plan-component.test.ts

After the focused cases pass, create the feedback commit and run
deno task test --changed. The complete runtime suites and required checks
remain delivery evidence.

Documentation

Update the testing-host and <Plan> boundaries in architecture.md, the
declared <Plan> and testing-profile sections of
specs/executable-mdx-spec.md, and the deterministic child-Agent and authority
sections of specs/testing-spec.md. Describe the test-only Agent context as present
behavior and keep production and test authority distinct.

Dependencies and delivery order

Out of scope

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

    enhancementNew feature or request

    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 \u003cpre\u003e\u003ccode\u003e 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

      Run <Plan> with <TestAgent> in Markdown tests #728

      Description

      @taras

      Story

      As an Executable Markdown author, I want a Markdown test to run a document that
      uses <Plan> with a deterministic test agent, so I can verify planning
      composition without launching a live coding agent or opening an interactive
      review form.

      Common path

      A test runs the document through the production-shaped run child and supplies
      the child’s agent behavior and review answer as declarations:

      <Testname="a document captures its approved Plan">
      <Executionhost="run"target="./uses-plan.md"as="run">
      <TestAgent> <TestAgent.Scenario session="planner" src="./agents/approved-plan.md" /></TestAgent><Answers> <Answer value={{ decision: "Approve" }} /></Answers><CollectOutput as="output" /><AssertEquals actual={run.result.ok} expected={true} /><AssertStringIncludes actual={output} expected="# Approved program" />
      </Execution>
      </Test>

      The child document uses the ordinary public component and a session the
      scenario can address:

      <Plansession="planner"as="approved">Write the release program.</Plan>
      Approved source: {approved}

      Current gap

      <Execution host="run"> already accepts <TestAgent> and <Answers> as
      trusted child configuration. The child receives the controlled ACP provider,
      controlled launcher, and ordinary run-profile Agent components. But its
      packaged <Plan> declaration was built before that configuration was known and
      closes over no production Agent stack. <PlanAuthorship> therefore refuses at
      its Agent context check even though the child has exactly the deterministic provider
      Markdown tests use for Agent integrations.

      TypeScript can exercise <Plan> through a private harness, but no checked-in
      Markdown test can exercise the author-facing component workflow.

      Contract

      A canonical <TestAgent> declaration on one <Execution host="run"> lets that
      child’s trusted host supply the Plan Agent context with the controlled
      provider it created. The declaration supplies detached scenario data only; no
      provider, scope, Context value, Api handler, or authority crosses from the test
      document.

      The test Agent context preserves the production Plan boundary:

      • the controlled provider is installed inside <PlanAuthorship> for that Plan
        invocation, not inherited from the outer test or installed around the child;
      • the Plan system instruction, deny-all permission mode, empty MCP-server set,
        empty native-tool set, prompt-failure policy, and document-capability refusals
        remain the production ones;
      • the host owns an empty, test-private authorship root and removes it after the
        child settles, including named Plan session directories;
      • <Answers> supplies review decisions through the child’s existing
        non-delegating matcher provider, so no browser or person is reached;
      • the child uses the production run profile’s component catalog, includes,
        structural draft check, private Plan phases, output stream, journal selection,
        and teardown ordering; and
      • sibling children receive distinct providers, session state, authorship roots,
        and Plan declarations.

      Only the canonical child declaration recognized by the testing harness grants
      this test path. A repository component named TestAgent, a provider installed
      by the test document, middleware, props, or an unconfigured run child cannot
      make an Agent context available.

      Without <TestAgent>, a child that writes <Plan> keeps the existing refusal
      before an authorship directory, provider, Agent turn, or review exists. A direct
      xmd test root remains the test profile and does not become a Plan authorship
      host.

      The production xmd run and xmd plan authorship policies are unchanged. This story
      supplies deterministic testing authority, not a new runtime provider-selection
      surface.

      Acceptance and evidence

      #CriterionDiscriminating evidence
      PMT1Configured PlanA checked-in Markdown suite runs a child document containing <Plan session="planner" as="approved"> with one matching TestAgent scenario and one authored approval answer; the approved source reaches the child’s ordinary binding and output with no live Agent or browser.
      PMT2Draft inertnessThe scripted approved source names an observable file effect; the Markdown test receives the source and proves that file was not created.
      PMT3Missing configurationThe same child without <TestAgent> is refused for want of an Agent context before a worker, directory, Agent turn, review, source, or binding exists; it does not fall through to the run profile’s live provider.
      PMT4Trusted installationTypeScript host evidence records that the Plan invocation received the controlled provider under the production Plan restrictions and a test-private authorship root; changing any restriction or supplying the provider from document state fails the case.
      PMT5Isolation and teardownTwo configured sibling children use distinct provider/session state and authorship roots, and both roots are absent after success, failure, and cancellation.
      PMT6Canonical declaration onlyA repository TestAgent component and an unrecognized declaration supply no Plan Agent context and reach no child Agent work.
      PMT7Profile boundariesA direct test root still cannot use this authority, while an ordinary production run keeps its existing ACPX Agent context and behavior.

      The author-facing successful path and inert-source assertion live in
      packages/cli/tests/document-suites/plan/Plan.test.md, launched by the same thin
      Markdown-tier runner pattern as the other CLI document suites. Host-only
      provider construction, authority, early refusal, isolation, and teardown remain
      in packages/cli/tests/testing-execution-host.test.ts because a document cannot
      inspect or construct those internals.

      Focused feedback evidence:

      deno task test \
      packages/cli/tests/document-suites/plan/plan-markdown.test.ts \
      packages/cli/tests/testing-execution-host.test.ts \
      packages/cli/tests/plan-component.test.ts

      After the focused cases pass, create the feedback commit and run
      deno task test --changed. The complete runtime suites and required checks
      remain delivery evidence.

      Documentation

      Update the testing-host and <Plan> boundaries in architecture.md, the
      declared <Plan> and testing-profile sections of
      specs/executable-mdx-spec.md, and the deterministic child-Agent and authority
      sections of specs/testing-spec.md. Describe the test-only Agent context as present
      behavior and keep production and test authority distinct.

      Dependencies and delivery order

      Out of scope

      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

        enhancementNew feature or request

        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

          Run <Plan> with <TestAgent> in Markdown tests #728

          Description

          @taras

          Story

          As an Executable Markdown author, I want a Markdown test to run a document that
          uses <Plan> with a deterministic test agent, so I can verify planning
          composition without launching a live coding agent or opening an interactive
          review form.

          Common path

          A test runs the document through the production-shaped run child and supplies
          the child’s agent behavior and review answer as declarations:

          <Testname="a document captures its approved Plan">
          <Executionhost="run"target="./uses-plan.md"as="run">
          <TestAgent> <TestAgent.Scenario session="planner" src="./agents/approved-plan.md" /></TestAgent><Answers> <Answer value={{ decision: "Approve" }} /></Answers><CollectOutput as="output" /><AssertEquals actual={run.result.ok} expected={true} /><AssertStringIncludes actual={output} expected="# Approved program" />
          </Execution>
          </Test>

          The child document uses the ordinary public component and a session the
          scenario can address:

          <Plansession="planner"as="approved">Write the release program.</Plan>
          Approved source: {approved}

          Current gap

          <Execution host="run"> already accepts <TestAgent> and <Answers> as
          trusted child configuration. The child receives the controlled ACP provider,
          controlled launcher, and ordinary run-profile Agent components. But its
          packaged <Plan> declaration was built before that configuration was known and
          closes over no production Agent stack. <PlanAuthorship> therefore refuses at
          its Agent context check even though the child has exactly the deterministic provider
          Markdown tests use for Agent integrations.

          TypeScript can exercise <Plan> through a private harness, but no checked-in
          Markdown test can exercise the author-facing component workflow.

          Contract

          A canonical <TestAgent> declaration on one <Execution host="run"> lets that
          child’s trusted host supply the Plan Agent context with the controlled
          provider it created. The declaration supplies detached scenario data only; no
          provider, scope, Context value, Api handler, or authority crosses from the test
          document.

          The test Agent context preserves the production Plan boundary:

          • the controlled provider is installed inside <PlanAuthorship> for that Plan
            invocation, not inherited from the outer test or installed around the child;
          • the Plan system instruction, deny-all permission mode, empty MCP-server set,
            empty native-tool set, prompt-failure policy, and document-capability refusals
            remain the production ones;
          • the host owns an empty, test-private authorship root and removes it after the
            child settles, including named Plan session directories;
          • <Answers> supplies review decisions through the child’s existing
            non-delegating matcher provider, so no browser or person is reached;
          • the child uses the production run profile’s component catalog, includes,
            structural draft check, private Plan phases, output stream, journal selection,
            and teardown ordering; and
          • sibling children receive distinct providers, session state, authorship roots,
            and Plan declarations.

          Only the canonical child declaration recognized by the testing harness grants
          this test path. A repository component named TestAgent, a provider installed
          by the test document, middleware, props, or an unconfigured run child cannot
          make an Agent context available.

          Without <TestAgent>, a child that writes <Plan> keeps the existing refusal
          before an authorship directory, provider, Agent turn, or review exists. A direct
          xmd test root remains the test profile and does not become a Plan authorship
          host.

          The production xmd run and xmd plan authorship policies are unchanged. This story
          supplies deterministic testing authority, not a new runtime provider-selection
          surface.

          Acceptance and evidence

          #CriterionDiscriminating evidence
          PMT1Configured PlanA checked-in Markdown suite runs a child document containing <Plan session="planner" as="approved"> with one matching TestAgent scenario and one authored approval answer; the approved source reaches the child’s ordinary binding and output with no live Agent or browser.
          PMT2Draft inertnessThe scripted approved source names an observable file effect; the Markdown test receives the source and proves that file was not created.
          PMT3Missing configurationThe same child without <TestAgent> is refused for want of an Agent context before a worker, directory, Agent turn, review, source, or binding exists; it does not fall through to the run profile’s live provider.
          PMT4Trusted installationTypeScript host evidence records that the Plan invocation received the controlled provider under the production Plan restrictions and a test-private authorship root; changing any restriction or supplying the provider from document state fails the case.
          PMT5Isolation and teardownTwo configured sibling children use distinct provider/session state and authorship roots, and both roots are absent after success, failure, and cancellation.
          PMT6Canonical declaration onlyA repository TestAgent component and an unrecognized declaration supply no Plan Agent context and reach no child Agent work.
          PMT7Profile boundariesA direct test root still cannot use this authority, while an ordinary production run keeps its existing ACPX Agent context and behavior.

          The author-facing successful path and inert-source assertion live in
          packages/cli/tests/document-suites/plan/Plan.test.md, launched by the same thin
          Markdown-tier runner pattern as the other CLI document suites. Host-only
          provider construction, authority, early refusal, isolation, and teardown remain
          in packages/cli/tests/testing-execution-host.test.ts because a document cannot
          inspect or construct those internals.

          Focused feedback evidence:

          deno task test \
          packages/cli/tests/document-suites/plan/plan-markdown.test.ts \
          packages/cli/tests/testing-execution-host.test.ts \
          packages/cli/tests/plan-component.test.ts

          After the focused cases pass, create the feedback commit and run
          deno task test --changed. The complete runtime suites and required checks
          remain delivery evidence.

          Documentation

          Update the testing-host and <Plan> boundaries in architecture.md, the
          declared <Plan> and testing-profile sections of
          specs/executable-mdx-spec.md, and the deterministic child-Agent and authority
          sections of specs/testing-spec.md. Describe the test-only Agent context as present
          behavior and keep production and test authority distinct.

          Dependencies and delivery order

          Out of scope

          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

            enhancementNew feature or request

            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 \u003e 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

              Run <Plan> with <TestAgent> in Markdown tests #728

              Description

              @taras

              Story

              As an Executable Markdown author, I want a Markdown test to run a document that
              uses <Plan> with a deterministic test agent, so I can verify planning
              composition without launching a live coding agent or opening an interactive
              review form.

              Common path

              A test runs the document through the production-shaped run child and supplies
              the child’s agent behavior and review answer as declarations:

              <Testname="a document captures its approved Plan">
              <Executionhost="run"target="./uses-plan.md"as="run">
              <TestAgent> <TestAgent.Scenario session="planner" src="./agents/approved-plan.md" /></TestAgent><Answers> <Answer value={{ decision: "Approve" }} /></Answers><CollectOutput as="output" /><AssertEquals actual={run.result.ok} expected={true} /><AssertStringIncludes actual={output} expected="# Approved program" />
              </Execution>
              </Test>

              The child document uses the ordinary public component and a session the
              scenario can address:

              <Plansession="planner"as="approved">Write the release program.</Plan>
              Approved source: {approved}

              Current gap

              <Execution host="run"> already accepts <TestAgent> and <Answers> as
              trusted child configuration. The child receives the controlled ACP provider,
              controlled launcher, and ordinary run-profile Agent components. But its
              packaged <Plan> declaration was built before that configuration was known and
              closes over no production Agent stack. <PlanAuthorship> therefore refuses at
              its Agent context check even though the child has exactly the deterministic provider
              Markdown tests use for Agent integrations.

              TypeScript can exercise <Plan> through a private harness, but no checked-in
              Markdown test can exercise the author-facing component workflow.

              Contract

              A canonical <TestAgent> declaration on one <Execution host="run"> lets that
              child’s trusted host supply the Plan Agent context with the controlled
              provider it created. The declaration supplies detached scenario data only; no
              provider, scope, Context value, Api handler, or authority crosses from the test
              document.

              The test Agent context preserves the production Plan boundary:

              • the controlled provider is installed inside <PlanAuthorship> for that Plan
                invocation, not inherited from the outer test or installed around the child;
              • the Plan system instruction, deny-all permission mode, empty MCP-server set,
                empty native-tool set, prompt-failure policy, and document-capability refusals
                remain the production ones;
              • the host owns an empty, test-private authorship root and removes it after the
                child settles, including named Plan session directories;
              • <Answers> supplies review decisions through the child’s existing
                non-delegating matcher provider, so no browser or person is reached;
              • the child uses the production run profile’s component catalog, includes,
                structural draft check, private Plan phases, output stream, journal selection,
                and teardown ordering; and
              • sibling children receive distinct providers, session state, authorship roots,
                and Plan declarations.

              Only the canonical child declaration recognized by the testing harness grants
              this test path. A repository component named TestAgent, a provider installed
              by the test document, middleware, props, or an unconfigured run child cannot
              make an Agent context available.

              Without <TestAgent>, a child that writes <Plan> keeps the existing refusal
              before an authorship directory, provider, Agent turn, or review exists. A direct
              xmd test root remains the test profile and does not become a Plan authorship
              host.

              The production xmd run and xmd plan authorship policies are unchanged. This story
              supplies deterministic testing authority, not a new runtime provider-selection
              surface.

              Acceptance and evidence

              #CriterionDiscriminating evidence
              PMT1Configured PlanA checked-in Markdown suite runs a child document containing <Plan session="planner" as="approved"> with one matching TestAgent scenario and one authored approval answer; the approved source reaches the child’s ordinary binding and output with no live Agent or browser.
              PMT2Draft inertnessThe scripted approved source names an observable file effect; the Markdown test receives the source and proves that file was not created.
              PMT3Missing configurationThe same child without <TestAgent> is refused for want of an Agent context before a worker, directory, Agent turn, review, source, or binding exists; it does not fall through to the run profile’s live provider.
              PMT4Trusted installationTypeScript host evidence records that the Plan invocation received the controlled provider under the production Plan restrictions and a test-private authorship root; changing any restriction or supplying the provider from document state fails the case.
              PMT5Isolation and teardownTwo configured sibling children use distinct provider/session state and authorship roots, and both roots are absent after success, failure, and cancellation.
              PMT6Canonical declaration onlyA repository TestAgent component and an unrecognized declaration supply no Plan Agent context and reach no child Agent work.
              PMT7Profile boundariesA direct test root still cannot use this authority, while an ordinary production run keeps its existing ACPX Agent context and behavior.

              The author-facing successful path and inert-source assertion live in
              packages/cli/tests/document-suites/plan/Plan.test.md, launched by the same thin
              Markdown-tier runner pattern as the other CLI document suites. Host-only
              provider construction, authority, early refusal, isolation, and teardown remain
              in packages/cli/tests/testing-execution-host.test.ts because a document cannot
              inspect or construct those internals.

              Focused feedback evidence:

              deno task test \
              packages/cli/tests/document-suites/plan/plan-markdown.test.ts \
              packages/cli/tests/testing-execution-host.test.ts \
              packages/cli/tests/plan-component.test.ts

              After the focused cases pass, create the feedback commit and run
              deno task test --changed. The complete runtime suites and required checks
              remain delivery evidence.

              Documentation

              Update the testing-host and <Plan> boundaries in architecture.md, the
              declared <Plan> and testing-profile sections of
              specs/executable-mdx-spec.md, and the deterministic child-Agent and authority
              sections of specs/testing-spec.md. Describe the test-only Agent context as present
              behavior and keep production and test authority distinct.

              Dependencies and delivery order

              Out of scope

              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

                enhancementNew feature or request

                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

                  Run <Plan> with <TestAgent> in Markdown tests #728

                  Description

                  @taras

                  Story

                  As an Executable Markdown author, I want a Markdown test to run a document that
                  uses <Plan> with a deterministic test agent, so I can verify planning
                  composition without launching a live coding agent or opening an interactive
                  review form.

                  Common path

                  A test runs the document through the production-shaped run child and supplies
                  the child’s agent behavior and review answer as declarations:

                  <Testname="a document captures its approved Plan">
                  <Executionhost="run"target="./uses-plan.md"as="run">
                  <TestAgent> <TestAgent.Scenario session="planner" src="./agents/approved-plan.md" /></TestAgent><Answers> <Answer value={{ decision: "Approve" }} /></Answers><CollectOutput as="output" /><AssertEquals actual={run.result.ok} expected={true} /><AssertStringIncludes actual={output} expected="# Approved program" />
                  </Execution>
                  </Test>

                  The child document uses the ordinary public component and a session the
                  scenario can address:

                  <Plansession="planner"as="approved">Write the release program.</Plan>
                  Approved source: {approved}

                  Current gap

                  <Execution host="run"> already accepts <TestAgent> and <Answers> as
                  trusted child configuration. The child receives the controlled ACP provider,
                  controlled launcher, and ordinary run-profile Agent components. But its
                  packaged <Plan> declaration was built before that configuration was known and
                  closes over no production Agent stack. <PlanAuthorship> therefore refuses at
                  its Agent context check even though the child has exactly the deterministic provider
                  Markdown tests use for Agent integrations.

                  TypeScript can exercise <Plan> through a private harness, but no checked-in
                  Markdown test can exercise the author-facing component workflow.

                  Contract

                  A canonical <TestAgent> declaration on one <Execution host="run"> lets that
                  child’s trusted host supply the Plan Agent context with the controlled
                  provider it created. The declaration supplies detached scenario data only; no
                  provider, scope, Context value, Api handler, or authority crosses from the test
                  document.

                  The test Agent context preserves the production Plan boundary:

                  • the controlled provider is installed inside <PlanAuthorship> for that Plan
                    invocation, not inherited from the outer test or installed around the child;
                  • the Plan system instruction, deny-all permission mode, empty MCP-server set,
                    empty native-tool set, prompt-failure policy, and document-capability refusals
                    remain the production ones;
                  • the host owns an empty, test-private authorship root and removes it after the
                    child settles, including named Plan session directories;
                  • <Answers> supplies review decisions through the child’s existing
                    non-delegating matcher provider, so no browser or person is reached;
                  • the child uses the production run profile’s component catalog, includes,
                    structural draft check, private Plan phases, output stream, journal selection,
                    and teardown ordering; and
                  • sibling children receive distinct providers, session state, authorship roots,
                    and Plan declarations.

                  Only the canonical child declaration recognized by the testing harness grants
                  this test path. A repository component named TestAgent, a provider installed
                  by the test document, middleware, props, or an unconfigured run child cannot
                  make an Agent context available.

                  Without <TestAgent>, a child that writes <Plan> keeps the existing refusal
                  before an authorship directory, provider, Agent turn, or review exists. A direct
                  xmd test root remains the test profile and does not become a Plan authorship
                  host.

                  The production xmd run and xmd plan authorship policies are unchanged. This story
                  supplies deterministic testing authority, not a new runtime provider-selection
                  surface.

                  Acceptance and evidence

                  #CriterionDiscriminating evidence
                  PMT1Configured PlanA checked-in Markdown suite runs a child document containing <Plan session="planner" as="approved"> with one matching TestAgent scenario and one authored approval answer; the approved source reaches the child’s ordinary binding and output with no live Agent or browser.
                  PMT2Draft inertnessThe scripted approved source names an observable file effect; the Markdown test receives the source and proves that file was not created.
                  PMT3Missing configurationThe same child without <TestAgent> is refused for want of an Agent context before a worker, directory, Agent turn, review, source, or binding exists; it does not fall through to the run profile’s live provider.
                  PMT4Trusted installationTypeScript host evidence records that the Plan invocation received the controlled provider under the production Plan restrictions and a test-private authorship root; changing any restriction or supplying the provider from document state fails the case.
                  PMT5Isolation and teardownTwo configured sibling children use distinct provider/session state and authorship roots, and both roots are absent after success, failure, and cancellation.
                  PMT6Canonical declaration onlyA repository TestAgent component and an unrecognized declaration supply no Plan Agent context and reach no child Agent work.
                  PMT7Profile boundariesA direct test root still cannot use this authority, while an ordinary production run keeps its existing ACPX Agent context and behavior.

                  The author-facing successful path and inert-source assertion live in
                  packages/cli/tests/document-suites/plan/Plan.test.md, launched by the same thin
                  Markdown-tier runner pattern as the other CLI document suites. Host-only
                  provider construction, authority, early refusal, isolation, and teardown remain
                  in packages/cli/tests/testing-execution-host.test.ts because a document cannot
                  inspect or construct those internals.

                  Focused feedback evidence:

                  deno task test \
                  packages/cli/tests/document-suites/plan/plan-markdown.test.ts \
                  packages/cli/tests/testing-execution-host.test.ts \
                  packages/cli/tests/plan-component.test.ts

                  After the focused cases pass, create the feedback commit and run
                  deno task test --changed. The complete runtime suites and required checks
                  remain delivery evidence.

                  Documentation

                  Update the testing-host and <Plan> boundaries in architecture.md, the
                  declared <Plan> and testing-profile sections of
                  specs/executable-mdx-spec.md, and the deterministic child-Agent and authority
                  sections of specs/testing-spec.md. Describe the test-only Agent context as present
                  behavior and keep production and test authority distinct.

                  Dependencies and delivery order

                  Out of scope

                  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

                    enhancementNew feature or request

                    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

                      Run <Plan> with <TestAgent> in Markdown tests #728

                      Description

                      @taras

                      Story

                      As an Executable Markdown author, I want a Markdown test to run a document that
                      uses <Plan> with a deterministic test agent, so I can verify planning
                      composition without launching a live coding agent or opening an interactive
                      review form.

                      Common path

                      A test runs the document through the production-shaped run child and supplies
                      the child’s agent behavior and review answer as declarations:

                      <Testname="a document captures its approved Plan">
                      <Executionhost="run"target="./uses-plan.md"as="run">
                      <TestAgent> <TestAgent.Scenario session="planner" src="./agents/approved-plan.md" /></TestAgent><Answers> <Answer value={{ decision: "Approve" }} /></Answers><CollectOutput as="output" /><AssertEquals actual={run.result.ok} expected={true} /><AssertStringIncludes actual={output} expected="# Approved program" />
                      </Execution>
                      </Test>

                      The child document uses the ordinary public component and a session the
                      scenario can address:

                      <Plansession="planner"as="approved">Write the release program.</Plan>
                      Approved source: {approved}

                      Current gap

                      <Execution host="run"> already accepts <TestAgent> and <Answers> as
                      trusted child configuration. The child receives the controlled ACP provider,
                      controlled launcher, and ordinary run-profile Agent components. But its
                      packaged <Plan> declaration was built before that configuration was known and
                      closes over no production Agent stack. <PlanAuthorship> therefore refuses at
                      its Agent context check even though the child has exactly the deterministic provider
                      Markdown tests use for Agent integrations.

                      TypeScript can exercise <Plan> through a private harness, but no checked-in
                      Markdown test can exercise the author-facing component workflow.

                      Contract

                      A canonical <TestAgent> declaration on one <Execution host="run"> lets that
                      child’s trusted host supply the Plan Agent context with the controlled
                      provider it created. The declaration supplies detached scenario data only; no
                      provider, scope, Context value, Api handler, or authority crosses from the test
                      document.

                      The test Agent context preserves the production Plan boundary:

                      • the controlled provider is installed inside <PlanAuthorship> for that Plan
                        invocation, not inherited from the outer test or installed around the child;
                      • the Plan system instruction, deny-all permission mode, empty MCP-server set,
                        empty native-tool set, prompt-failure policy, and document-capability refusals
                        remain the production ones;
                      • the host owns an empty, test-private authorship root and removes it after the
                        child settles, including named Plan session directories;
                      • <Answers> supplies review decisions through the child’s existing
                        non-delegating matcher provider, so no browser or person is reached;
                      • the child uses the production run profile’s component catalog, includes,
                        structural draft check, private Plan phases, output stream, journal selection,
                        and teardown ordering; and
                      • sibling children receive distinct providers, session state, authorship roots,
                        and Plan declarations.

                      Only the canonical child declaration recognized by the testing harness grants
                      this test path. A repository component named TestAgent, a provider installed
                      by the test document, middleware, props, or an unconfigured run child cannot
                      make an Agent context available.

                      Without <TestAgent>, a child that writes <Plan> keeps the existing refusal
                      before an authorship directory, provider, Agent turn, or review exists. A direct
                      xmd test root remains the test profile and does not become a Plan authorship
                      host.

                      The production xmd run and xmd plan authorship policies are unchanged. This story
                      supplies deterministic testing authority, not a new runtime provider-selection
                      surface.

                      Acceptance and evidence

                      #CriterionDiscriminating evidence
                      PMT1Configured PlanA checked-in Markdown suite runs a child document containing <Plan session="planner" as="approved"> with one matching TestAgent scenario and one authored approval answer; the approved source reaches the child’s ordinary binding and output with no live Agent or browser.
                      PMT2Draft inertnessThe scripted approved source names an observable file effect; the Markdown test receives the source and proves that file was not created.
                      PMT3Missing configurationThe same child without <TestAgent> is refused for want of an Agent context before a worker, directory, Agent turn, review, source, or binding exists; it does not fall through to the run profile’s live provider.
                      PMT4Trusted installationTypeScript host evidence records that the Plan invocation received the controlled provider under the production Plan restrictions and a test-private authorship root; changing any restriction or supplying the provider from document state fails the case.
                      PMT5Isolation and teardownTwo configured sibling children use distinct provider/session state and authorship roots, and both roots are absent after success, failure, and cancellation.
                      PMT6Canonical declaration onlyA repository TestAgent component and an unrecognized declaration supply no Plan Agent context and reach no child Agent work.
                      PMT7Profile boundariesA direct test root still cannot use this authority, while an ordinary production run keeps its existing ACPX Agent context and behavior.

                      The author-facing successful path and inert-source assertion live in
                      packages/cli/tests/document-suites/plan/Plan.test.md, launched by the same thin
                      Markdown-tier runner pattern as the other CLI document suites. Host-only
                      provider construction, authority, early refusal, isolation, and teardown remain
                      in packages/cli/tests/testing-execution-host.test.ts because a document cannot
                      inspect or construct those internals.

                      Focused feedback evidence:

                      deno task test \
                      packages/cli/tests/document-suites/plan/plan-markdown.test.ts \
                      packages/cli/tests/testing-execution-host.test.ts \
                      packages/cli/tests/plan-component.test.ts

                      After the focused cases pass, create the feedback commit and run
                      deno task test --changed. The complete runtime suites and required checks
                      remain delivery evidence.

                      Documentation

                      Update the testing-host and <Plan> boundaries in architecture.md, the
                      declared <Plan> and testing-profile sections of
                      specs/executable-mdx-spec.md, and the deterministic child-Agent and authority
                      sections of specs/testing-spec.md. Describe the test-only Agent context as present
                      behavior and keep production and test authority distinct.

                      Dependencies and delivery order

                      Out of scope

                      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

                        enhancementNew feature or request

                        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

                          Run <Plan> with <TestAgent> in Markdown tests #728

                          Description

                          @taras

                          Story

                          As an Executable Markdown author, I want a Markdown test to run a document that
                          uses <Plan> with a deterministic test agent, so I can verify planning
                          composition without launching a live coding agent or opening an interactive
                          review form.

                          Common path

                          A test runs the document through the production-shaped run child and supplies
                          the child’s agent behavior and review answer as declarations:

                          <Testname="a document captures its approved Plan">
                          <Executionhost="run"target="./uses-plan.md"as="run">
                          <TestAgent> <TestAgent.Scenario session="planner" src="./agents/approved-plan.md" /></TestAgent><Answers> <Answer value={{ decision: "Approve" }} /></Answers><CollectOutput as="output" /><AssertEquals actual={run.result.ok} expected={true} /><AssertStringIncludes actual={output} expected="# Approved program" />
                          </Execution>
                          </Test>

                          The child document uses the ordinary public component and a session the
                          scenario can address:

                          <Plansession="planner"as="approved">Write the release program.</Plan>
                          Approved source: {approved}

                          Current gap

                          <Execution host="run"> already accepts <TestAgent> and <Answers> as
                          trusted child configuration. The child receives the controlled ACP provider,
                          controlled launcher, and ordinary run-profile Agent components. But its
                          packaged <Plan> declaration was built before that configuration was known and
                          closes over no production Agent stack. <PlanAuthorship> therefore refuses at
                          its Agent context check even though the child has exactly the deterministic provider
                          Markdown tests use for Agent integrations.

                          TypeScript can exercise <Plan> through a private harness, but no checked-in
                          Markdown test can exercise the author-facing component workflow.

                          Contract

                          A canonical <TestAgent> declaration on one <Execution host="run"> lets that
                          child’s trusted host supply the Plan Agent context with the controlled
                          provider it created. The declaration supplies detached scenario data only; no
                          provider, scope, Context value, Api handler, or authority crosses from the test
                          document.

                          The test Agent context preserves the production Plan boundary:

                          • the controlled provider is installed inside <PlanAuthorship> for that Plan
                            invocation, not inherited from the outer test or installed around the child;
                          • the Plan system instruction, deny-all permission mode, empty MCP-server set,
                            empty native-tool set, prompt-failure policy, and document-capability refusals
                            remain the production ones;
                          • the host owns an empty, test-private authorship root and removes it after the
                            child settles, including named Plan session directories;
                          • <Answers> supplies review decisions through the child’s existing
                            non-delegating matcher provider, so no browser or person is reached;
                          • the child uses the production run profile’s component catalog, includes,
                            structural draft check, private Plan phases, output stream, journal selection,
                            and teardown ordering; and
                          • sibling children receive distinct providers, session state, authorship roots,
                            and Plan declarations.

                          Only the canonical child declaration recognized by the testing harness grants
                          this test path. A repository component named TestAgent, a provider installed
                          by the test document, middleware, props, or an unconfigured run child cannot
                          make an Agent context available.

                          Without <TestAgent>, a child that writes <Plan> keeps the existing refusal
                          before an authorship directory, provider, Agent turn, or review exists. A direct
                          xmd test root remains the test profile and does not become a Plan authorship
                          host.

                          The production xmd run and xmd plan authorship policies are unchanged. This story
                          supplies deterministic testing authority, not a new runtime provider-selection
                          surface.

                          Acceptance and evidence

                          #CriterionDiscriminating evidence
                          PMT1Configured PlanA checked-in Markdown suite runs a child document containing <Plan session="planner" as="approved"> with one matching TestAgent scenario and one authored approval answer; the approved source reaches the child’s ordinary binding and output with no live Agent or browser.
                          PMT2Draft inertnessThe scripted approved source names an observable file effect; the Markdown test receives the source and proves that file was not created.
                          PMT3Missing configurationThe same child without <TestAgent> is refused for want of an Agent context before a worker, directory, Agent turn, review, source, or binding exists; it does not fall through to the run profile’s live provider.
                          PMT4Trusted installationTypeScript host evidence records that the Plan invocation received the controlled provider under the production Plan restrictions and a test-private authorship root; changing any restriction or supplying the provider from document state fails the case.
                          PMT5Isolation and teardownTwo configured sibling children use distinct provider/session state and authorship roots, and both roots are absent after success, failure, and cancellation.
                          PMT6Canonical declaration onlyA repository TestAgent component and an unrecognized declaration supply no Plan Agent context and reach no child Agent work.
                          PMT7Profile boundariesA direct test root still cannot use this authority, while an ordinary production run keeps its existing ACPX Agent context and behavior.

                          The author-facing successful path and inert-source assertion live in
                          packages/cli/tests/document-suites/plan/Plan.test.md, launched by the same thin
                          Markdown-tier runner pattern as the other CLI document suites. Host-only
                          provider construction, authority, early refusal, isolation, and teardown remain
                          in packages/cli/tests/testing-execution-host.test.ts because a document cannot
                          inspect or construct those internals.

                          Focused feedback evidence:

                          deno task test \
                          packages/cli/tests/document-suites/plan/plan-markdown.test.ts \
                          packages/cli/tests/testing-execution-host.test.ts \
                          packages/cli/tests/plan-component.test.ts

                          After the focused cases pass, create the feedback commit and run
                          deno task test --changed. The complete runtime suites and required checks
                          remain delivery evidence.

                          Documentation

                          Update the testing-host and <Plan> boundaries in architecture.md, the
                          declared <Plan> and testing-profile sections of
                          specs/executable-mdx-spec.md, and the deterministic child-Agent and authority
                          sections of specs/testing-spec.md. Describe the test-only Agent context as present
                          behavior and keep production and test authority distinct.

                          Dependencies and delivery order

                          Out of scope

                          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

                            enhancementNew feature or request

                            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

                              Run <Plan> with <TestAgent> in Markdown tests #728

                              Description

                              @taras

                              Story

                              As an Executable Markdown author, I want a Markdown test to run a document that
                              uses <Plan> with a deterministic test agent, so I can verify planning
                              composition without launching a live coding agent or opening an interactive
                              review form.

                              Common path

                              A test runs the document through the production-shaped run child and supplies
                              the child’s agent behavior and review answer as declarations:

                              <Testname="a document captures its approved Plan">
                              <Executionhost="run"target="./uses-plan.md"as="run">
                              <TestAgent> <TestAgent.Scenario session="planner" src="./agents/approved-plan.md" /></TestAgent><Answers> <Answer value={{ decision: "Approve" }} /></Answers><CollectOutput as="output" /><AssertEquals actual={run.result.ok} expected={true} /><AssertStringIncludes actual={output} expected="# Approved program" />
                              </Execution>
                              </Test>

                              The child document uses the ordinary public component and a session the
                              scenario can address:

                              <Plansession="planner"as="approved">Write the release program.</Plan>
                              Approved source: {approved}

                              Current gap

                              <Execution host="run"> already accepts <TestAgent> and <Answers> as
                              trusted child configuration. The child receives the controlled ACP provider,
                              controlled launcher, and ordinary run-profile Agent components. But its
                              packaged <Plan> declaration was built before that configuration was known and
                              closes over no production Agent stack. <PlanAuthorship> therefore refuses at
                              its Agent context check even though the child has exactly the deterministic provider
                              Markdown tests use for Agent integrations.

                              TypeScript can exercise <Plan> through a private harness, but no checked-in
                              Markdown test can exercise the author-facing component workflow.

                              Contract

                              A canonical <TestAgent> declaration on one <Execution host="run"> lets that
                              child’s trusted host supply the Plan Agent context with the controlled
                              provider it created. The declaration supplies detached scenario data only; no
                              provider, scope, Context value, Api handler, or authority crosses from the test
                              document.

                              The test Agent context preserves the production Plan boundary:

                              • the controlled provider is installed inside <PlanAuthorship> for that Plan
                                invocation, not inherited from the outer test or installed around the child;
                              • the Plan system instruction, deny-all permission mode, empty MCP-server set,
                                empty native-tool set, prompt-failure policy, and document-capability refusals
                                remain the production ones;
                              • the host owns an empty, test-private authorship root and removes it after the
                                child settles, including named Plan session directories;
                              • <Answers> supplies review decisions through the child’s existing
                                non-delegating matcher provider, so no browser or person is reached;
                              • the child uses the production run profile’s component catalog, includes,
                                structural draft check, private Plan phases, output stream, journal selection,
                                and teardown ordering; and
                              • sibling children receive distinct providers, session state, authorship roots,
                                and Plan declarations.

                              Only the canonical child declaration recognized by the testing harness grants
                              this test path. A repository component named TestAgent, a provider installed
                              by the test document, middleware, props, or an unconfigured run child cannot
                              make an Agent context available.

                              Without <TestAgent>, a child that writes <Plan> keeps the existing refusal
                              before an authorship directory, provider, Agent turn, or review exists. A direct
                              xmd test root remains the test profile and does not become a Plan authorship
                              host.

                              The production xmd run and xmd plan authorship policies are unchanged. This story
                              supplies deterministic testing authority, not a new runtime provider-selection
                              surface.

                              Acceptance and evidence

                              #CriterionDiscriminating evidence
                              PMT1Configured PlanA checked-in Markdown suite runs a child document containing <Plan session="planner" as="approved"> with one matching TestAgent scenario and one authored approval answer; the approved source reaches the child’s ordinary binding and output with no live Agent or browser.
                              PMT2Draft inertnessThe scripted approved source names an observable file effect; the Markdown test receives the source and proves that file was not created.
                              PMT3Missing configurationThe same child without <TestAgent> is refused for want of an Agent context before a worker, directory, Agent turn, review, source, or binding exists; it does not fall through to the run profile’s live provider.
                              PMT4Trusted installationTypeScript host evidence records that the Plan invocation received the controlled provider under the production Plan restrictions and a test-private authorship root; changing any restriction or supplying the provider from document state fails the case.
                              PMT5Isolation and teardownTwo configured sibling children use distinct provider/session state and authorship roots, and both roots are absent after success, failure, and cancellation.
                              PMT6Canonical declaration onlyA repository TestAgent component and an unrecognized declaration supply no Plan Agent context and reach no child Agent work.
                              PMT7Profile boundariesA direct test root still cannot use this authority, while an ordinary production run keeps its existing ACPX Agent context and behavior.

                              The author-facing successful path and inert-source assertion live in
                              packages/cli/tests/document-suites/plan/Plan.test.md, launched by the same thin
                              Markdown-tier runner pattern as the other CLI document suites. Host-only
                              provider construction, authority, early refusal, isolation, and teardown remain
                              in packages/cli/tests/testing-execution-host.test.ts because a document cannot
                              inspect or construct those internals.

                              Focused feedback evidence:

                              deno task test \
                              packages/cli/tests/document-suites/plan/plan-markdown.test.ts \
                              packages/cli/tests/testing-execution-host.test.ts \
                              packages/cli/tests/plan-component.test.ts

                              After the focused cases pass, create the feedback commit and run
                              deno task test --changed. The complete runtime suites and required checks
                              remain delivery evidence.

                              Documentation

                              Update the testing-host and <Plan> boundaries in architecture.md, the
                              declared <Plan> and testing-profile sections of
                              specs/executable-mdx-spec.md, and the deterministic child-Agent and authority
                              sections of specs/testing-spec.md. Describe the test-only Agent context as present
                              behavior and keep production and test authority distinct.

                              Dependencies and delivery order

                              Out of scope

                              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

                                enhancementNew feature or request

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions