Skip to content

[strategist] DNS cutover complete but no launch announcement tracked (cncf.io blog, TAB mention, KubeCon) #1837

Closed as not planned

Description

@hivecommons-hive

Strategic Finding

Type: adoption-blocker
Horizon: near-term

Risk: irreversible-public-action

The DNS cutover to endusers.cncf.io completed on 2026-10-22 (#1433). The launch plan that used to live in ROADMAP.md left two items open before that file was removed in #1841 (the planning documents are no longer kept in the repository), so this issue is now the only place they are tracked:

  • Announcement channels: a cncf.io blog post, a mention at an End User TAB meeting, and a KubeCon + CloudNativeCon mention or session are the minimum bar; amplify further via the End User community Slack.
  • 90-day check-in: re-run npm run collect:launch-metrics 90 days after the post-cutover baseline in data/launch-metrics.json (fix(launch): refresh post-cutover metrics baseline #1842) and compare against the targets it records.

The 90-day check-in is not due yet by definition. The announcement-channels bullet, however, is now unblocked and has no open tracking issue: #90 (the original launch/promotion strategy finding) is closed-completed, and no successor issue names the concrete channels, owners, or timing for publishing. CI on main is green and the Phase 1 content pillars were all complete when the plan was retired, so there is no remaining content blocker — only the announcement execution itself.

Rationale

Per #90's own rationale: "content completeness without a launch plan risks a 'silent launch' — Phase 1 finishes and nobody notices." That risk has now fully materialized: the technical gate (DNS) is clear, but 24+ hours later there is no tracked next step toward an actual announcement. A cncf.io blog post, TAB meeting mention, and KubeCon mention are each irreversible, public-facing actions owned by people outside this repository (CNCF marketing / TAB chairs) — this repo's agents cannot draft-and-publish a cncf.io blog post or schedule a TAB agenda item, only prepare the supporting material.

Proposed Next Step

  1. A maintainer confirms: (a) who owns drafting/publishing the cncf.io blog post, (b) which upcoming TAB meeting agenda to request a mention on, and (c) whether a KubeCon + CloudNativeCon session/mention is already in motion for the next event.
  2. Once channels and owners are confirmed, this repository can supply ready-to-use material (e.g. a short announcement draft referencing data/launch-metrics.json's baseline) the way adr/inbound-link-requests-for-0004.md did for the cross-linking deliverable.
  3. Close this issue only once the announcement has actually gone out, not when material is merely drafted.

Related: #90 (original finding, closed), #1433 (DNS cutover, closed), #100 (launch success metrics baseline).

---Filed by strategist agent (ACMM L5 — hold-gated mode)

— hive: agent=strategist backend=copilot model=claude-sonnet-4-6 copilot=1.0.88

Activity

  1. added
    agent/strategistCreated by Hive for agent-filed issue provenance
    stage/045-needs-decisionIssue parked on a person: needs-human or a maintainer decision is owed before the hive picks it up
    on Oct 23, 2026
  2. hivecommons-hive commented on Oct 23, 2026

    @hivecommons-hive
    ContributorAuthor

    What to reply

    • /hive approve: go with the recommendation
    • /hive decision <your instructions>: go ahead, following your instructions
    • /hive help: show these again

    If what this issue waited on has been done (a merged fix, or an action taken outside this repository), a maintainer can reply /fixed to close it as completed; Hive clears its park labels.

    Only a maintainer with write access can un-park; everything else is ignored. Full command reference: https://github.com/hivecommons/hive/blob/v5/src/docs/maintainer-commands.md.

  3. hivecommons-hive commented on Oct 23, 2026

    @hivecommons-hive
    ContributorAuthor

    Folded finding. This was filed as a separate issue, but 1 open agent-filed issue (plus 6 closed as completed in the last 14 days) already cite ci.yml, so it was folded into the oldest of them instead of opening another. Treat this issue as the tracker for that component: prefer one structural fix that covers every folded variant over a PR per variant.

    [quality] tests/tools/flaky-reporter.mjs scores 86.36% under mutation: the flaky-run summary explanation is unasserted

    Finding

    tests/tools/flaky-reporter.mjs is the Playwright reporter that tells a reader
    of a green end-to-end job which specs flaked, and that the failure behind
    the retry was real. Its unit line coverage is 100%, and the harness floor in
    npm run test:unit:coverage:check (harness files 100.00 lines / 99.78 regions)
    keeps it there — but no assertion pins what the summary actually says.

    Mutation evidence, cncf/endusers main @ 8abcb3f, run locally on
    2026-10-23 (Node 26.12.0, StrykerJS tap runner, concurrency: 4):

    npx stryker run --mutate 'tests/tools/flaky-reporter.mjs'
    → 46 mutants, 6 survived, score 86.36
    

    86.36 is below the repository's own break: 90 in stryker.config.mjs.
    The six survivors:

    line mutator what survives
    115 StringLiteral the blank line after the ## Flaky end-to-end specs heading
    116 StringLiteral 'These specs failed and then passed on retry, so the job is green and the' → ""
    117 StringLiteral 'failure is real. The trace of each failed first attempt is in the' → ""
    118 StringLiteral '`playwright-traces` artifact.' → ""
    119 StringLiteral the blank line before the spec list
    148 StringLiteral this.rootDir = '' in the FlakyReporter constructor

    tests/flaky-reporter.test.mjs asserts the heading and each generated list
    row, so the list is pinned. The explanation block between them is not: the
    whole reason a reader should care about a green job can be deleted or reworded
    and every test still passes.

    The line 148 survivor is a different case — onBegin assigns both rootDir
    and this.tests, and onEnd reads rootDir only when this.tests is
    non-empty, so the seed value is never read. It is an equivalent mutant.

    Recommendation

    • Assert the whole rendering of summaryMarkdown() for a single record,
      rather than a phrase of it, so the explanation and the blank lines that
      separate it from the heading and the list are all pinned.
    • Annotate the line 148 seed with
      // Stryker disable next-line StringLiteral: <reason>, per the
      equivalent-mutant guidance in CONTRIBUTING.md.

    Both land in tests/flaky-reporter.test.mjs and
    tests/tools/flaky-reporter.mjs; one pull request closes this.

    Evidence limitation

    No claim is made about end-to-end coverage of this file. The repository's e2e
    coverage mechanism (tests/tools/e2e-coverage-report.mjs, the "End-to-end
    coverage" job in ci.yml) maps V8 coverage of the built site back to
    src/, and does not report on tests/tools/. The gap above is a unit-test
    gap, evidenced by unit mutation only.

    Priority

    • Impact: medium — the file is test infrastructure, but it is the only thing
      that surfaces a real e2e failure hidden by a green job.
    • Effort: low

    🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: 8abcb3f

    — hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88


    Folded finding. This was filed as a separate issue, but 1 open agent-filed issue (plus 6 closed as completed in the last 14 days) already cite ci.yml, so it was folded into the oldest of them instead of opening another. Treat this issue as the tracker for that component: prefer one structural fix that covers every folded variant over a PR per variant.

    [quality] Mutation: 6 surviving mutants in tests/tools/flaky-reporter.mjs (86.36%, below break: 90)

    Finding

    tests/tools/flaky-reporter.mjs is the Playwright reporter that tells a reader
    of a green end-to-end job which specs flaked, and that the failure behind
    the retry was real. Its unit line coverage is 100%, and the harness floor in
    npm run test:unit:coverage:check (harness files 100.00 lines / 99.78 regions)
    keeps it there — but no assertion pins what the summary actually says.

    Mutation evidence, cncf/endusers main @ 8abcb3f, run locally on
    2026-10-23 (Node 26.12.0, StrykerJS tap runner, concurrency: 4):

    npx stryker run --mutate 'tests/tools/flaky-reporter.mjs'
    → 46 mutants, 6 survived, score 86.36
    

    86.36 is below the repository's own break: 90 in stryker.config.mjs.
    The six survivors:

    line mutator what survives
    115 StringLiteral the blank line after the ## Flaky end-to-end specs heading
    116 StringLiteral 'These specs failed and then passed on retry, so the job is green and the' → ""
    117 StringLiteral 'failure is real. The trace of each failed first attempt is in the' → ""
    118 StringLiteral '`playwright-traces` artifact.' → ""
    119 StringLiteral the blank line before the spec list
    148 StringLiteral this.rootDir = '' in the FlakyReporter constructor

    tests/flaky-reporter.test.mjs asserts the heading and each generated list
    row, so the list is pinned. The explanation block between them is not: the
    whole reason a reader should care about a green job can be deleted or reworded
    and every test still passes.

    The line 148 survivor is a different case — onBegin assigns both rootDir
    and this.tests, and onEnd reads rootDir only when this.tests is
    non-empty, so the seed value is never read. It is an equivalent mutant.

    Recommendation

    • Assert the whole rendering of summaryMarkdown() for a single record,
      rather than a phrase of it, so the explanation and the blank lines that
      separate it from the heading and the list are all pinned.
    • Annotate the line 148 seed with
      // Stryker disable next-line StringLiteral: <reason>, per the
      equivalent-mutant guidance in CONTRIBUTING.md.

    Both land in tests/flaky-reporter.test.mjs and
    tests/tools/flaky-reporter.mjs; one pull request closes this.

    Evidence limitation

    No claim is made about end-to-end coverage of this file. The repository's e2e
    coverage mechanism (tests/tools/e2e-coverage-report.mjs, the "End-to-end
    coverage" job in ci.yml) maps V8 coverage of the built site back to
    src/, and does not report on tests/tools/. The gap above is a unit-test
    gap, evidenced by unit mutation only.

    Priority

    • Impact: medium — the file is test infrastructure, but it is the only thing
      that surfaces a real e2e failure hidden by a green job.
    • Effort: low

    🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: 8abcb3f

    — hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88

  4. mrbobbytables commented on Oct 23, 2026

    @mrbobbytables
    Member

    Refreshed the description: ROADMAP.md was removed in #1841, so the launch-plan bullets it quoted no longer exist and this issue is now the sole tracker for the announcement channels and the 90-day check-in (baseline: data/launch-metrics.json via #1842). The decision requested in "Proposed Next Step" is unchanged.

    The folded flaky-reporter finding below is unrelated to the announcement; it is addressed by #1846 (consolidating #1838).

  5. mrbobbytables commented on Oct 23, 2026

    @mrbobbytables
    Member

    Closing under ADR 0008 rule 6: launch and planning trackers are not kept in this repository. Announcement coordination (cncf.io blog, TAB agenda, KubeCon) is owned by CNCF staff and tracked in CNCF's own channels. The 90-day metrics check-in is withdrawn along with the launch-metrics collector it depended on. The folded flaky-reporter finding was fixed by #1846.

  6. removed
    stage/045-needs-decisionIssue parked on a person: needs-human or a maintainer decision is owed before the hive picks it up
    on Oct 23, 2026
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

    agent/strategistCreated by Hive for agent-filed issue provenance

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions