Skip to content

backlog: decline 250 and 251 — external tooling does not drive MessageFoundry - #92

Merged
wshallwshall merged 1 commit into
mainfrom
decline-ops-api
Jul 31, 2026
Merged

backlog: decline 250 and 251 — external tooling does not drive MessageFoundry#92
wshallwshall merged 1 commit into
mainfrom
decline-ops-api

Conversation

@wshallwshall

Copy link
Copy Markdown
Collaborator

Owner ruled on #250 (frozen ops OpenAPI + messagefoundry-ops wheel):

"a customer can drive MessageFoundry from tooling they already run" — that's a bad idea. Rejected.

The premise is refused, not the price

The ~6-week estimate was never the question. Both items are marked ⛔ declined-by-design, not deferred, and neither is to be re-scored.

#251 falls with it

#251 is the same idea in reduced form — MessageFoundry exposed as tasks inside a customer's existing Kestra instance is a customer driving MessageFoundry from tooling they already run. Read-only scope and ticket-not-replay narrow the blast radius; they don't change the direction of control, which is the thing refused. Its own precondition — "only if #250 is funded first" — is independently unmet.

Provenance is stated in the banner, not blurred: the owner ruled on #250; this session extended it to #251 as a consequence plus an unmet precondition, not as a second ruling. If the intent was to refuse only the OpenAPI/wheel and keep a reduced Kestra-only form alive, that banner is the correction point.

Two guards against reopening on the wrong grounds

1. The buyer question is moot, and is not why this was declined. #250 carried an unresolved assumption — the source memo's ranking assumed a small-team buyer and inverted for health systems with platform teams. The owner declined on the shape of the integration, without needing that answered. Recorded explicitly so a later session can't reopen the item by claiming the assumption has since been settled.

2. The ruling is about direction of control, not about whether an interface exists. #249 (--format mermaid|dot off graph --json) is untouched and stays open — MessageFoundry drives that itself and merely emits. Nothing external drives anything. That line is drawn in #250's banner so the next reader doesn't over-apply the decline to every CLI surface.

Verification

python scripts/docs/backlog_status_check.py   → OK — 242 items, each declaring exactly one status
python scripts/hooks/ledger_check.py          → no blocks
banners: #249 🔢 (open) · #250 ⛔ · #251 ⛔

Docs-only, +10/−4 in one file. No code, no number allocated.

🤖 Generated with Claude Code

@wshallwshall
wshallwshall enabled auto-merge (squash) July 31, 2026 01:20
…geFoundry

Owner ruled on 250 (frozen ops OpenAPI + messagefoundry-ops wheel):
"a customer can drive MessageFoundry from tooling they already run" is a
bad idea. Rejected.

The premise is refused, not the price. The ~6-week estimate was never the
question, so both items are marked declined-by-design rather than
deferred, and neither is to be re-scored.

251 falls with it. It is the same idea in reduced form -- MessageFoundry
exposed as tasks inside a customer's existing Kestra instance is exactly
a customer driving MessageFoundry from tooling they already run.
Read-only scope and ticket-not-replay narrow the blast radius; they do
not change the direction of control, which is the thing refused. Its own
precondition, "only if 250 is funded first", is independently unmet.

251's banner records that the owner ruled on 250 and that this session
extended the ruling, rather than presenting it as a second ruling. If the
intent was to refuse only the OpenAPI/wheel and keep a reduced Kestra
form alive, that banner is the correction point.

Two notes to stop this being reopened on the wrong grounds:

250 carried an unresolved buyer question -- the source memo's ranking
assumed a small-team buyer and inverted for health systems with platform
teams. That question is now moot for this item and is explicitly NOT why
it was declined. A later session must not reopen it by claiming the
assumption has since been settled.

The ruling is about direction of control, not about whether an interface
exists. 249 (--format mermaid|dot off graph --json) is untouched and
stays open: MessageFoundry drives that itself and merely emits, so
nothing external drives anything.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@wshallwshall
wshallwshall merged commit 0c7257d into main Jul 31, 2026
31 checks passed
@wshallwshall
wshallwshall deleted the decline-ops-api branch July 31, 2026 01:24
wshallwshall added a commit that referenced this pull request Jul 31, 2026
…o trackers (#95)

Three independent doc defects, all verified against origin/main before editing.

1. BACKLOG #96 carried three pieces of capacity guidance that ADR 0074's
   2026-07-14 validity re-check found measured-false and unsafe, and the
   correction never landed - it sat only on a stranded commit (bd969b0e) in a
   ref namespace whose remote no longer exists. B14 named four downstream
   artifacts; three were amended on 2026-07-14 and #96 was the last one left,
   so ADR 0074 required-change 13 still read as fully outstanding.

   Corrected here: the sum-across-interfaces aggregate rule (measured-false,
   ~11x over-report - 16 lanes summed predicts 960/s against a measured 87/s);
   the "only trustworthy success gate", which over-reports 3-5.5x on its own and
   needs the non-filling companion #96 already named; and the poller-zero
   remedy, which is circular. Adds the BUILD GATED (measurement layer) advisory
   and marks the quick-win/Difficulty-5 score as no longer trustworthy.
   ADR 0074 B14 and required-change 13 are closed out to match.

   Deviations from bd969b0e, each deliberate: it used a leading ⛔ banner, which
   the backlog checker reads as a CLOSED status against #96's OPEN 🔢 banner and
   fails "item contradicts itself" - ⚠️ is the sanctioned non-status advisory
   glyph, per the ⛔+⚠️ stacking that landed in #92. Its "11 open decisions"
   count is unsourced (the Amendment lists 14) and is dropped rather than
   restated. Two of its quotations were inexact and are corrected against the
   file. "zero code" became "only TOML comments, zero code" - the grep returns
   10 TOML hits and no Python.

2. BACKLOG #171, #131 and #127 carried only their pre-build demand-gate banners
   although work has shipped. Each gets an AMENDED banner rather than a close,
   because verification refuted a full close in all three cases: #171's API half
   is built but its console half is dead code (app.js registers the handlers, no
   page emits the attributes, and the /ui routes do not exist); #131 built the
   connection flag and the Flagged-only filter, but "every configuration object"
   is a scope fork ADR 0007 ratified deliberately; #127 built Basic, and Digest
   for http destinations, while NTLM and Windows are refused at construction and
   recorded as deferred - so this is explicitly not four-scheme parity.

3. The demand-gate tracker claimed 11 lanes "Not started" that have all shipped.
   Each lane was verified individually by ADR status plus code symbol; the
   public history is snapshot-collapsed across the 2026-07-17..24 window, so no
   merge SHA can be cited for any of them.

Verified: tests/test_backlog_status_check.py (15 passed, including
test_the_real_backlog_satisfies_the_invariant, which the ⛔ form fails), plus
the ledger, runbook, doc-ref and doc-drift suites - 100 passed, 89 skipped.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant