Refuse incomplete root-testing activation before a <Test> runs #523

Description

@taras

Story

As a programmatic testing host, I want incomplete root-testing composition to
fail before a test body runs, so a missing collector, final-result flush, or
completion policy cannot turn failed tests into a successful document execution.

Current defect

The following composition is not a supported root testing session:

yield*installTestingComponents();yield*Test.around({testing: ()=>true});

It does activate test behavior. A <Test> expands its body, assertions run and
the testing package classifies the result. The result is then staged so an
invocation teardown failure can still change it before publication.

What this composition omits is the rest of the root boundary that
useTesting() installs:

  • the result collector;
  • the final staged-result flush; and
  • the completion policy that turns a failed or empty suite into
    Err(TestFailureError).

With one test, the staged result is never flushed. A passing test therefore
renders a pass report and completes Ok with no recorded result. More
importantly, a failing test renders its failure report but the failure remains
contained by <Test>, the document completes Ok, and a surrounding collector
receives no result. With several tests, staging the next test may flush earlier
results, but the final result and the root completion decision remain missing.

This is not inactive-test behavior. When testing mode is inactive, the settled
contract remains that <Test> and its entire body are skipped: no rendering,
binding, side effect, or result.

Settled contract

There are two complete testing activations:

  • useTesting() activates one root document execution, owns its collection,
    flush and completion policy, and supports exactly one execute() call in its
    scope; and
  • <Testing> activates one lexical subtree, owns its boundary collection,
    flush and completion policy, and reports its own outcome.

installTestingComponents() registers testing behavior and components. It is
not a root activation API. A bare public Test middleware override that makes
testing true does not establish either complete activation.

If canonical <Test> is reached with testing === true but without the exact
complete root or lexical activation established by the testing package, the
execution fails before the test body expands. This is a testing-configuration
failure, not a failed or skipped TestResult: it is not contained as the test's
outcome, it records no test result, and it cannot be converted into a successful
document result by the missing completion policy.

Public TestApi middleware remains policy. It may observe, narrow, refuse, and
compose recording behavior, but it cannot manufacture the testing package's
complete-activation authority or rescue an execution by installing only the
boolean mode.

No skipped status is added. Dormant tests remain invisible, and skip, focus,
and retry remain unsupported.

Multiple programmatic executions

One useTesting() session continues to support one execute() call. A harness
that runs several documents creates one child Effection scope and one
useTesting() session per document execution:

for(constdocumentofdocuments){yield*scoped(function*(){consttests=yield*useTesting();constexecution=yield*executeInstalled(document.options,document.installations);constoutcome=yield*execution;constresults=yield*tests.results;// inspect this execution's outcome and results});}

Fixture state, provider middleware and durable stores that must survive across
those executions belong to the enclosing scope and are inherited by each child.
A document testing another root from Markdown continues to use <Execution>
and the host profile its trusted host supplies.

Acceptance

  • useTesting() still records every result in discovery order, flushes the
    final result, fails an otherwise successful execution when a test failed, and
    fails a zero-test execution.
  • An explicit <Testing> boundary still records every result, flushes its final
    result, fails on a failed or empty boundary, and works during an otherwise
    ordinary run.
  • installTestingComponents() without activation still skips <Test> and its
    whole body, renders nothing for it, performs none of its side effects, and
    records no result.
  • installTestingComponents() plus bare
    Test.around({ testing: () => true }) fails before the first <Test> body
    expands. A sentinel in the body does not run, no assertion diagnostic renders,
    no TestResult is recorded or journaled, and the document completion is
    Err.
  • The same refusal holds for passing and failing bodies and under
    executeInstalled(); a workflow installation does not turn partial testing
    composition into a session.
  • Public TestApi middleware cannot fabricate the package-owned indication of
    complete activation, suppress the configuration failure, or make the
    incomplete execution complete successfully.
  • A harness can run two documents under shared outer fixture/provider state by
    giving each execution its own child scope and useTesting() session; results
    and completion policy do not cross between them.
  • Full replay restores supported testing results and outcomes exactly as today.
    The incomplete-activation refusal produces no testing result to restore.
  • Loaded copies preserve the existing testing behavior and recording
    composition without turning a stable public context or API name into complete
    activation authority.

Use a focused regression that proves the body sentinel remains untouched and
that the manual failing case changes from Ok plus no results to a pre-body
Err. Do not rely only on the absence of results: that was the vacuous signal
that exposed this defect.

Documentation

  • specs/testing-spec.md distinguishes component registration, boolean testing
    mode, and the complete root or lexical boundary that owns collection, final
    flushing and completion.
  • architecture.md records that complete testing activation and settlement are
    package-owned; public TestApi middleware is policy and cannot manufacture
    them.
  • The public @executablemd/testing module documentation shows one
    useTesting() session per child execution scope for multi-document
    programmatic harnesses.

Sequencing

This is testing-API hardening and does not block #516, #522, or #181. PR #516
must use the supported per-execution useTesting() composition rather than the
incomplete shortcut. #522 may proceed against #516's corrected feedback commit
or merged result.

Out of scope

  • A multi-execution useTesting() session or cumulative result partitioning.
  • A skippedTestResult, skip/focus/retry language, or visible dormant tests.
  • A new testing DSL or mocking mechanism.
  • The unbuilt host="workflow" nested-execution profile.
  • Changes to canonical <Test> ownership or checked-command-failure
    containment.

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

    No labels
    No labels

    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

      Refuse incomplete root-testing activation before a <Test> runs #523

      Description

      @taras

      Story

      As a programmatic testing host, I want incomplete root-testing composition to
      fail before a test body runs, so a missing collector, final-result flush, or
      completion policy cannot turn failed tests into a successful document execution.

      Current defect

      The following composition is not a supported root testing session:

      yield*installTestingComponents();yield*Test.around({testing: ()=>true});

      It does activate test behavior. A <Test> expands its body, assertions run and
      the testing package classifies the result. The result is then staged so an
      invocation teardown failure can still change it before publication.

      What this composition omits is the rest of the root boundary that
      useTesting() installs:

      • the result collector;
      • the final staged-result flush; and
      • the completion policy that turns a failed or empty suite into
        Err(TestFailureError).

      With one test, the staged result is never flushed. A passing test therefore
      renders a pass report and completes Ok with no recorded result. More
      importantly, a failing test renders its failure report but the failure remains
      contained by <Test>, the document completes Ok, and a surrounding collector
      receives no result. With several tests, staging the next test may flush earlier
      results, but the final result and the root completion decision remain missing.

      This is not inactive-test behavior. When testing mode is inactive, the settled
      contract remains that <Test> and its entire body are skipped: no rendering,
      binding, side effect, or result.

      Settled contract

      There are two complete testing activations:

      • useTesting() activates one root document execution, owns its collection,
        flush and completion policy, and supports exactly one execute() call in its
        scope; and
      • <Testing> activates one lexical subtree, owns its boundary collection,
        flush and completion policy, and reports its own outcome.

      installTestingComponents() registers testing behavior and components. It is
      not a root activation API. A bare public Test middleware override that makes
      testing true does not establish either complete activation.

      If canonical <Test> is reached with testing === true but without the exact
      complete root or lexical activation established by the testing package, the
      execution fails before the test body expands. This is a testing-configuration
      failure, not a failed or skipped TestResult: it is not contained as the test's
      outcome, it records no test result, and it cannot be converted into a successful
      document result by the missing completion policy.

      Public TestApi middleware remains policy. It may observe, narrow, refuse, and
      compose recording behavior, but it cannot manufacture the testing package's
      complete-activation authority or rescue an execution by installing only the
      boolean mode.

      No skipped status is added. Dormant tests remain invisible, and skip, focus,
      and retry remain unsupported.

      Multiple programmatic executions

      One useTesting() session continues to support one execute() call. A harness
      that runs several documents creates one child Effection scope and one
      useTesting() session per document execution:

      for(constdocumentofdocuments){yield*scoped(function*(){consttests=yield*useTesting();constexecution=yield*executeInstalled(document.options,document.installations);constoutcome=yield*execution;constresults=yield*tests.results;// inspect this execution's outcome and results});}

      Fixture state, provider middleware and durable stores that must survive across
      those executions belong to the enclosing scope and are inherited by each child.
      A document testing another root from Markdown continues to use <Execution>
      and the host profile its trusted host supplies.

      Acceptance

      • useTesting() still records every result in discovery order, flushes the
        final result, fails an otherwise successful execution when a test failed, and
        fails a zero-test execution.
      • An explicit <Testing> boundary still records every result, flushes its final
        result, fails on a failed or empty boundary, and works during an otherwise
        ordinary run.
      • installTestingComponents() without activation still skips <Test> and its
        whole body, renders nothing for it, performs none of its side effects, and
        records no result.
      • installTestingComponents() plus bare
        Test.around({ testing: () => true }) fails before the first <Test> body
        expands. A sentinel in the body does not run, no assertion diagnostic renders,
        no TestResult is recorded or journaled, and the document completion is
        Err.
      • The same refusal holds for passing and failing bodies and under
        executeInstalled(); a workflow installation does not turn partial testing
        composition into a session.
      • Public TestApi middleware cannot fabricate the package-owned indication of
        complete activation, suppress the configuration failure, or make the
        incomplete execution complete successfully.
      • A harness can run two documents under shared outer fixture/provider state by
        giving each execution its own child scope and useTesting() session; results
        and completion policy do not cross between them.
      • Full replay restores supported testing results and outcomes exactly as today.
        The incomplete-activation refusal produces no testing result to restore.
      • Loaded copies preserve the existing testing behavior and recording
        composition without turning a stable public context or API name into complete
        activation authority.

      Use a focused regression that proves the body sentinel remains untouched and
      that the manual failing case changes from Ok plus no results to a pre-body
      Err. Do not rely only on the absence of results: that was the vacuous signal
      that exposed this defect.

      Documentation

      • specs/testing-spec.md distinguishes component registration, boolean testing
        mode, and the complete root or lexical boundary that owns collection, final
        flushing and completion.
      • architecture.md records that complete testing activation and settlement are
        package-owned; public TestApi middleware is policy and cannot manufacture
        them.
      • The public @executablemd/testing module documentation shows one
        useTesting() session per child execution scope for multi-document
        programmatic harnesses.

      Sequencing

      This is testing-API hardening and does not block #516, #522, or #181. PR #516
      must use the supported per-execution useTesting() composition rather than the
      incomplete shortcut. #522 may proceed against #516's corrected feedback commit
      or merged result.

      Out of scope

      • A multi-execution useTesting() session or cumulative result partitioning.
      • A skippedTestResult, skip/focus/retry language, or visible dormant tests.
      • A new testing DSL or mocking mechanism.
      • The unbuilt host="workflow" nested-execution profile.
      • Changes to canonical <Test> ownership or checked-command-failure
        containment.

      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

        No labels
        No labels

        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

          Refuse incomplete root-testing activation before a <Test> runs #523

          Description

          @taras

          Story

          As a programmatic testing host, I want incomplete root-testing composition to
          fail before a test body runs, so a missing collector, final-result flush, or
          completion policy cannot turn failed tests into a successful document execution.

          Current defect

          The following composition is not a supported root testing session:

          yield*installTestingComponents();yield*Test.around({testing: ()=>true});

          It does activate test behavior. A <Test> expands its body, assertions run and
          the testing package classifies the result. The result is then staged so an
          invocation teardown failure can still change it before publication.

          What this composition omits is the rest of the root boundary that
          useTesting() installs:

          • the result collector;
          • the final staged-result flush; and
          • the completion policy that turns a failed or empty suite into
            Err(TestFailureError).

          With one test, the staged result is never flushed. A passing test therefore
          renders a pass report and completes Ok with no recorded result. More
          importantly, a failing test renders its failure report but the failure remains
          contained by <Test>, the document completes Ok, and a surrounding collector
          receives no result. With several tests, staging the next test may flush earlier
          results, but the final result and the root completion decision remain missing.

          This is not inactive-test behavior. When testing mode is inactive, the settled
          contract remains that <Test> and its entire body are skipped: no rendering,
          binding, side effect, or result.

          Settled contract

          There are two complete testing activations:

          • useTesting() activates one root document execution, owns its collection,
            flush and completion policy, and supports exactly one execute() call in its
            scope; and
          • <Testing> activates one lexical subtree, owns its boundary collection,
            flush and completion policy, and reports its own outcome.

          installTestingComponents() registers testing behavior and components. It is
          not a root activation API. A bare public Test middleware override that makes
          testing true does not establish either complete activation.

          If canonical <Test> is reached with testing === true but without the exact
          complete root or lexical activation established by the testing package, the
          execution fails before the test body expands. This is a testing-configuration
          failure, not a failed or skipped TestResult: it is not contained as the test's
          outcome, it records no test result, and it cannot be converted into a successful
          document result by the missing completion policy.

          Public TestApi middleware remains policy. It may observe, narrow, refuse, and
          compose recording behavior, but it cannot manufacture the testing package's
          complete-activation authority or rescue an execution by installing only the
          boolean mode.

          No skipped status is added. Dormant tests remain invisible, and skip, focus,
          and retry remain unsupported.

          Multiple programmatic executions

          One useTesting() session continues to support one execute() call. A harness
          that runs several documents creates one child Effection scope and one
          useTesting() session per document execution:

          for(constdocumentofdocuments){yield*scoped(function*(){consttests=yield*useTesting();constexecution=yield*executeInstalled(document.options,document.installations);constoutcome=yield*execution;constresults=yield*tests.results;// inspect this execution's outcome and results});}

          Fixture state, provider middleware and durable stores that must survive across
          those executions belong to the enclosing scope and are inherited by each child.
          A document testing another root from Markdown continues to use <Execution>
          and the host profile its trusted host supplies.

          Acceptance

          • useTesting() still records every result in discovery order, flushes the
            final result, fails an otherwise successful execution when a test failed, and
            fails a zero-test execution.
          • An explicit <Testing> boundary still records every result, flushes its final
            result, fails on a failed or empty boundary, and works during an otherwise
            ordinary run.
          • installTestingComponents() without activation still skips <Test> and its
            whole body, renders nothing for it, performs none of its side effects, and
            records no result.
          • installTestingComponents() plus bare
            Test.around({ testing: () => true }) fails before the first <Test> body
            expands. A sentinel in the body does not run, no assertion diagnostic renders,
            no TestResult is recorded or journaled, and the document completion is
            Err.
          • The same refusal holds for passing and failing bodies and under
            executeInstalled(); a workflow installation does not turn partial testing
            composition into a session.
          • Public TestApi middleware cannot fabricate the package-owned indication of
            complete activation, suppress the configuration failure, or make the
            incomplete execution complete successfully.
          • A harness can run two documents under shared outer fixture/provider state by
            giving each execution its own child scope and useTesting() session; results
            and completion policy do not cross between them.
          • Full replay restores supported testing results and outcomes exactly as today.
            The incomplete-activation refusal produces no testing result to restore.
          • Loaded copies preserve the existing testing behavior and recording
            composition without turning a stable public context or API name into complete
            activation authority.

          Use a focused regression that proves the body sentinel remains untouched and
          that the manual failing case changes from Ok plus no results to a pre-body
          Err. Do not rely only on the absence of results: that was the vacuous signal
          that exposed this defect.

          Documentation

          • specs/testing-spec.md distinguishes component registration, boolean testing
            mode, and the complete root or lexical boundary that owns collection, final
            flushing and completion.
          • architecture.md records that complete testing activation and settlement are
            package-owned; public TestApi middleware is policy and cannot manufacture
            them.
          • The public @executablemd/testing module documentation shows one
            useTesting() session per child execution scope for multi-document
            programmatic harnesses.

          Sequencing

          This is testing-API hardening and does not block #516, #522, or #181. PR #516
          must use the supported per-execution useTesting() composition rather than the
          incomplete shortcut. #522 may proceed against #516's corrected feedback commit
          or merged result.

          Out of scope

          • A multi-execution useTesting() session or cumulative result partitioning.
          • A skippedTestResult, skip/focus/retry language, or visible dormant tests.
          • A new testing DSL or mocking mechanism.
          • The unbuilt host="workflow" nested-execution profile.
          • Changes to canonical <Test> ownership or checked-command-failure
            containment.

          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

            No labels
            No labels

            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

              Refuse incomplete root-testing activation before a <Test> runs #523

              Description

              @taras

              Story

              As a programmatic testing host, I want incomplete root-testing composition to
              fail before a test body runs, so a missing collector, final-result flush, or
              completion policy cannot turn failed tests into a successful document execution.

              Current defect

              The following composition is not a supported root testing session:

              yield*installTestingComponents();yield*Test.around({testing: ()=>true});

              It does activate test behavior. A <Test> expands its body, assertions run and
              the testing package classifies the result. The result is then staged so an
              invocation teardown failure can still change it before publication.

              What this composition omits is the rest of the root boundary that
              useTesting() installs:

              • the result collector;
              • the final staged-result flush; and
              • the completion policy that turns a failed or empty suite into
                Err(TestFailureError).

              With one test, the staged result is never flushed. A passing test therefore
              renders a pass report and completes Ok with no recorded result. More
              importantly, a failing test renders its failure report but the failure remains
              contained by <Test>, the document completes Ok, and a surrounding collector
              receives no result. With several tests, staging the next test may flush earlier
              results, but the final result and the root completion decision remain missing.

              This is not inactive-test behavior. When testing mode is inactive, the settled
              contract remains that <Test> and its entire body are skipped: no rendering,
              binding, side effect, or result.

              Settled contract

              There are two complete testing activations:

              • useTesting() activates one root document execution, owns its collection,
                flush and completion policy, and supports exactly one execute() call in its
                scope; and
              • <Testing> activates one lexical subtree, owns its boundary collection,
                flush and completion policy, and reports its own outcome.

              installTestingComponents() registers testing behavior and components. It is
              not a root activation API. A bare public Test middleware override that makes
              testing true does not establish either complete activation.

              If canonical <Test> is reached with testing === true but without the exact
              complete root or lexical activation established by the testing package, the
              execution fails before the test body expands. This is a testing-configuration
              failure, not a failed or skipped TestResult: it is not contained as the test's
              outcome, it records no test result, and it cannot be converted into a successful
              document result by the missing completion policy.

              Public TestApi middleware remains policy. It may observe, narrow, refuse, and
              compose recording behavior, but it cannot manufacture the testing package's
              complete-activation authority or rescue an execution by installing only the
              boolean mode.

              No skipped status is added. Dormant tests remain invisible, and skip, focus,
              and retry remain unsupported.

              Multiple programmatic executions

              One useTesting() session continues to support one execute() call. A harness
              that runs several documents creates one child Effection scope and one
              useTesting() session per document execution:

              for(constdocumentofdocuments){yield*scoped(function*(){consttests=yield*useTesting();constexecution=yield*executeInstalled(document.options,document.installations);constoutcome=yield*execution;constresults=yield*tests.results;// inspect this execution's outcome and results});}

              Fixture state, provider middleware and durable stores that must survive across
              those executions belong to the enclosing scope and are inherited by each child.
              A document testing another root from Markdown continues to use <Execution>
              and the host profile its trusted host supplies.

              Acceptance

              • useTesting() still records every result in discovery order, flushes the
                final result, fails an otherwise successful execution when a test failed, and
                fails a zero-test execution.
              • An explicit <Testing> boundary still records every result, flushes its final
                result, fails on a failed or empty boundary, and works during an otherwise
                ordinary run.
              • installTestingComponents() without activation still skips <Test> and its
                whole body, renders nothing for it, performs none of its side effects, and
                records no result.
              • installTestingComponents() plus bare
                Test.around({ testing: () => true }) fails before the first <Test> body
                expands. A sentinel in the body does not run, no assertion diagnostic renders,
                no TestResult is recorded or journaled, and the document completion is
                Err.
              • The same refusal holds for passing and failing bodies and under
                executeInstalled(); a workflow installation does not turn partial testing
                composition into a session.
              • Public TestApi middleware cannot fabricate the package-owned indication of
                complete activation, suppress the configuration failure, or make the
                incomplete execution complete successfully.
              • A harness can run two documents under shared outer fixture/provider state by
                giving each execution its own child scope and useTesting() session; results
                and completion policy do not cross between them.
              • Full replay restores supported testing results and outcomes exactly as today.
                The incomplete-activation refusal produces no testing result to restore.
              • Loaded copies preserve the existing testing behavior and recording
                composition without turning a stable public context or API name into complete
                activation authority.

              Use a focused regression that proves the body sentinel remains untouched and
              that the manual failing case changes from Ok plus no results to a pre-body
              Err. Do not rely only on the absence of results: that was the vacuous signal
              that exposed this defect.

              Documentation

              • specs/testing-spec.md distinguishes component registration, boolean testing
                mode, and the complete root or lexical boundary that owns collection, final
                flushing and completion.
              • architecture.md records that complete testing activation and settlement are
                package-owned; public TestApi middleware is policy and cannot manufacture
                them.
              • The public @executablemd/testing module documentation shows one
                useTesting() session per child execution scope for multi-document
                programmatic harnesses.

              Sequencing

              This is testing-API hardening and does not block #516, #522, or #181. PR #516
              must use the supported per-execution useTesting() composition rather than the
              incomplete shortcut. #522 may proceed against #516's corrected feedback commit
              or merged result.

              Out of scope

              • A multi-execution useTesting() session or cumulative result partitioning.
              • A skippedTestResult, skip/focus/retry language, or visible dormant tests.
              • A new testing DSL or mocking mechanism.
              • The unbuilt host="workflow" nested-execution profile.
              • Changes to canonical <Test> ownership or checked-command-failure
                containment.

              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

                No labels
                No labels

                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

                  Refuse incomplete root-testing activation before a <Test> runs #523

                  Description

                  @taras

                  Story

                  As a programmatic testing host, I want incomplete root-testing composition to
                  fail before a test body runs, so a missing collector, final-result flush, or
                  completion policy cannot turn failed tests into a successful document execution.

                  Current defect

                  The following composition is not a supported root testing session:

                  yield*installTestingComponents();yield*Test.around({testing: ()=>true});

                  It does activate test behavior. A <Test> expands its body, assertions run and
                  the testing package classifies the result. The result is then staged so an
                  invocation teardown failure can still change it before publication.

                  What this composition omits is the rest of the root boundary that
                  useTesting() installs:

                  • the result collector;
                  • the final staged-result flush; and
                  • the completion policy that turns a failed or empty suite into
                    Err(TestFailureError).

                  With one test, the staged result is never flushed. A passing test therefore
                  renders a pass report and completes Ok with no recorded result. More
                  importantly, a failing test renders its failure report but the failure remains
                  contained by <Test>, the document completes Ok, and a surrounding collector
                  receives no result. With several tests, staging the next test may flush earlier
                  results, but the final result and the root completion decision remain missing.

                  This is not inactive-test behavior. When testing mode is inactive, the settled
                  contract remains that <Test> and its entire body are skipped: no rendering,
                  binding, side effect, or result.

                  Settled contract

                  There are two complete testing activations:

                  • useTesting() activates one root document execution, owns its collection,
                    flush and completion policy, and supports exactly one execute() call in its
                    scope; and
                  • <Testing> activates one lexical subtree, owns its boundary collection,
                    flush and completion policy, and reports its own outcome.

                  installTestingComponents() registers testing behavior and components. It is
                  not a root activation API. A bare public Test middleware override that makes
                  testing true does not establish either complete activation.

                  If canonical <Test> is reached with testing === true but without the exact
                  complete root or lexical activation established by the testing package, the
                  execution fails before the test body expands. This is a testing-configuration
                  failure, not a failed or skipped TestResult: it is not contained as the test's
                  outcome, it records no test result, and it cannot be converted into a successful
                  document result by the missing completion policy.

                  Public TestApi middleware remains policy. It may observe, narrow, refuse, and
                  compose recording behavior, but it cannot manufacture the testing package's
                  complete-activation authority or rescue an execution by installing only the
                  boolean mode.

                  No skipped status is added. Dormant tests remain invisible, and skip, focus,
                  and retry remain unsupported.

                  Multiple programmatic executions

                  One useTesting() session continues to support one execute() call. A harness
                  that runs several documents creates one child Effection scope and one
                  useTesting() session per document execution:

                  for(constdocumentofdocuments){yield*scoped(function*(){consttests=yield*useTesting();constexecution=yield*executeInstalled(document.options,document.installations);constoutcome=yield*execution;constresults=yield*tests.results;// inspect this execution's outcome and results});}

                  Fixture state, provider middleware and durable stores that must survive across
                  those executions belong to the enclosing scope and are inherited by each child.
                  A document testing another root from Markdown continues to use <Execution>
                  and the host profile its trusted host supplies.

                  Acceptance

                  • useTesting() still records every result in discovery order, flushes the
                    final result, fails an otherwise successful execution when a test failed, and
                    fails a zero-test execution.
                  • An explicit <Testing> boundary still records every result, flushes its final
                    result, fails on a failed or empty boundary, and works during an otherwise
                    ordinary run.
                  • installTestingComponents() without activation still skips <Test> and its
                    whole body, renders nothing for it, performs none of its side effects, and
                    records no result.
                  • installTestingComponents() plus bare
                    Test.around({ testing: () => true }) fails before the first <Test> body
                    expands. A sentinel in the body does not run, no assertion diagnostic renders,
                    no TestResult is recorded or journaled, and the document completion is
                    Err.
                  • The same refusal holds for passing and failing bodies and under
                    executeInstalled(); a workflow installation does not turn partial testing
                    composition into a session.
                  • Public TestApi middleware cannot fabricate the package-owned indication of
                    complete activation, suppress the configuration failure, or make the
                    incomplete execution complete successfully.
                  • A harness can run two documents under shared outer fixture/provider state by
                    giving each execution its own child scope and useTesting() session; results
                    and completion policy do not cross between them.
                  • Full replay restores supported testing results and outcomes exactly as today.
                    The incomplete-activation refusal produces no testing result to restore.
                  • Loaded copies preserve the existing testing behavior and recording
                    composition without turning a stable public context or API name into complete
                    activation authority.

                  Use a focused regression that proves the body sentinel remains untouched and
                  that the manual failing case changes from Ok plus no results to a pre-body
                  Err. Do not rely only on the absence of results: that was the vacuous signal
                  that exposed this defect.

                  Documentation

                  • specs/testing-spec.md distinguishes component registration, boolean testing
                    mode, and the complete root or lexical boundary that owns collection, final
                    flushing and completion.
                  • architecture.md records that complete testing activation and settlement are
                    package-owned; public TestApi middleware is policy and cannot manufacture
                    them.
                  • The public @executablemd/testing module documentation shows one
                    useTesting() session per child execution scope for multi-document
                    programmatic harnesses.

                  Sequencing

                  This is testing-API hardening and does not block #516, #522, or #181. PR #516
                  must use the supported per-execution useTesting() composition rather than the
                  incomplete shortcut. #522 may proceed against #516's corrected feedback commit
                  or merged result.

                  Out of scope

                  • A multi-execution useTesting() session or cumulative result partitioning.
                  • A skippedTestResult, skip/focus/retry language, or visible dormant tests.
                  • A new testing DSL or mocking mechanism.
                  • The unbuilt host="workflow" nested-execution profile.
                  • Changes to canonical <Test> ownership or checked-command-failure
                    containment.

                  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

                    No labels
                    No labels

                    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

                      Refuse incomplete root-testing activation before a <Test> runs #523

                      Description

                      @taras

                      Story

                      As a programmatic testing host, I want incomplete root-testing composition to
                      fail before a test body runs, so a missing collector, final-result flush, or
                      completion policy cannot turn failed tests into a successful document execution.

                      Current defect

                      The following composition is not a supported root testing session:

                      yield*installTestingComponents();yield*Test.around({testing: ()=>true});

                      It does activate test behavior. A <Test> expands its body, assertions run and
                      the testing package classifies the result. The result is then staged so an
                      invocation teardown failure can still change it before publication.

                      What this composition omits is the rest of the root boundary that
                      useTesting() installs:

                      • the result collector;
                      • the final staged-result flush; and
                      • the completion policy that turns a failed or empty suite into
                        Err(TestFailureError).

                      With one test, the staged result is never flushed. A passing test therefore
                      renders a pass report and completes Ok with no recorded result. More
                      importantly, a failing test renders its failure report but the failure remains
                      contained by <Test>, the document completes Ok, and a surrounding collector
                      receives no result. With several tests, staging the next test may flush earlier
                      results, but the final result and the root completion decision remain missing.

                      This is not inactive-test behavior. When testing mode is inactive, the settled
                      contract remains that <Test> and its entire body are skipped: no rendering,
                      binding, side effect, or result.

                      Settled contract

                      There are two complete testing activations:

                      • useTesting() activates one root document execution, owns its collection,
                        flush and completion policy, and supports exactly one execute() call in its
                        scope; and
                      • <Testing> activates one lexical subtree, owns its boundary collection,
                        flush and completion policy, and reports its own outcome.

                      installTestingComponents() registers testing behavior and components. It is
                      not a root activation API. A bare public Test middleware override that makes
                      testing true does not establish either complete activation.

                      If canonical <Test> is reached with testing === true but without the exact
                      complete root or lexical activation established by the testing package, the
                      execution fails before the test body expands. This is a testing-configuration
                      failure, not a failed or skipped TestResult: it is not contained as the test's
                      outcome, it records no test result, and it cannot be converted into a successful
                      document result by the missing completion policy.

                      Public TestApi middleware remains policy. It may observe, narrow, refuse, and
                      compose recording behavior, but it cannot manufacture the testing package's
                      complete-activation authority or rescue an execution by installing only the
                      boolean mode.

                      No skipped status is added. Dormant tests remain invisible, and skip, focus,
                      and retry remain unsupported.

                      Multiple programmatic executions

                      One useTesting() session continues to support one execute() call. A harness
                      that runs several documents creates one child Effection scope and one
                      useTesting() session per document execution:

                      for(constdocumentofdocuments){yield*scoped(function*(){consttests=yield*useTesting();constexecution=yield*executeInstalled(document.options,document.installations);constoutcome=yield*execution;constresults=yield*tests.results;// inspect this execution's outcome and results});}

                      Fixture state, provider middleware and durable stores that must survive across
                      those executions belong to the enclosing scope and are inherited by each child.
                      A document testing another root from Markdown continues to use <Execution>
                      and the host profile its trusted host supplies.

                      Acceptance

                      • useTesting() still records every result in discovery order, flushes the
                        final result, fails an otherwise successful execution when a test failed, and
                        fails a zero-test execution.
                      • An explicit <Testing> boundary still records every result, flushes its final
                        result, fails on a failed or empty boundary, and works during an otherwise
                        ordinary run.
                      • installTestingComponents() without activation still skips <Test> and its
                        whole body, renders nothing for it, performs none of its side effects, and
                        records no result.
                      • installTestingComponents() plus bare
                        Test.around({ testing: () => true }) fails before the first <Test> body
                        expands. A sentinel in the body does not run, no assertion diagnostic renders,
                        no TestResult is recorded or journaled, and the document completion is
                        Err.
                      • The same refusal holds for passing and failing bodies and under
                        executeInstalled(); a workflow installation does not turn partial testing
                        composition into a session.
                      • Public TestApi middleware cannot fabricate the package-owned indication of
                        complete activation, suppress the configuration failure, or make the
                        incomplete execution complete successfully.
                      • A harness can run two documents under shared outer fixture/provider state by
                        giving each execution its own child scope and useTesting() session; results
                        and completion policy do not cross between them.
                      • Full replay restores supported testing results and outcomes exactly as today.
                        The incomplete-activation refusal produces no testing result to restore.
                      • Loaded copies preserve the existing testing behavior and recording
                        composition without turning a stable public context or API name into complete
                        activation authority.

                      Use a focused regression that proves the body sentinel remains untouched and
                      that the manual failing case changes from Ok plus no results to a pre-body
                      Err. Do not rely only on the absence of results: that was the vacuous signal
                      that exposed this defect.

                      Documentation

                      • specs/testing-spec.md distinguishes component registration, boolean testing
                        mode, and the complete root or lexical boundary that owns collection, final
                        flushing and completion.
                      • architecture.md records that complete testing activation and settlement are
                        package-owned; public TestApi middleware is policy and cannot manufacture
                        them.
                      • The public @executablemd/testing module documentation shows one
                        useTesting() session per child execution scope for multi-document
                        programmatic harnesses.

                      Sequencing

                      This is testing-API hardening and does not block #516, #522, or #181. PR #516
                      must use the supported per-execution useTesting() composition rather than the
                      incomplete shortcut. #522 may proceed against #516's corrected feedback commit
                      or merged result.

                      Out of scope

                      • A multi-execution useTesting() session or cumulative result partitioning.
                      • A skippedTestResult, skip/focus/retry language, or visible dormant tests.
                      • A new testing DSL or mocking mechanism.
                      • The unbuilt host="workflow" nested-execution profile.
                      • Changes to canonical <Test> ownership or checked-command-failure
                        containment.

                      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

                        No labels
                        No labels

                        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

                          Refuse incomplete root-testing activation before a <Test> runs #523

                          Description

                          @taras

                          Story

                          As a programmatic testing host, I want incomplete root-testing composition to
                          fail before a test body runs, so a missing collector, final-result flush, or
                          completion policy cannot turn failed tests into a successful document execution.

                          Current defect

                          The following composition is not a supported root testing session:

                          yield*installTestingComponents();yield*Test.around({testing: ()=>true});

                          It does activate test behavior. A <Test> expands its body, assertions run and
                          the testing package classifies the result. The result is then staged so an
                          invocation teardown failure can still change it before publication.

                          What this composition omits is the rest of the root boundary that
                          useTesting() installs:

                          • the result collector;
                          • the final staged-result flush; and
                          • the completion policy that turns a failed or empty suite into
                            Err(TestFailureError).

                          With one test, the staged result is never flushed. A passing test therefore
                          renders a pass report and completes Ok with no recorded result. More
                          importantly, a failing test renders its failure report but the failure remains
                          contained by <Test>, the document completes Ok, and a surrounding collector
                          receives no result. With several tests, staging the next test may flush earlier
                          results, but the final result and the root completion decision remain missing.

                          This is not inactive-test behavior. When testing mode is inactive, the settled
                          contract remains that <Test> and its entire body are skipped: no rendering,
                          binding, side effect, or result.

                          Settled contract

                          There are two complete testing activations:

                          • useTesting() activates one root document execution, owns its collection,
                            flush and completion policy, and supports exactly one execute() call in its
                            scope; and
                          • <Testing> activates one lexical subtree, owns its boundary collection,
                            flush and completion policy, and reports its own outcome.

                          installTestingComponents() registers testing behavior and components. It is
                          not a root activation API. A bare public Test middleware override that makes
                          testing true does not establish either complete activation.

                          If canonical <Test> is reached with testing === true but without the exact
                          complete root or lexical activation established by the testing package, the
                          execution fails before the test body expands. This is a testing-configuration
                          failure, not a failed or skipped TestResult: it is not contained as the test's
                          outcome, it records no test result, and it cannot be converted into a successful
                          document result by the missing completion policy.

                          Public TestApi middleware remains policy. It may observe, narrow, refuse, and
                          compose recording behavior, but it cannot manufacture the testing package's
                          complete-activation authority or rescue an execution by installing only the
                          boolean mode.

                          No skipped status is added. Dormant tests remain invisible, and skip, focus,
                          and retry remain unsupported.

                          Multiple programmatic executions

                          One useTesting() session continues to support one execute() call. A harness
                          that runs several documents creates one child Effection scope and one
                          useTesting() session per document execution:

                          for(constdocumentofdocuments){yield*scoped(function*(){consttests=yield*useTesting();constexecution=yield*executeInstalled(document.options,document.installations);constoutcome=yield*execution;constresults=yield*tests.results;// inspect this execution's outcome and results});}

                          Fixture state, provider middleware and durable stores that must survive across
                          those executions belong to the enclosing scope and are inherited by each child.
                          A document testing another root from Markdown continues to use <Execution>
                          and the host profile its trusted host supplies.

                          Acceptance

                          • useTesting() still records every result in discovery order, flushes the
                            final result, fails an otherwise successful execution when a test failed, and
                            fails a zero-test execution.
                          • An explicit <Testing> boundary still records every result, flushes its final
                            result, fails on a failed or empty boundary, and works during an otherwise
                            ordinary run.
                          • installTestingComponents() without activation still skips <Test> and its
                            whole body, renders nothing for it, performs none of its side effects, and
                            records no result.
                          • installTestingComponents() plus bare
                            Test.around({ testing: () => true }) fails before the first <Test> body
                            expands. A sentinel in the body does not run, no assertion diagnostic renders,
                            no TestResult is recorded or journaled, and the document completion is
                            Err.
                          • The same refusal holds for passing and failing bodies and under
                            executeInstalled(); a workflow installation does not turn partial testing
                            composition into a session.
                          • Public TestApi middleware cannot fabricate the package-owned indication of
                            complete activation, suppress the configuration failure, or make the
                            incomplete execution complete successfully.
                          • A harness can run two documents under shared outer fixture/provider state by
                            giving each execution its own child scope and useTesting() session; results
                            and completion policy do not cross between them.
                          • Full replay restores supported testing results and outcomes exactly as today.
                            The incomplete-activation refusal produces no testing result to restore.
                          • Loaded copies preserve the existing testing behavior and recording
                            composition without turning a stable public context or API name into complete
                            activation authority.

                          Use a focused regression that proves the body sentinel remains untouched and
                          that the manual failing case changes from Ok plus no results to a pre-body
                          Err. Do not rely only on the absence of results: that was the vacuous signal
                          that exposed this defect.

                          Documentation

                          • specs/testing-spec.md distinguishes component registration, boolean testing
                            mode, and the complete root or lexical boundary that owns collection, final
                            flushing and completion.
                          • architecture.md records that complete testing activation and settlement are
                            package-owned; public TestApi middleware is policy and cannot manufacture
                            them.
                          • The public @executablemd/testing module documentation shows one
                            useTesting() session per child execution scope for multi-document
                            programmatic harnesses.

                          Sequencing

                          This is testing-API hardening and does not block #516, #522, or #181. PR #516
                          must use the supported per-execution useTesting() composition rather than the
                          incomplete shortcut. #522 may proceed against #516's corrected feedback commit
                          or merged result.

                          Out of scope

                          • A multi-execution useTesting() session or cumulative result partitioning.
                          • A skippedTestResult, skip/focus/retry language, or visible dormant tests.
                          • A new testing DSL or mocking mechanism.
                          • The unbuilt host="workflow" nested-execution profile.
                          • Changes to canonical <Test> ownership or checked-command-failure
                            containment.

                          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

                            No labels
                            No labels

                            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

                              Refuse incomplete root-testing activation before a <Test> runs #523

                              Description

                              @taras

                              Story

                              As a programmatic testing host, I want incomplete root-testing composition to
                              fail before a test body runs, so a missing collector, final-result flush, or
                              completion policy cannot turn failed tests into a successful document execution.

                              Current defect

                              The following composition is not a supported root testing session:

                              yield*installTestingComponents();yield*Test.around({testing: ()=>true});

                              It does activate test behavior. A <Test> expands its body, assertions run and
                              the testing package classifies the result. The result is then staged so an
                              invocation teardown failure can still change it before publication.

                              What this composition omits is the rest of the root boundary that
                              useTesting() installs:

                              • the result collector;
                              • the final staged-result flush; and
                              • the completion policy that turns a failed or empty suite into
                                Err(TestFailureError).

                              With one test, the staged result is never flushed. A passing test therefore
                              renders a pass report and completes Ok with no recorded result. More
                              importantly, a failing test renders its failure report but the failure remains
                              contained by <Test>, the document completes Ok, and a surrounding collector
                              receives no result. With several tests, staging the next test may flush earlier
                              results, but the final result and the root completion decision remain missing.

                              This is not inactive-test behavior. When testing mode is inactive, the settled
                              contract remains that <Test> and its entire body are skipped: no rendering,
                              binding, side effect, or result.

                              Settled contract

                              There are two complete testing activations:

                              • useTesting() activates one root document execution, owns its collection,
                                flush and completion policy, and supports exactly one execute() call in its
                                scope; and
                              • <Testing> activates one lexical subtree, owns its boundary collection,
                                flush and completion policy, and reports its own outcome.

                              installTestingComponents() registers testing behavior and components. It is
                              not a root activation API. A bare public Test middleware override that makes
                              testing true does not establish either complete activation.

                              If canonical <Test> is reached with testing === true but without the exact
                              complete root or lexical activation established by the testing package, the
                              execution fails before the test body expands. This is a testing-configuration
                              failure, not a failed or skipped TestResult: it is not contained as the test's
                              outcome, it records no test result, and it cannot be converted into a successful
                              document result by the missing completion policy.

                              Public TestApi middleware remains policy. It may observe, narrow, refuse, and
                              compose recording behavior, but it cannot manufacture the testing package's
                              complete-activation authority or rescue an execution by installing only the
                              boolean mode.

                              No skipped status is added. Dormant tests remain invisible, and skip, focus,
                              and retry remain unsupported.

                              Multiple programmatic executions

                              One useTesting() session continues to support one execute() call. A harness
                              that runs several documents creates one child Effection scope and one
                              useTesting() session per document execution:

                              for(constdocumentofdocuments){yield*scoped(function*(){consttests=yield*useTesting();constexecution=yield*executeInstalled(document.options,document.installations);constoutcome=yield*execution;constresults=yield*tests.results;// inspect this execution's outcome and results});}

                              Fixture state, provider middleware and durable stores that must survive across
                              those executions belong to the enclosing scope and are inherited by each child.
                              A document testing another root from Markdown continues to use <Execution>
                              and the host profile its trusted host supplies.

                              Acceptance

                              • useTesting() still records every result in discovery order, flushes the
                                final result, fails an otherwise successful execution when a test failed, and
                                fails a zero-test execution.
                              • An explicit <Testing> boundary still records every result, flushes its final
                                result, fails on a failed or empty boundary, and works during an otherwise
                                ordinary run.
                              • installTestingComponents() without activation still skips <Test> and its
                                whole body, renders nothing for it, performs none of its side effects, and
                                records no result.
                              • installTestingComponents() plus bare
                                Test.around({ testing: () => true }) fails before the first <Test> body
                                expands. A sentinel in the body does not run, no assertion diagnostic renders,
                                no TestResult is recorded or journaled, and the document completion is
                                Err.
                              • The same refusal holds for passing and failing bodies and under
                                executeInstalled(); a workflow installation does not turn partial testing
                                composition into a session.
                              • Public TestApi middleware cannot fabricate the package-owned indication of
                                complete activation, suppress the configuration failure, or make the
                                incomplete execution complete successfully.
                              • A harness can run two documents under shared outer fixture/provider state by
                                giving each execution its own child scope and useTesting() session; results
                                and completion policy do not cross between them.
                              • Full replay restores supported testing results and outcomes exactly as today.
                                The incomplete-activation refusal produces no testing result to restore.
                              • Loaded copies preserve the existing testing behavior and recording
                                composition without turning a stable public context or API name into complete
                                activation authority.

                              Use a focused regression that proves the body sentinel remains untouched and
                              that the manual failing case changes from Ok plus no results to a pre-body
                              Err. Do not rely only on the absence of results: that was the vacuous signal
                              that exposed this defect.

                              Documentation

                              • specs/testing-spec.md distinguishes component registration, boolean testing
                                mode, and the complete root or lexical boundary that owns collection, final
                                flushing and completion.
                              • architecture.md records that complete testing activation and settlement are
                                package-owned; public TestApi middleware is policy and cannot manufacture
                                them.
                              • The public @executablemd/testing module documentation shows one
                                useTesting() session per child execution scope for multi-document
                                programmatic harnesses.

                              Sequencing

                              This is testing-API hardening and does not block #516, #522, or #181. PR #516
                              must use the supported per-execution useTesting() composition rather than the
                              incomplete shortcut. #522 may proceed against #516's corrected feedback commit
                              or merged result.

                              Out of scope

                              • A multi-execution useTesting() session or cumulative result partitioning.
                              • A skippedTestResult, skip/focus/retry language, or visible dormant tests.
                              • A new testing DSL or mocking mechanism.
                              • The unbuilt host="workflow" nested-execution profile.
                              • Changes to canonical <Test> ownership or checked-command-failure
                                containment.

                              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

                                No labels
                                No labels

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions