Skip to content

Defect: Keep macOS 26 hosted-runner packages redaction-clean #149

Description

@Niko4417

Lifecycle contract: docs/qa/issue-lifecycle.md.

Parent Epic: None

Planning contract

  • Contract version: v3

Implementation Ready freezes the accepted behavior, reproduction boundary, impact, scope,
acceptance criteria, Quality Plan, and delivery target. A wording-only correction may retain the
version but still requires a new readiness validation and fingerprint. A semantic change increments
the version, returns the issue to status: new, and requires a new successful readiness validation.
Record actual implementation, verification, and audit evidence in pull requests or issue comments.

Finding and accepted behavior

  • Finding source: production evidence
  • Finding or incident reference: PR Decide lifecycle authentication for GitHub static workflow graphs (#146) #148 CI run 30628501076, failed macOS 26 jobs
    91149186697 (attempt 1) and 91153812842 (attempt 2); PR fix(quality): diagnose macOS 26 package redaction (#149) #150 CI run 30635296068,
    successful macOS 26 jobs 91171250362 (original) and 91180784764 (authorized rerun); last known green dev run 30625975050, macOS 26 job
    91141217058.
  • Affected version, commit, build, or artifact: PR Decide lifecycle authentication for GitHub static workflow graphs (#146) #148 signed head
    7f6f34c0a0f37800bcd613d5b3de71f2eb95308b produced two rejected
    Keiko Native.app/Contents/MacOS/keiko-native-desktop artifacts. PR fix(quality): diagnose macOS 26 package redaction (#149) #150 signed diagnostic head
    d5e92d308f644a96d96b1ca1d42cd1f4cec05295 produced a clean package and acceptance artifact.
  • Affected platforms and environments: GitHub-hosted macos-26 arm64 image
    20260728.0273.1, macOS 26.5.2 build 25F84. Both failing and passing evidence used this exact
    image/version in the same Azure region; the worker identity and source head differed.
  • Observable behavior: The old exact head was rejected twice as
    package-redaction:Contents/MacOS/keiko-native-desktop. A new diagnostic head on the same hosted
    image passed package and packaged-shell acceptance. The old diagnostic exposed no denied class or
    matched value, and the rejected artifact was not retained.
  • Accepted or expected behavior and authority: Productive macOS package binaries remain free of
    denied sensitive data and environment-specific paths. Package scanning continues to fail closed.
    A rejection identifies only a bounded repository-owned redaction class and artifact path, never
    the matched value. Diagnosis must distinguish a real build-host leak from a binary-scan false
    positive or head-sensitive/intermittent artifact before any owning build-layer remediation is
    authorized.
  • User, enterprise, security, or operational impact: An opaque fail-closed rejection can block
    unrelated exact-head delivery to dev. Guessing or weakening the scan would risk publishing
    sensitive data or masking binary false positives.
  • Severity and rationale: high delivery and package-integrity impact with correct fail-closed
    enforcement, contradictory reproduction evidence, and no evidence that a rejected artifact was
    released.
  • Affected acceptance journey and checkpoint: Not applicable — package integrity and CI
    diagnostics have no desktop interaction surface.

Do not include customer data, credentials, private endpoints, raw logs, prompts, or sensitive
screenshots. Link only to evidence that satisfies repository redaction and retention policy.

Reproduction contract

  • Preconditions and sanitized fixture: Clean checkout, Node.js 24.18.x, npm 11.16.x, pinned Rust
    toolchains, and GitHub-hosted macos-26 image 20260728.0273.1.
  • Minimal deterministic steps:
    1. Run npm ci --ignore-scripts.
    2. Run npm run native:package.
    3. Observe package validation scan
      Keiko Native.app/Contents/MacOS/keiko-native-desktop.
    4. If rejected, record only the bounded class, artifact path, exact head, image, worker, run, and
      attempt; never record the matched value.
  • Reproduction command: npm ci --ignore-scripts && npm run native:package
  • Actual result: PR Decide lifecycle authentication for GitHub static workflow graphs (#146) #148 head rejected on two attempts; PR fix(quality): diagnose macOS 26 package redaction (#149) #150 diagnostic head passed both the original run and its one provider-supported specific-job
    rerun on the exact same image/version, completing package and packaged-shell acceptance twice.
  • Expected result: Every build emits a redaction-clean package; a deliberately contaminated fixture
    is rejected with a bounded class and without the matched value.
  • Reproduction stability: intermittent/head-sensitive with measured evidence — 2/2 failures on
    the old exact head and 2/2 passes on the diagnostic exact head; no current-head recurrence was
    observed in the provider-supported matrix.
  • Smallest known affected boundary: Final executable package-byte redaction scan; the rejected class
    and its producing layer are unconfirmed.
  • Known unaffected boundary: Physical macOS 26.5.1 arm64 owner packages both heads cleanly; PR Decide lifecycle authentication for GitHub static workflow graphs (#146) #148
    macos-14 was green; PR fix(quality): diagnose macOS 26 package redaction (#149) #150 macOS 14 and macOS 26 package and acceptance lanes are green.
  • User-visible failure and recovery path: Not applicable — recovery requires evidence-backed clean
    rebuild or owning-layer correction, never a scan bypass or runner-image rollback.

This issue is limited to evidence-driven diagnosis plus safe diagnostic hardening until a denied
class and owning producer are confirmed. It does not assert an environment leak, binary false
positive, or production fix without evidence.

Scope

  • In scope: Failure-first hermetic fixtures for every denied class and hosted-runner-sensitive
    binary content; bounded redaction-class diagnostics that never expose matched values; one additional
    exact-head macOS 26 rerun on the accepted diagnostic head; classification of
    recurrence or bounded non-reproduction; owning-layer remediation only after the denied class and
    producer are confirmed; preservation of every denial; and physical-owner plus supported macOS
    14/26 proof.
  • Out of scope: Weakening, suppressing, skipping, or deleting package redaction; exposing or
    retaining matched values; pinning or rolling back a hosted runner image; changing
    supported-platform policy; speculative native/build fixes; native product behavior; lifecycle or
    ADR changes; dependencies or lockfiles; workflow topology, permissions, branch protection, or
    repository settings.
  • Suspected owning module or domain: quality/native-contract.mjs package-byte classification and
    diagnostics. quality/native-process.mjs productive Rust environment becomes an authorized fix
    owner only if bounded evidence confirms a build-host class produced there.
  • Trust boundaries, data classes, or privileged effects involved: Build-host filesystem paths,
    emails, endpoints, credential-shaped content, private-key markers, executable package bytes, CI
    logs, and release artifacts.
  • Regression and compatibility boundary: Preserve deterministic physical-owner packages, supported
    macOS 14/26 clean-checkout packageability, package structure, signing inputs, strict redaction
    classes, diagnostics redaction, and unrelated native behavior.

Execution Authority

The repository-wide defaults in AGENTS.md apply and are not repeated here.

  • Authorized repository: oscharko-dev/Keiko-Native
  • Exact delivery target: dev
  • Allowed write scope: quality/native-process.mjs, quality/native-process.test.mjs,
    quality/native-contract.mjs, quality/native-package.mjs, and
    quality/native-package-contract.test.mjs
  • Additional prohibited paths or actions: No workflow, native/product source, dependency,
    lockfile, lifecycle, ADR, permission, branch-protection, repository-setting, supported-runner,
    signing-policy, or unrelated quality-gate change. Never log, upload, comment, or persist a raw
    matched value.
  • Authorized external mutations: Issue and pull-request planning/evidence comments; read-only
    GitHub run/job inspection; ordinary draft pull-request checks; and one explicit rerun of
    the exact accepted diagnostic head's macOS 26 job to settle measured recurrence. No other rerun,
    label/status mutation beyond this issue's accepted lifecycle requests, queue, auto-merge, merge,
    dev update, or repository-setting effect by the implementation agent.
  • Required credentials or secrets: Existing authenticated maintainer environment for read-only
    GitHub evidence and ordinary branch/PR publication; credentials are never inspected, printed,
    copied, or persisted.
  • Delivery authority: human-only manual merge to dev
  • Additional stop or escalation conditions: Stop if recurrence identifies an owning production path
    outside the allowed write scope, if a fix requires a workflow/dependency/platform-policy change,
    if diagnostics cannot remain value-free, if any denial must be weakened, if measured evidence
    remains ambiguous after the bounded matrix, or if the current contract version lacks an exact
    accepted readiness record.

The executing agent chooses a dedicated source branch using its own runner prefix. It must include
the issue number, remain unique to this issue, and be recorded in the pull request. An agent must
never merge, enable auto-merge, enqueue, push, or update dev.

Quality Plan

  • Applicable Code Quality Standard sections: Correctness and contracts; failure and recovery;
    security and privacy; observability and evidence; bounded resources; deterministic build and
    package behavior; machine acceptance; regression testing.
  • Failure-first regression evidence required: A fixture at the real package-validation seam embeds
    representative content for each denied class and proves the previous rejection lacked an
    actionable bounded class; the corrected fixture remains rejected, identifies only the class, and
    contains no raw matched value in captured diagnostics.
  • Positive, negative, boundary, hostile, unauthorized, unavailable, cancellation, partial-failure,
    and recovery paths to cover: Clean binary; every denied class; overlapping classes; plain and
    algorithm-prefixed private-key markers; empty and malformed artifact; binary bytes; hostile
    newline/control content; unavailable package path; scan failure; value-free diagnostic capture;
    and clean rebuild evidence. Cancellation and authorization are excluded because the bounded
    package subprocess performs no network or privileged external mutation.
  • Required unit, contract, architecture, integration, production-composition, and end-to-end tests:
    Focused native process/package contract tests, complete local quality suite, physical macOS 26
    owner package command, one original exact-head macOS 14/26 run, and one authorized
    macOS 26 job rerun on the diagnostic exact head.
  • Required security, accessibility, performance, resource, visual, platform, or manual evidence:
    Independent redaction/privacy audit; supported macOS evidence; signed exact-head checks; bounded
    recurrence matrix with exact image/worker/run facts. Accessibility, visual, and interactive
    journey evidence are excluded because no user-facing surface changes.
  • Explicit exclusions with rationale: No product/native behavior, UI, dependency, workflow, release
    signing, or lifecycle change; the defect is confined to evidence-driven package-byte diagnosis
    and value-free diagnostics unless a producing owner is proven.

Acceptance criteria

  • AC1 — Failure-first fixtures at the production package-validation seam prove every denied
    class remains rejected; diagnostics name only fixed bounded classes and artifact paths and never
    contain matched values.
  • AC2 — A bounded two-run diagnostic-head macOS 26 matrix is recorded on the exact hosted
    image. If a failure recurs, its bounded class and producer are confirmed and fixed at the owning
    layer. If both runs pass, the old rejection is settled as head-sensitive/non-reproducible
    within the measured matrix and no speculative build-layer fix is made.
  • AC3 — Malformed, hostile, unavailable, overlapping-class, plain private-key, and clean package
    cases remain deterministic and fail closed where applicable; no regex, gate, trust boundary, or
    supported platform is weakened or bypassed.
  • AC4 — Focused tests, complete local green bar, physical-owner package proof, signed exact-head
    macOS 14/26 checks, independent privacy audit, and zero unresolved review conversations establish
    the bounded outcome without unrelated changes.

Verification commands

node --test quality/native-process.test.mjs quality/native-package-contract.test.mjs
npm ci --ignore-scripts
npm run native:package
npm run quality
npm audit --audit-level=high

Audit plan

  • Required independent audit dimensions: Diagnostic value redaction, denied-class preservation,
    regex-on-binary behavior, false-positive risk, path normalization, package scan completeness,
    hostile fixtures, supported-platform parity, deterministic outputs, and scope containment.
  • Owning runtime paths and neighboring defect-class paths to inspect: Productive Rust environment,
    Cargo/Rust path remapping, subprocess environment inheritance, executable build, package assembly,
    recursive package scan, redaction classification, binary boundary behavior, and error
    serialization.
  • Evidence required to settle confirmed findings: Baseline failure; bounded class fixtures; exact
    image/worker/run recurrence matrix; focused and complete local green bar; physical-owner package;
    exact-head macOS 14/26 checks; independent audit; zero unresolved findings.

Definition of Ready

  • Accepted and observed behavior, impact, authority, affected boundary, and non-goals are clear.
  • The finding is reproducible, or the issue is explicitly limited to diagnosis.
  • Acceptance criteria, Quality Plan, Execution Authority, and deterministic commands are
    complete.
  • No unsupported root-cause or fix claim is presented as fact.

Completion and review settlement

  • Failure-first evidence and the bounded diagnosis are recorded.
  • Acceptance criteria and Quality Plan pass on the exact current head.
  • The affected defect class and meaningful neighboring paths were audited.
  • Confirmed findings are resolved, human-accepted, or linked to a scoped non-blocking follow-up.
  • Documentation, known limitations, and residual risks match the measured outcome.

Stop conditions

  • Stop when the current contract version does not match its automated readiness record.
  • Stop when reproduction evidence contradicts the accepted behavior or expands the affected scope.
  • Stop when a suspected cause is unconfirmed or the owning layer cannot be identified.
  • Stop when a fix would weaken a gate, trust boundary, compatibility guarantee, or unrelated
    behavior.
  • Stop when diagnosis requires customer data, an undeclared secret, or an unauthorized external
    mutation.

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

    status: readyReady for implementationtype: defectReproducible defect or user finding that restores accepted behavior

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions