Repository navigation
Description
🤖 Generated by the Agentic Engineer
User Story
As a portfolio maintainer,
I want alert signals to create or update an actionable incident issue in the affected product's repository,
So that I am notified and the engineer can investigate and fix it where the work belongs without exposing sensitive evidence.
Summary and motivation
Deliver the alert-transport migration for devantler-tech/monorepo#4053. This is not a detector-removal project or a central alert inbox. Preserve the existing controlled proof in #2755 rather than creating a competing test framework.
Proposed Solution
Adapt the current Coroot, Flux, Alertmanager and direct-check transports through maintained integrations where suitable, or a small authenticated adapter where they cannot meet the requirements. Reuse the existing organization GitHub App for issue/comment publishing; native integrations requiring another App are exceptions to justify, not the default. Route using reviewed product ownership configuration, never a destination chosen by alert text. Preserve meaningful grouping, grace periods, detection, runtime-alert ingestion/dashboard behavior and the independent off-cluster heartbeat.
One incident maps to one owning-repository issue, reusing an existing issue covering it where appropriate. Bounded significant updates stay in that issue. Trustworthy recovery updates the incident; unresolved remediation stays open. Mention the maintainer on actionable initial messages, not every repeated scrape. Assignment remains real ownership.
Acceptance Criteria
- Inventory and map every currently active Slack alert route at implementation time. Track private and runtime-local routing dependencies privately; declared configuration does not prove live destination or delivery.
- Select and document maintained native integrations/adapter reuse before adding a bespoke service. Flux's GitHub commit-status provider is not mistaken for generic GitHub issue creation.
- Use the verified existing organization App publishing path with notification-scoped installation tokens, reviewed repository routing and authentication; reject unknown ownership/visibility rather than guessing.
- Compare integrations against the epic's smallest-justified-App-set target. If a heartbeat or alert integration requires another App, document why the existing App and a supported webhook/adapter cannot deliver the same outcome safely before adopting it. Preserve any justified third-party App requirement rather than forcing insecure consolidation.
- Public issue titles/bodies/comments contain only safe actionable fields. Never forward raw logs, labels, annotations, URLs, credentials, internal topology or private-source evidence.
- Wrong-owner, unknown-field, injected-destination and sensitive-data-canary tests fail closed. Private issues/configuration are not copied onto the public project.
- Concurrent/repeated firing, meaningful transitions, recovery, recurrence, rate limits, token expiry and ambiguous writes do not cause incident spam or false delivery receipts; retries have bounded durable handling.
- Preserve Alertmanager functions that are still needed, plus current detectors, grace/grouping behavior and coverage. Retirement must not silence useful signals.
- Keep the lost-heartbeat path outside the cluster and record any non-Slack urgent fallback decision. GitHub delivery is not claimed to be guaranteed emergency paging.
- Land default-off, test both delivery states, then activate route-by-route with rollback available and the controlled notification proof from Prove controlled detector-to-GitHub alert delivery #2755.
- Confirm correct-repository bot issue/comment creation, actual inbox/phone notification and same-thread follow-up. API success alone is not phone-delivery proof.
- Merge and verify all route cutovers before retiring obsolete Slack integrations/credential copies; follow staged destructive-change and shared-credential handoff rules.
Dependencies and flow
Depends on the verified notification publisher/App path from the maintainer-conversation delivery issue. #2755 owns the controlled final detector-to-GitHub proof.
Priority: High. Effort: Large. This delivery is underway following the maintainer's direct request. #5291 and #5294 prepare the disabled publisher; route cutovers and the observed inbox/phone proof in #2755 remain required before transport retirement.
Evidence and reuse candidates
Current public alerting runbook, Flux Provider behavior, and Healthchecks GitHub Issues integration. The latter is a candidate for the off-cluster heartbeat, not proof that mentions, privacy or recovery behavior meet the migration requirements.
GitHub App convergence — maintainer direction 2026-10-09
Reuse the existing organization GitHub App first. Minimize the number of Apps supporting the development process; additional Apps require an evidenced limitation, not a separate App per workflow. Consolidate only after consumer-by-consumer verification, preserving least privilege and existing trust boundaries. This tracking update does not install, uninstall or change any App or credential.
GitHub installation-token scoping allows narrower repository and permission access than the App installation itself. Token isolation is preferred where it meets the requirement; it is not a claim that the current installation has been audited.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Start date
Target date
Effort
Projects
- StatusShow more project fields🏃🏻♂️ In Progress
Activity
devantler commentedon Oct 25, 2026
The supported native Healthchecks GitHub integration does not satisfy this migration's privacy and incident-lifecycle contract. At reviewed upstream revision
59caeef534d5f8151fd42da529c08fad6c719be2, its transport ignores non-down transitions and posts a new issue for each handled down event. This path has no incident reuse, recovery update or ambiguous-write reconciliation. Its message template includes check/project metadata, tags and optional raw ping text, while its setup form exposes repository and label selection rather than the required safe-message and lifecycle controls.This is supported-source capability evidence, not an attestation of the hosted service's exact deployed revision. It supports retaining the narrowly scoped existing-organization-App publisher approach rather than weakening privacy or treating native issue creation as the complete replacement. Current heartbeat coverage remains active; no integration assignment, App grant, key or notification changed during this verification. Off-cluster durable state and the controlled inbox/phone proof remain open requirements.
devantler commentedon Oct 25, 2026
The disabled publisher source in #5294 has now passed its exact-head checks/review, protected queue CI, production deployment and final queue-membership check, and merged. #5305 also merged; its single reviewed-main identity probe run 40165520781 succeeded against the existing organization App, verified repository/token scoping and revoked only its probe-owned token. This is actual provider proof, beyond the publisher's synthetic fixtures.
The transport migration remains open. Before activation it still needs a cluster-independent durable conditional-write journal and crash/ambiguity proof, the fixed heartbeat binding, detector-by-detector cutover with rollback, and the controlled inbox/phone/same-thread acceptance in #2755. Authenticated read-only storage inspection resolves part of the retention/exposure inventory, but establishes neither credential custody nor a working journal. Existing heartbeat and notification coverage remains active. No App, integration or shared credential has been retired.
devantler commentedon Oct 27, 2026
The external-heartbeat route now delivers through the existing supported Healthchecks GitHub integration. Its deliberate test created #5472, and the maintainer confirmed receiving the GitHub notification. The test-only issue is annotated and closed. Slack was then reversibly unassigned from this check; its saved integration remains available for rollback.
This reuses an existing integration and preserves delivery outside the cluster without adding another in-cluster dependency or installing another App. The public payload was checked for safe fixed check metadata and a cloaked details link; it contains no ping credential. The existing organization publisher remains the intended path for cluster detectors.
This receipt covers only initial external-heartbeat notification. It does not complete detector repeat/recovery and same-thread reply proof in #2755, phone-specific acceptance, or the remaining live Slack route inventory and cutovers.
devantler commentedon Nov 3, 2026
The journal's first native provider trial 41588714565 passed at the exact prepared publisher revision
19accd41ee1e12493b7d56ddf175dde3efb7ce00; its encrypted capture was independently authenticated. It covers restricted authentication, conflicting writers, a lost acknowledgement after a committed write and process-exit recovery. Cloudflare #66 is merged, and #5329 has been promoted and entered the protected queue once. No production route was activated.The proof required no additional permanent token. For ongoing access, the existing operator's maintained Webhook generator and generator-backed PushSecret rotation provide a candidate for renewing short-lived access into approved private custody. That integration is not deployed or proved yet; atomic credential publication, expiry/failure behavior and recovery must be evaluated before activation. Current live route inventory was partly refreshed read-only, but pipeline-only integration facts remain unverified. Preserve existing delivery until route-by-route cutover and #2755 acceptance pass.
chore: agent-claim #4683 nonce=3d513cb06ad11e30aeac8869cb493bba
chore: agent-claim #4683 nonce=42fea65149ff3313f2aa3f1c4a95e025
chore: agent-claim #4683 nonce=732edb0a4b558f5c9a2b73c5e57725a5
chore: agent-claim #4683 nonce=895287bfb34f2c6303634ab5ee9054f9
chore: agent-claim #4683 nonce=2bbbdb50dd6a300d4b5e2665835d712e