2026-08-04 - 2026-09-04

Overview

77 Active Pull Requests
105 Active Issues
Excluding merges, 2 authors have pushed 51 commits to main and 187 commits to all branches. On main, 267 files have changed and there have been 54023 additions and 3027 deletions.

2 Releases published by 1 user

Published v26.15.0 2026-08-29 22:28:14 +02:00

Published v26.14.0 2026-08-05 08:13:22 +02:00

71 Pull requests merged by 2 users

Merged #906 fix(876): sweep session narrative out of hooks, workflows, scripts, tests and code comments; grow the detector to the process corpus 2026-09-03 21:26:04 +02:00

Merged #905 fix(869,893): re-establish the 1.25.4-dated CI claims on 1.27.1, and settle the page_statuses asymmetry from source 2026-09-02 22:20:45 +02:00

Merged #903 fix(891): a sourced path is code, so every hook resolves it from its own tree 2026-08-30 23:41:20 +02:00

Merged #902 fix(855): two glob dialects cannot be canonicalised into one, so model one shape and refuse the rest 2026-08-30 21:25:24 +02:00

Merged #899 fix(887): the image build builds the SPA and does not test it 2026-08-30 18:06:22 +02:00

Merged #898 docs(release): record the v26.15.0 release notes 2026-08-30 17:25:59 +02:00

Merged #897 fix(858,859): a rule the classifier cannot read is not a rule that matches nothing 2026-08-30 13:33:51 +02:00

Merged #896 fix(870): an empty timeline page is not exhaustion — the walk reads to its cap 2026-08-30 13:29:39 +02:00

Merged #892 fix(880): an absent recurrence array means unrestricted, an explicit [] is rejected 2026-08-30 11:29:03 +02:00

Merged #890 fix(849): the verdict gate replaces every unknown state, and proves the clauses that claim to 2026-08-30 07:55:11 +02:00

Merged #889 fix(845): the verdict writer checks that the gate will honour what it just posted 2026-08-30 04:43:09 +02:00

Merged #888 docs(853): workflow_dispatch can't be ref-restricted at 1.27.1 — and restricting it would close nothing 2026-08-30 03:18:05 +02:00

Merged #884 fix(836): never pass --depth to a checkout that may already be complete 2026-08-30 01:55:30 +02:00

Merged #883 fix(820): derive where Complete<T> is APPLIED, not just what it means 2026-08-30 00:06:39 +02:00

Merged #882 fix(812): classify the narrative sites by who-benefits; keep the detector's reach 2026-08-29 22:28:15 +02:00

Merged #879 fix(823,824): a scheduling NULL collection reads as UNRESTRICTED and is guarded at both read sites; the Elastic indexer gets its own mutation proof 2026-08-29 21:55:55 +02:00

Merged #875 fix(819): derive the SPA page-size guard population from the git index 2026-08-29 11:14:16 +02:00

Merged #874 fix(809,822): isolate the suite from the production hook-fire log by construction 2026-08-29 04:32:27 +02:00

Merged #873 fix(803,664): fence the HEAD alias on the PR timeline's pull_push count 2026-08-29 01:29:48 +02:00

Merged #872 fix(786,789): workflows declare their own per-job metadata; guard populations derive from it 2026-08-28 22:54:54 +02:00

Merged #871 docs(796): verification code is code under test — and the proof it was claiming an exemption from 2026-08-28 22:06:46 +02:00

Merged #868 fix(763): page both /statuses/{sha} reads to a validated terminator 2026-08-28 19:34:49 +02:00

Merged #867 docs(747): re-verify the Gitea 1.25.4-pinned CI claims on 1.27.1, and measure the merge-gate semantics that were source-attested 2026-08-28 18:51:14 +02:00

Merged #866 probe(747c): DO NOT MERGE 2026-08-28 16:55:51 +02:00

Merged #864 probe(747a): DO NOT MERGE 2026-08-28 16:54:17 +02:00

Merged #863 probe(747): absent required status context — DO NOT MERGE 2026-08-28 16:52:20 +02:00

Merged #862 docs(781,799): re-measure the tooling audit from a derived population, and adopt serena 2026-08-28 16:37:35 +02:00

Merged #861 fix(787): derive the dropped-step guard's scope, and reconcile its snapshot against the server 2026-08-28 00:37:05 +02:00

Merged #860 fix(748): declare permissions: on all six workflows, and prove the declaration binds 2026-08-28 00:02:47 +02:00

Merged #857 fix(744,835): ci-image.yml publishes from main only; guard persist-credentials with no exemption 2026-08-27 22:44:45 +02:00

Merged #850 fix(742): inherit an h10 verdict only from an allow-listed reviewer 2026-08-27 04:52:03 +02:00

Merged #847 feat(735): bound the numeric FFmpeg profile fields with a 422, and expose readrate pacing 2026-08-27 00:05:39 +02:00

Merged #846 fix(788): one declarative H10 verdict vocabulary, derived by both sides 2026-08-26 22:58:10 +02:00

Merged #843 feat(732): On Now / Next gets a background box, and is on by default 2026-08-26 21:28:26 +02:00

Merged #842 fix(746): drop the persisted checkout credential; unmask the base-ref fetches 2026-08-26 20:50:57 +02:00

Merged #841 feat(734): field-level progressive disclosure — shared FieldHelp trigger + panel 2026-08-26 20:05:54 +02:00

Merged #838 docs(755): ersatztv owns the fork code, media-management owns channel operations 2026-08-26 19:29:17 +02:00

Merged #834 docs(708): record the live route-2 reproduction against PR #761 2026-08-26 11:11:24 +02:00

Merged #833 fix(690,758): count the same query a paged handler pages 2026-08-26 09:39:25 +02:00

Merged #831 fix(721,740): align Auto-Tune proposal rows on a grid; guard AddItemsDialog's async searches 2026-08-25 23:55:24 +02:00

Merged #827 fix(807): SPA full-replace bodies are built as Complete<T>, with a derived guard over droppable request members 2026-08-23 02:58:21 +02:00

Merged #826 fix(701): guard SongMetadata's nullable primitive collections at the read site 2026-08-23 01:24:42 +02:00

Merged #825 fix(772,792): name the missing toolchain image; stop a refusal leaving a verdict comment 2026-08-23 01:05:36 +02:00

Merged #818 fix(806): guard populations over FILES derive from the git index, not a filesystem walk 2026-08-22 18:07:59 +02:00

Merged #817 docs: a cancelled job reads as failure where a monitor actually looks 2026-08-22 15:35:22 +02:00

Merged #815 feat(790): execute every MUTATION grade instead of asserting it 2026-08-22 15:12:16 +02:00

Merged #814 fix(780): reconcile the ruff gate with #784, merged in parallel 2026-08-22 11:34:05 +02:00

Merged #813 feat(780): commit a ruff config and enforce it in CI 2026-08-22 02:33:20 +02:00

Merged #811 feat(784): a doc records the end state — generalize the no-session-narrative rule 2026-08-22 02:23:24 +02:00

Merged #810 test(785): mutation proofs for the three unproven ranked guards 2026-08-21 22:10:02 +02:00

Merged #808 feat(779): test the deny path at the production config value, and derive full-replace field lists 2026-08-21 21:22:31 +02:00

Merged #802 feat(778): name the check-and-use race, and verify the protection the merge gate rests on 2026-08-21 19:04:14 +02:00

Merged #801 feat(794): witness a fix's test failing BEFORE the fix, and check the claim in CI 2026-08-16 12:25:00 +02:00

Merged #800 docs(781): re-measure §5.3 from a derived population — the zeros split four ways 2026-08-16 10:02:16 +02:00

Merged #795 feat(776): every hook reports that it fired, and the report is measured 2026-08-14 21:11:05 +02:00

Merged #798 fix: the BOM guard was fail-open wherever xxd is not installed 2026-08-14 18:51:00 +02:00

Merged #793 fix(777): repair both broken LSPs, and name the surface a subagent can actually reach 2026-08-14 17:55:21 +02:00

Merged #762 chore(deps): update dependency scriban.signed to 7.2.6 2026-08-14 17:26:38 +02:00

Merged #791 feat(774,775): one rule for guard populations, one for guard proofs — both enforced 2026-08-14 01:17:58 +02:00

Merged #782 docs(773): root-cause the recurring defect shapes across the full closed-issue corpus 2026-08-13 21:16:51 +02:00

Merged #770 fix(767): gate the release path on the delimiter ban with a prerequisite job 2026-08-13 20:04:53 +02:00

Merged #769 docs(720): name all three Komodo stacks and the label-based resolution rule 2026-08-11 21:26:08 +02:00

Merged #768 fix(756): extend the dropped-step guard to docker-build.yml's required jobs, where a drop is fail-OPEN 2026-08-11 01:35:09 +02:00

Merged #764 fix(751): a stray expression delimiter in a COMMENT killed the verdict gate — plus the two nil-slice twins and a dead-code guard it hid 2026-08-10 21:33:34 +02:00

Merged #760 fix(754,757): declare graphicsElementIds + padToNearestMinute, and pin every MCP tool to its OpenAPI contract 2026-08-06 22:42:37 +02:00

Merged #749 fix(743): make review-verdict/h10 unskippable — disable direct push to main + admin force-merge; fix(719) tag-only push 2026-08-06 00:58:17 +02:00

Merged #745 fix(697): scope CI's registry credential so head-resolved workflows cannot forge review-verdict/h10 2026-08-05 21:56:53 +02:00

Merged #741 fix(685): AddItemsDialog resolves by search instead of windowing the whole media-library type 2026-08-05 20:02:00 +02:00

Merged #739 docs(release): record the v26.14.0 release notes 2026-08-05 08:13:23 +02:00

Merged #725 fix(674,688): cross-check decision frontmatter against PyYAML; split the ceiling calibration claim 2026-08-04 23:43:10 +02:00

Merged #737 fix(726): let a lagging realtime input catch up so a sparse bitmap-subtitle stream can't pin it below realtime 2026-08-04 23:24:12 +02:00

6 Pull requests proposed by 2 users

Proposed #761 chore(deps): update dependency meziantou.analyzer to 3.0.195 2026-08-10 05:03:18 +02:00

Proposed #804 chore(deps): update dependency sqlitepclraw.bundle_e_sqlite3 to 3.0.5 2026-08-17 05:02:28 +02:00

Proposed #805 chore(deps): update dependency system.commandline to 2.0.11 2026-08-17 05:03:21 +02:00

Proposed #828 chore(deps): update dependency cliwrap to 3.10.5 2026-08-24 05:04:28 +02:00

Proposed #829 chore(deps): update lucene.net to 4.8.0-beta00018 2026-08-24 05:05:45 +02:00

Proposed #878 fix(830): a write failure reports to a surface that outlives the dialog that started it 2026-08-29 19:33:02 +02:00

79 Issues closed from 1 user

Closed #876 docs.no-session-narrative reaches hooks and code comments, but nothing has ever swept them — 4 known sites 2026-09-03 21:26:05 +02:00

Closed #893 page_statuses still terminates on its first empty page — is /statuses/{sha} subject to #870's post-pagination filtering? 2026-09-02 22:20:46 +02:00

Closed #869 Finish the 1.25.4-dated CI claim sweep #747 deliberately did not complete 2026-09-02 22:20:45 +02:00

Closed #891 ETV_HOOK_FIRE_LIB is SOURCED from an env-var path in 12 hooks — a decoy tree's code runs inside the gate 2026-08-30 23:41:20 +02:00

Closed #855 Nothing couples ci-image.yml's push.paths to ci-image-pin's expected pathspec 2026-08-30 21:25:24 +02:00

Closed #887 Every image build fails: completeAnnotations.guard.test.ts needs the git index, and the Dockerfile's exclude list is hand-maintained 2026-08-30 18:06:23 +02:00

Closed #900 chore(release): cut and promote v26.15.0 on 736649b3b (main head could not build an image) 2026-08-30 17:29:20 +02:00

Closed #858 pretooluse-merge-consent.sh resolves its verdict classifier from $CLAUDE_PROJECT_DIR — an env var as a security input 2026-08-30 13:33:52 +02:00

Closed #859 Merge-gate branch-protection read: a malformed rule states a cause that did not happen, and the endpoint is now fetched twice 2026-08-30 13:33:51 +02:00

Closed #870 The timeline walk's null terminator is defeatable: Gitea pages BEFORE it filters, so a page of inline-code comments reads as exhaustion 2026-08-30 13:29:39 +02:00

Closed #880 Schedule-item recurrence fields: an omitted array means "never applies" on write but "unrestricted" on read 2026-08-30 11:29:03 +02:00

Closed #849 review-verdict.yml post-write verification: three routes that leave an exemption success over a human failure 2026-08-30 07:55:12 +02:00

Closed #845 post-review-verdict.sh does not check that its own account is on the gate's H10_REVIEWERS allow-list 2026-08-30 04:43:09 +02:00

Closed #886 release.verdict-vocabulary-shared explains the sentinel with a set -u mechanism that measurement refutes 2026-08-30 03:30:53 +02:00

Closed #853 workflow_dispatch still loads attacker YAML from an arbitrary ref — four workflows, no ref restriction 2026-08-30 03:18:05 +02:00

Closed #836 :latest images ship InformationalVersion 0.0.0 — a --depth=2 fetch grafts the build job's full clone shallow 2026-08-30 01:55:30 +02:00

Closed #820 Complete<T> proves its semantics but not its APPLICATION — nothing derives the set of SPA full-replace construction sites 2026-08-30 00:06:40 +02:00

Closed #812 Remediate the 21 session-narrative sites #784's sweep found — 21 judgements, not a regex 2026-08-29 22:28:16 +02:00

Closed #823 Scheduling collection-valued columns: is a runtime null reachable on DaysOfMonth / MonthsOfYear / DaysOfWeek? 2026-08-29 21:55:58 +02:00

Closed #824 ElasticSearchIndex.UpdateSong has no regression test — an Elastic-only reintroduction of the #701 mutation stays CI-green 2026-08-29 21:55:58 +02:00

Closed #819 The SPA page-size guard enumerates web/src with a Vite glob while claiming completeness 2026-08-29 11:14:16 +02:00

Closed #809 The production-hook-fire-log isolation guard is per-test, but its claim is per-suite 2026-08-29 04:32:28 +02:00

Closed #822 test_the_suite_does_not_write_to_the_PRODUCTION_log uses global mutable state as its oracle — any concurrent session reddens it 2026-08-29 04:32:28 +02:00

Closed #664 pr-changed-files.sh head binding cannot see an A→B→A force-push across its paging round-trips 2026-08-29 01:29:49 +02:00

Closed #803 Head-ABA: a force-push H1->H2->H1 during paging defeats pr-changed-files.sh, and three contracts still deny it 2026-08-29 01:29:48 +02:00

Closed #789 Derive the CI toolchain population from workflow-owned metadata, not TOOLCHAIN_JOBS 2026-08-28 22:54:55 +02:00

Closed #786 Extend the machine-checked guard inventory to inline workflow-job guards 2026-08-28 22:54:54 +02:00

Closed #796 A verification harness is itself unproven code — five false greens, each created by the fix for the last 2026-08-28 22:06:46 +02:00

Closed #763 Page both /statuses/{sha} reads in review-verdict.yml — limit clamps to 50, so the post-write race check can miss a raced verdict 2026-08-28 19:34:49 +02:00

Closed #747 Re-verify the Gitea 1.25.4-pinned CI claims after the 1.27.1 upgrade 2026-08-28 18:51:15 +02:00

Closed #781 Plugin/MCP config hygiene: retire what is enabled and never invoked, de-duplicate the gitea server 2026-08-28 16:37:36 +02:00

Closed #799 serena is enabled and starts fine, but its tools never reach a session — establish why, then use or disable it 2026-08-28 16:37:36 +02:00

Closed #787 The dropped-step guard's SCOPE is a dated comment, not a check, against branch protection 2026-08-28 00:37:08 +02:00

Closed #748 Declare permissions: on the status-writing workflows so the Gitea Restricted token default can be enabled 2026-08-28 00:02:47 +02:00

Closed #744 ci-image.yml's push trigger has no branches: filter — any branch push runs attacker YAML on a docker-capable runner 2026-08-27 22:44:46 +02:00

Closed #835 Guard the persist-credentials convention — after #744, with no exemption list 2026-08-27 22:44:46 +02:00

Closed #742 Tighten review-verdict.yml provenance from "non-null creator" to an allow-list of approved reviewers 2026-08-27 04:52:04 +02:00

Closed #735 Validate FFmpeg profile numeric fields to sane ranges instead of silently transforming them, and expose readrate pacing as a bounded field 2026-08-27 00:05:39 +02:00

Closed #788 One shared verdict vocabulary instead of two shell copies plus a parity test 2026-08-26 22:58:11 +02:00

Closed #732 On Now / Next overlay: give it a boxed background for legibility, and enable it on all channels by default 2026-08-26 21:28:27 +02:00

Closed #746 docker-build.yml checkouts should set persist-credentials: false — after the || true fetch masking is removed 2026-08-26 20:50:58 +02:00

Closed #734 SPA: field-level progressive disclosure — short summary → hover popup → (future) deep-dive docs link 2026-08-26 20:05:55 +02:00

Closed #755 Project boundary: ersatztv owns the fork code, media-management owns channel operations 2026-08-26 19:29:18 +02:00

Closed #708 Reproduce #698 route 2 live: push code onto a renovate-authored PR branch and confirm the manifest allow-list refuses the exemption 2026-08-26 11:11:25 +02:00

Closed #690 Rerun collections: paged list TotalCount ignores the search query, so the SPA renders empty pages 2026-08-26 09:39:25 +02:00

Closed #758 GetPagedPlayouts: TotalCount ignores the query filter, so a filtered page reports the unfiltered total 2026-08-26 09:39:25 +02:00

Closed #721 Auto-Tune proposal rows should be a grid — channel numbers do not line up, and the name renders twice 2026-08-25 23:55:25 +02:00

Closed #740 AddItemsDialog.runSearch has no stale-response or is-mounted guard (pre-existing, surfaced during #685) 2026-08-25 23:55:25 +02:00

Closed #807 The SPA's hand-built request objects can silently drop an OPTIONAL DTO field 2026-08-23 02:58:23 +02:00

Closed #701 Search indexers mutate SongMetadata.Artists on a possibly-tracked entity (??= []) — same shape rejected in #691 2026-08-23 01:24:43 +02:00

Closed #792 post-review-verdict.sh exits 0 when it deliberately writes NO status 2026-08-23 01:05:37 +02:00

Closed #772 The pinned CI toolchain image can vanish from the registry and take ALL container CI down, with no signal but a pull error 2026-08-23 01:05:36 +02:00

Closed #806 Guard populations over FILES should derive from the git index, not a filesystem walk 2026-08-22 18:07:59 +02:00

Closed #790 An executable clause-level mutation harness for the shell and python guards 2026-08-22 15:12:17 +02:00

Closed #780 Reconcile Python tooling: commit a ruff config and enforce it, or stop claiming we enforce it 2026-08-22 02:33:21 +02:00

Closed #784 Generalize the no-session-narrative rule from the kickoff file to all docs — the reader never saw the earlier draft 2026-08-22 02:23:25 +02:00

Closed #785 Mutation proofs for the 19 unproven guards, worst-consequence first 2026-08-21 22:10:03 +02:00

Closed #779 Test the deny path with the production config value, and assert full-replace field lists 2026-08-21 21:22:32 +02:00

Closed #778 Audit read-then-write against live remote state: pin a version or use compare-and-set 2026-08-21 19:04:15 +02:00

Closed #794 A fix ships a test witnessed failing BEFORE the fix — mechanise it by reverting the code side and asserting red 2026-08-16 12:25:01 +02:00

Closed #776 Make hooks report that they fired — PreToolUse/PostToolUse execution is currently unobservable 2026-08-14 21:11:06 +02:00

Closed #797 pretooluse-bom-guard.sh is fail-open wherever xxd is not installed — including the CI runner 2026-08-14 18:51:00 +02:00

Closed #777 csharp-lsp and typescript-lsp are broken; the "workflow agents must use csharp-lsp" guidance is stale 2026-08-14 17:55:22 +02:00

Closed #774 Guard convention: derive the expected set from the authoritative source and assert equality — never filter, never sample 2026-08-14 01:17:58 +02:00

Closed #775 Every guard ships with a proof it can go red: delete that guard alone, the suite must fail 2026-08-14 01:17:58 +02:00

Closed #773 Root-cause the recurring defect shapes across closed issues, then build hooks/tooling that make them hard to repeat — plus an audit of the tooling we already have and don't use 2026-08-13 21:16:53 +02:00

Closed #767 Make the delimiter ban fail-CLOSED on the release path — build's Smoke step is still droppable on a v* tag push 2026-08-13 20:04:53 +02:00

Closed #720 docs(ci-cd): a Komodo stack named ersatztv now exists on jazz — and it is NOT prod 2026-08-11 21:26:08 +02:00

Closed #756 Extend the dropped-step guard to docker-build.yml's required jobs, where a dropped step is fail-OPEN 2026-08-11 01:35:09 +02:00

Closed #751 review-verdict.yml's classify/post step never executes — job goes green, review-verdict/h10 is never posted automatically 2026-08-10 21:33:34 +02:00

Closed #754 MCP ersatztv_update_channel omits graphicsElementIds — cannot set the On Now/Next overlay, and silently strips it 2026-08-06 22:42:38 +02:00

Closed #757 MCP tool catalog: query parameters are unguarded — list_playouts omits query, get_playout_items omits showFiller 2026-08-06 22:42:38 +02:00

Closed #719 H11 pre-push guard blocks a tag-only push, on every release cut 2026-08-06 00:58:18 +02:00

Closed #743 review-verdict/h10 is bypassable without forging it: direct pushes to main are server-side permitted 2026-08-06 00:58:17 +02:00

Closed #697 ETV_STATUS_AUTH can write commit statuses, so any head-resolved workflow can still forge review-verdict/h10 2026-08-05 21:56:53 +02:00

Closed #685 CollectionsScreen AddItemsDialog windows the whole media-library type on an empty query, with no truncation surfaced (§3b deviation) 2026-08-05 20:02:00 +02:00

Closed #674 decisions_validate.py stays green on frontmatter PyYAML rejects — an apostrophe in a single-quoted scalar (hit twice in one session) 2026-08-04 23:43:11 +02:00

Closed #688 decisions_validate ceiling calibration test is one line from red — any record ≥61 prose lines fails script-tests 2026-08-04 23:43:11 +02:00

Closed #726 Embedded BITMAP subtitle (PGS/DVD) burn-in + -readrate halves transcode to 0.53x realtime — Live TV buffering 2026-08-04 23:24:13 +02:00

94 Issues created by 1 user

Opened #726 Embedded BITMAP subtitle (PGS/DVD) burn-in + -readrate halves transcode to 0.53x realtime — Live TV buffering 2026-08-04 21:19:07 +02:00

Opened #727 FFmpeg version health check warns on our own bundled FFmpeg — hardcoded 7.1.1 vs bundled 8.1.2 2026-08-04 21:19:26 +02:00

Opened #728 Channels list: row checkbox renders a visible "Select &lt;channel name&gt;" label, duplicating the name column 2026-08-04 21:19:34 +02:00

Opened #729 Channel edit → Branding: logo renders broken — detail endpoint returns a relative logo path, list endpoint returns absolute 2026-08-04 21:21:17 +02:00

Opened #730 Settings → System: stale "managed in the legacy UI" copy pointing at a UI removed in #91b, and it renders as a dead link 2026-08-04 21:23:48 +02:00

Opened #731 Dashboard "On air now": channel logo never rendered — ChannelLogo is called without src, always falling back to initials 2026-08-04 21:27:35 +02:00

Opened #732 On Now / Next overlay: give it a boxed background for legibility, and enable it on all channels by default 2026-08-04 21:39:41 +02:00

Opened #733 dvbsub/dvb_subtitle are missing from both IsImage lists, so DVB bitmap subtitles are routed down the text/libass path 2026-08-04 22:16:19 +02:00

Opened #734 SPA: field-level progressive disclosure — short summary → hover popup → (future) deep-dive docs link 2026-08-04 22:38:17 +02:00

Opened #735 Validate FFmpeg profile numeric fields to sane ranges instead of silently transforming them, and expose readrate pacing as a bounded field 2026-08-04 22:38:46 +02:00

Opened #736 Advanced: editable FFmpeg arguments box — show the composed command, allow override, reset to default 2026-08-04 22:42:49 +02:00

Opened #740 AddItemsDialog.runSearch has no stale-response or is-mounted guard (pre-existing, surfaced during #685) 2026-08-05 18:36:35 +02:00

Opened #742 Tighten review-verdict.yml provenance from "non-null creator" to an allow-list of approved reviewers 2026-08-05 20:37:00 +02:00

Opened #743 review-verdict/h10 is bypassable without forging it: direct pushes to main are server-side permitted 2026-08-05 20:53:54 +02:00

Opened #744 ci-image.yml's push trigger has no branches: filter — any branch push runs attacker YAML on a docker-capable runner 2026-08-05 21:06:57 +02:00

Opened #746 docker-build.yml checkouts should set persist-credentials: false — after the || true fetch masking is removed 2026-08-05 23:32:37 +02:00

Opened #747 Re-verify the Gitea 1.25.4-pinned CI claims after the 1.27.1 upgrade 2026-08-05 23:32:37 +02:00

Opened #748 Declare permissions: on the status-writing workflows so the Gitea Restricted token default can be enabled 2026-08-05 23:46:38 +02:00

Opened #751 review-verdict.yml's classify/post step never executes — job goes green, review-verdict/h10 is never posted automatically 2026-08-06 14:36:21 +02:00

Opened #754 MCP ersatztv_update_channel omits graphicsElementIds — cannot set the On Now/Next overlay, and silently strips it 2026-08-06 20:41:12 +02:00

Opened #755 Project boundary: ersatztv owns the fork code, media-management owns channel operations 2026-08-06 20:41:29 +02:00

Opened #756 Extend the dropped-step guard to docker-build.yml's required jobs, where a dropped step is fail-OPEN 2026-08-06 21:30:32 +02:00

Opened #757 MCP tool catalog: query parameters are unguarded — list_playouts omits query, get_playout_items omits showFiller 2026-08-06 21:35:24 +02:00

Opened #758 GetPagedPlayouts: TotalCount ignores the query filter, so a filtered page reports the unfiltered total 2026-08-06 21:49:47 +02:00

Opened #759 MCP query-parameter guard ignores a $ref'd OpenAPI parameter instead of failing loudly 2026-08-06 21:49:48 +02:00

Opened #763 Page both /statuses/{sha} reads in review-verdict.yml — limit clamps to 50, so the post-write race check can miss a raced verdict 2026-08-10 19:28:49 +02:00

Opened #767 Make the delimiter ban fail-CLOSED on the release path — build's Smoke step is still droppable on a v* tag push 2026-08-10 22:48:43 +02:00

Opened #772 The pinned CI toolchain image can vanish from the registry and take ALL container CI down, with no signal but a pull error 2026-08-13 19:34:10 +02:00

Opened #773 Root-cause the recurring defect shapes across closed issues, then build hooks/tooling that make them hard to repeat — plus an audit of the tooling we already have and don't use 2026-08-13 19:34:55 +02:00

Opened #774 Guard convention: derive the expected set from the authoritative source and assert equality — never filter, never sample 2026-08-13 19:57:40 +02:00

Opened #775 Every guard ships with a proof it can go red: delete that guard alone, the suite must fail 2026-08-13 19:57:53 +02:00

Opened #776 Make hooks report that they fired — PreToolUse/PostToolUse execution is currently unobservable 2026-08-13 19:58:04 +02:00

Opened #777 csharp-lsp and typescript-lsp are broken; the "workflow agents must use csharp-lsp" guidance is stale 2026-08-13 19:58:20 +02:00

Opened #778 Audit read-then-write against live remote state: pin a version or use compare-and-set 2026-08-13 19:58:39 +02:00

Opened #779 Test the deny path with the production config value, and assert full-replace field lists 2026-08-13 19:58:48 +02:00

Opened #780 Reconcile Python tooling: commit a ruff config and enforce it, or stop claiming we enforce it 2026-08-13 19:59:02 +02:00

Opened #781 Plugin/MCP config hygiene: retire what is enabled and never invoked, de-duplicate the gitea server 2026-08-13 19:59:12 +02:00

Opened #783 ersatztv skill states the stack names correctly but does not warn that two of the three fail silently 2026-08-13 20:10:21 +02:00

Opened #784 Generalize the no-session-narrative rule from the kickoff file to all docs — the reader never saw the earlier draft 2026-08-13 20:54:00 +02:00

Opened #785 Mutation proofs for the 19 unproven guards, worst-consequence first 2026-08-13 21:59:10 +02:00

Opened #786 Extend the machine-checked guard inventory to inline workflow-job guards 2026-08-13 21:59:11 +02:00

Opened #787 The dropped-step guard's SCOPE is a dated comment, not a check, against branch protection 2026-08-13 21:59:12 +02:00

Opened #788 One shared verdict vocabulary instead of two shell copies plus a parity test 2026-08-13 22:21:30 +02:00

Opened #789 Derive the CI toolchain population from workflow-owned metadata, not TOOLCHAIN_JOBS 2026-08-13 22:21:30 +02:00

Opened #790 An executable clause-level mutation harness for the shell and python guards 2026-08-13 22:21:31 +02:00

Opened #792 post-review-verdict.sh exits 0 when it deliberately writes NO status 2026-08-14 01:44:55 +02:00

Opened #794 A fix ships a test witnessed failing BEFORE the fix — mechanise it by reverting the code side and asserting red 2026-08-14 16:25:59 +02:00

Opened #796 A verification harness is itself unproven code — five false greens, each created by the fix for the last 2026-08-14 17:07:27 +02:00

Opened #797 pretooluse-bom-guard.sh is fail-open wherever xxd is not installed — including the CI runner 2026-08-14 17:15:08 +02:00

Opened #799 serena is enabled and starts fine, but its tools never reach a session — establish why, then use or disable it 2026-08-14 17:34:40 +02:00

Opened #803 Head-ABA: a force-push H1->H2->H1 during paging defeats pr-changed-files.sh, and three contracts still deny it 2026-08-16 14:11:25 +02:00

Opened #806 Guard populations over FILES should derive from the git index, not a filesystem walk 2026-08-21 19:18:45 +02:00

Opened #807 The SPA's hand-built request objects can silently drop an OPTIONAL DTO field 2026-08-21 19:43:52 +02:00

Opened #809 The production-hook-fire-log isolation guard is per-test, but its claim is per-suite 2026-08-21 20:07:56 +02:00

Opened #812 Remediate the 21 session-narrative sites #784's sweep found — 21 judgements, not a regex 2026-08-21 22:49:00 +02:00

Opened #816 Mutation harness: reset_sandbox does not restore .git control state 2026-08-22 15:00:36 +02:00

Opened #819 The SPA page-size guard enumerates web/src with a Vite glob while claiming completeness 2026-08-22 17:38:54 +02:00

Opened #820 Complete<T> proves its semantics but not its APPLICATION — nothing derives the set of SPA full-replace construction sites 2026-08-22 22:10:58 +02:00

Opened #821 curl -u "$VAR" puts a credential in argv on shared hosts — five call sites, one class 2026-08-22 23:42:26 +02:00

Opened #822 test_the_suite_does_not_write_to_the_PRODUCTION_log uses global mutable state as its oracle — any concurrent session reddens it 2026-08-22 23:51:22 +02:00

Opened #823 Scheduling collection-valued columns: is a runtime null reachable on DaysOfMonth / MonthsOfYear / DaysOfWeek? 2026-08-23 00:07:12 +02:00

Opened #824 ElasticSearchIndex.UpdateSong has no regression test — an Elastic-only reintroduction of the #701 mutation stays CI-green 2026-08-23 00:07:30 +02:00

Opened #830 AddItemsDialog: a failed add is silently swallowed when the dialog is closed mid-request 2026-08-25 23:24:21 +02:00

Opened #832 MediaCards paged handlers: 1-based paging + delete-or-keep (count drift fixed in #690/#758) 2026-08-26 08:20:35 +02:00

Opened #835 Guard the persist-credentials convention — after #744, with no exemption list 2026-08-26 17:41:00 +02:00

Opened #836 :latest images ship InformationalVersion 0.0.0 — a --depth=2 fetch grafts the build job's full clone shallow 2026-08-26 18:22:19 +02:00

Opened #837 Scripted-playout _off: the documented "null -> all off" behaviour depends on an unrecorded formatter setting, and no test would catch it changing 2026-08-26 19:06:53 +02:00

Opened #839 FieldHelp's panel placement is verified by hand, not by a test 2026-08-26 19:24:07 +02:00

Opened #840 FieldHelp's portalled panel puts a docsHref link at the end of the tab order 2026-08-26 19:24:08 +02:00

Opened #844 Per-channel default-adoption state, so "on by default" can stop re-adding an overlay the operator cleared 2026-08-26 20:41:45 +02:00

Opened #845 post-review-verdict.sh does not check that its own account is on the gate's H10_REVIEWERS allow-list 2026-08-26 21:46:10 +02:00

Opened #848 The QSV frame-pool 422 can name a control the editor is not rendering 2026-08-26 23:36:54 +02:00

Opened #849 review-verdict.yml post-write verification: three routes that leave an exemption success over a human failure 2026-08-27 00:25:17 +02:00

Opened #853 workflow_dispatch still loads attacker YAML from an arbitrary ref — four workflows, no ref restriction 2026-08-27 20:17:52 +02:00

Opened #854 docker/ci/Dockerfile's FFMPEG-bump comment still says a push publishes — and cannot be fixed on its own 2026-08-27 20:18:44 +02:00

Opened #855 Nothing couples ci-image.yml's push.paths to ci-image-pin's expected pathspec 2026-08-27 20:47:14 +02:00

Opened #858 pretooluse-merge-consent.sh resolves its verdict classifier from $CLAUDE_PROJECT_DIR — an env var as a security input 2026-08-27 22:01:23 +02:00

Opened #859 Merge-gate branch-protection read: a malformed rule states a cause that did not happen, and the endpoint is now fetched twice 2026-08-27 22:01:24 +02:00

Opened #869 Finish the 1.25.4-dated CI claim sweep #747 deliberately did not complete 2026-08-28 18:52:25 +02:00

Opened #870 The timeline walk's null terminator is defeatable: Gitea pages BEFORE it filters, so a page of inline-code comments reads as exhaustion 2026-08-28 21:06:38 +02:00

Opened #876 docs.no-session-narrative reaches hooks and code comments, but nothing has ever swept them — 4 known sites 2026-08-29 18:54:40 +02:00

Opened #877 Dismissible write failures, shape A2: the error state survives but its render site is gated by the same condition dismissal clears 2026-08-29 19:30:54 +02:00

Opened #880 Schedule-item recurrence fields: an omitted array means "never applies" on write but "unrestricted" on read 2026-08-29 20:21:30 +02:00

Opened #881 Mutation claims in PROSE are outside testing.mutation-claims-are-executed — 4 false ones in #812, each caught by a separate review round 2026-08-29 21:21:06 +02:00

Opened #885 Same-repo pull_request runs get REGISTRY_PASSWORD from head-supplied YAML — the route #853 found under the dispatch class 2026-08-30 01:40:56 +02:00

Opened #886 release.verdict-vocabulary-shared explains the sentinel with a set -u mechanism that measurement refutes 2026-08-30 02:00:22 +02:00

Opened #887 Every image build fails: completeAnnotations.guard.test.ts needs the git index, and the Dockerfile's exclude list is hand-maintained 2026-08-30 02:35:21 +02:00

Opened #891 ETV_HOOK_FIRE_LIB is SOURCED from an env-var path in 12 hooks — a decoy tree's code runs inside the gate 2026-08-30 10:15:52 +02:00

Opened #893 page_statuses still terminates on its first empty page — is /statuses/{sha} subject to #870's post-pagination filtering? 2026-08-30 10:57:49 +02:00

Opened #894 SPA lets a user build an empty recurrence set the server now rejects (#880 residual) 2026-08-30 10:59:44 +02:00

Opened #895 "all N tests stayed green" claims in test comments go stale the moment anyone adds a test — 4 found, no detector 2026-08-30 12:37:34 +02:00

Opened #900 chore(release): cut and promote v26.15.0 on 736649b3b (main head could not build an image) 2026-08-30 17:29:13 +02:00

Opened #901 Convention: for a predicate over shell or config TEXT, pin the artifact whole — "match a shape" is the exception that must argue for itself 2026-08-30 18:44:42 +02:00

Opened #904 test_docs_only_detector_clone_depth.py flakes ~8% in the CI container (measured, pre-existing on main) 2026-08-30 22:58:57 +02:00

3 Unresolved Conversations