Get started
Plan voor het verwijderen van de ingress-kern
Verwijderingsplan voor de ingress-kern
De ingress-refactor is niet gezond zolang die duizenden netto regels toevoegt. Kerncentralisatie telt alleen wanneer productiecode van gebundelde plugins kleiner wordt en oude SDK-compatibiliteit voor derden wordt afgezonderd in SDK-/kern-shims.
Gewenste runtime-vorm:
bundled plugin event
-> extract platform facts locally
-> resolve shared ingress once when facts are available
-> branch on generic ingress projections/outcomes
-> perform platform side effects locally
old third-party helper
-> SDK compatibility shim
-> shared ingress-compatible projection where possible
-> old return shape preserved
Gebundelde plugins mogen ingress niet terugvertalen naar lokale AccessResult-, GroupAccessDecision-, CommandAuthDecision-, DmCommandAccess- of { allowed, reasonCode }-vormen, tenzij dat type openbare plugin-API is.
Budget
Gemeten tegen de PR-merge-base met origin/main, inclusief niet-gevolgde bestanden.
merge-base 1671e7532adb
current:
core production +3,922 / -546 = +3,376
docs +601 / -17 = +584
other +145 / -2 = +143
plugin production +4,148 / -5,388 = -1,240
tests +2,326 / -2,414 = -88
total +11,142 / -8,367 = +2,775
required:
plugin production <= -1,500
core production <= +1,500, or paid for by larger plugin deletion
tests <= +1,000
total <= +2,000
stretch:
plugin production <= -2,500
core production <= +1,200
total <= 0
Minimale resterende opschoning:
plugin production needs 260 more net deleted lines
total needs 775 more net deleted lines
core production still +1,876 over standalone budget, unless paid down by plugin deletion
Verwijdering van alleen opmerkingen telt niet als opschoning. De vorige budgetronde was te ruimhartig omdat die herstelde verklarende QQBot-opmerkingen meenam; dit document volgt alleen verplaatsing van uitvoerbare code, documentatiecode en testcode.
Meet opnieuw na elke opschoningsgolf:
base=$(git merge-base HEAD origin/main)
git diff --shortstat "$base"
git diff --numstat "$base" -- src/channels/message-access src/plugin-sdk extensions | sort -nr -k1 | head -n 80
pnpm lint:extensions:no-deprecated-channel-access
Diagnose
De eerste ronde voegde de gedeelde ingress-kernel toe en liet daarna te veel plugin-lokale autorisatie ernaast staan:
platform facts
-> shared ingress state and decision
-> plugin-local DTO or legacy projection
-> plugin-local if/else ladder
Dat dupliceert het model. De kernproductie groeide met ongeveer 3.376 regels, terwijl de productiecode van gebundelde plugins 1.240 regels kleiner is. Dat is beter dan de eerste ronde, maar het valt niet binnen het minimumbudget. De oplossing blijft verwijdering eerst:
- verwijder plugin-DTO's die alleen ingress-velden hernoemen
- verwijder tests die alleen wrapper-vorm bevestigen
- voeg alleen kernhelpers toe wanneer dezelfde patch gebundelde plugin-code verwijdert
- houd oude SDK-compatibiliteit alleen in SDK-/kern-shims
- pak de kern opnieuw in nadat wrapper-verwijdering de stabiele vorm blootlegt
Hotspots
Positieve gebundelde productiebestanden die nog moeten krimpen:
extensions/telegram/src/ingress.ts +126
extensions/discord/src/monitor/dm-command-auth.ts +101
extensions/signal/src/monitor/access-policy.ts +92
extensions/feishu/src/policy.ts +85
extensions/slack/src/monitor/auth.ts +64
extensions/googlechat/src/monitor-access.ts +59
extensions/nextcloud-talk/src/inbound.ts +51
extensions/matrix/src/matrix/monitor/access-state.ts +49
extensions/irc/src/inbound.ts +44
extensions/imessage/src/monitor/inbound-processing.ts +36
extensions/qa-channel/src/inbound.ts +34
extensions/qqbot/src/bridge/sdk-adapter.ts +33
extensions/tlon/src/monitor/utils.ts +30
extensions/twitch/src/access-control.ts +22
extensions/qqbot/src/engine/commands/slash-command-handler.ts +20
extensions/telegram/src/bot-handlers.runtime.ts +19
De branch valt nog niet binnen het minimumbudget. Het resterende review-relevante werk moet herhaalde autorisatiestromen, turn-scaffolding of wrappertests verwijderen voordat er nog een kernabstractie wordt toegevoegd.
Huidige codelezing
De gezonde kernnaad bestaat al in src/channels/message-access/runtime.ts: die is eigenaar van identity-adapters, effectieve allowlists, pairing-store-reads, routebeschrijvers, command-/event-presets, access groups en de uiteindelijke opgeloste ResolvedChannelMessageIngress-projectie.
De resterende groei is vooral plugin-lijm boven op die naad:
extensions/telegram/src/ingress.tswikkelt kernbeslissingen in Telegram-specifieke command-/eventhelpers, waarna callsites nog steeds vooraf berekende genormaliseerde allowlists en eigenaarslijsten doorgeven.extensions/discord/src/monitor/dm-command-auth.ts,extensions/feishu/src/policy.ts,extensions/googlechat/src/monitor-access.tsenextensions/matrix/src/matrix/monitor/access-state.tshouden nog steeds lokale policy-DTO's of legacy beslissingsnamen naast ingress.extensions/signal/src/monitor/access-policy.tshoudt Signal-identiteitsnormalisatie en pairing-antwoorden terecht lokaal, maar heeft nog steeds een wrapper-naad die moet instorten tot directe ingress-consumptie.extensions/nextcloud-talk/src/inbound.ts,extensions/irc/src/inbound.ts,extensions/qa-channel/src/inbound.ts,extensions/zalo/src/monitor.tsenextensions/zalouser/src/monitor.tsherhalen nog steeds route-/envelope-/turn-assemblage die naar gedeelde turnhelpers buiten de ingress-kernel kan verhuizen.
Conclusie: meer code naar de kern verplaatsen is alleen nuttig als het in dezelfde patch deze plugin-wrapperlagen verwijdert. Nog een abstractie toevoegen terwijl wrapper-returns blijven bestaan, herhaalt de fout.
Grens
De kern is eigenaar van generiek beleid:
- allowlist-normalisatie en matching
- uitbreiding en diagnostiek van access groups
- DM-allowlist-reads uit de pairing-store
- route-, sender-, command-, event- en activation-gates
- toelatingsmapping: dispatch, drop, skip, observe, pairing
- geredigeerde status, beslissingen, diagnostiek en SDK-compatibiliteitsprojecties
- herbruikbare generieke beschrijvers voor identity, route, command, event, activation en outcomes
Plugins zijn eigenaar van transportfeiten en neveneffecten:
- authenticiteit van webhook/socket/request
- platformidentiteitsextractie en API-lookups
- kanaalspecifieke beleidsstandaarden
- levering van pairing-uitdagingen, antwoorden, acks, reacties, typen, media, geschiedenis, setup, doctor, status, logs en gebruikersgerichte tekst
De kern moet kanaalagnostisch blijven: geen Discord, Slack, Telegram, Matrix, room, guild, space, API-client of plugin-specifieke standaard in src/channels/message-access.
Acceptatieregel
Elke nieuwe kernhelper moet onmiddellijk productiecode van gebundelde plugins verwijderen.
one bundled caller reject; keep plugin-local
two bundled callers accept only if plugin production LOC drops
three or more callers plugin deletion must be at least 2x new core LOC
compatibility-only helper SDK/core shim only; never bundled hot paths
Stop en ontwerp opnieuw als:
- productie-LOC van plugins toeneemt
- tests sneller groeien dan productie krimpt
- een gebundeld hot path een DTO retourneert die alleen
ResolvedChannelMessageIngresshernoemt - een kernhelper een channel-id, platformobject, API-client of kanaalspecifieke standaard nodig heeft
Werkpakketten
-
Bevries het budget. Zet LOC in de PR, houd deprecated-ingress-lint groen en neem voor/na-LOC op in opschoningscommits.
-
Verwijder dunne DTO-naden. Vervang plugin-lokale wrapper-returns door direct gebruik van
ResolvedChannelMessageIngress,senderAccess,commandAccess,routeAccessofingress. Begin met QQBot, Telegram, Slack, Discord, Signal, Feishu, Matrix, iMessage en Tlon. Verwijder wrapper-vormtests; behoud gedragstests. -
Voeg outcome-classificatie alleen toe met verwijderingen. Een generieke classifier mag
dispatch,pairing-required,skip-activation,drop-command,drop-route,drop-senderendrop-ingressblootleggen. Die moet afgeleid zijn van de beslissingsgrafiek, niet van redenstrings, en in dezelfde patch minstens drie plugins migreren. -
Voeg routebeschrijver-builders alleen toe met verwijderingen. Generieke helpers voor routedoel en routesender zijn alleen acceptabel als ze route-zware plugins onmiddellijk verkleinen: Google Chat, IRC, Microsoft Teams, Nextcloud Talk, Mattermost, Slack, Zalo en Zalo Personal.
-
Voeg command-/event-presets alleen toe met verwijderingen. Centraliseer text-command-, native-command-, callback- en origin-subject-vormen. Command-consumenten moeten standaard naar unauthorized gaan wanneer er geen command-gate is uitgevoerd; events mogen geen pairing starten.
-
Voeg identity-presets alleen toe waar ze boilerplate verwijderen. Stable-id-, stable-id-plus-aliases-, phone/e164- en multi-identifier-helpers zijn toegestaan wanneer ruwe waarden alleen adapterinvoer binnenkomen en geredigeerde status ondoorzichtige id's/aantallen behoudt.
-
Deel geautoriseerde turn-assemblage. Verwijder buiten de ingress-kernel herhaalde route-/session-/envelope-/context-/reply-scaffolding uit QA Channel, IRC, Nextcloud Talk, Zalo en Zalo Personal. De kern mag route-/session-/envelope-/dispatch-volgorde bezitten; plugins behouden levering en kanaalspecifieke context.
-
Zet compatibiliteit in quarantaine. Verouderde SDK-helpers blijven broncompatibel, maar gebundelde hot paths mogen geen verouderde ingress- of command-auth-facades importeren. Compatibiliteitstests moeten nepplugins van derden gebruiken, geen internals van gebundelde plugins.
-
Pak de kern opnieuw in. Na wrapper-verwijdering: klap modules met één gebruik in, verwijder ongebruikte exports, verplaats compatibiliteitsprojectie uit hot paths en behoud gerichte tests voor identity, route, command/event, activation, access groups en compatibiliteitsshims.
Verwijderingsgolven
Voer deze op volgorde uit. Elke golf moet productie-LOC van gebundelde plugins verlagen.
-
Wrapper-collapse, verwachte plugin-delta: -400 tot -600. Vervang plugin-lokale
resolveXAccess-,resolveXCommandAccess- enaccessFromIngress-resultaattypen door directe reads uitResolvedChannelMessageIngress. Eerste doelen: Discord DM command auth, Feishu policy, Matrix access state, Telegram ingress, Signal access policy, QQBot SDK-adapter. -
Gedeelde outcome-helpers, verwachte plugin-delta: -200 tot -350. Voeg één generieke classifier alleen toe als die herhaalde
shouldBlockControlCommand-, pairing-, activation-skip-, route-block- en sender-block-ladders verwijdert uit minstens drie plugins. -
Routebeschrijver-builders, verwachte plugin-delta: -200 tot -350. Verplaats herhaalde assemblage van routedoel- en routesenderbeschrijvers naar kernhelpers. Eerste doelen: Google Chat, IRC, Microsoft Teams, Nextcloud Talk, Mattermost, Slack, Zalo, Zalo Personal.
-
Delen van turn-assemblage, verwachte plugin-delta: -250 tot -450. Gebruik gemeenschappelijke route-/session-/envelope-/dispatch-volgorde voor eenvoudige inkomende plugins. Eerste doelen: QA Channel, IRC, Nextcloud Talk, Zalo, Zalo Personal.
-
Kern opnieuw inpakken, verwachte kern-delta: -300 tot -700. Nadat plugins runtime-projecties direct consumeren: verwijder modules met één gebruik, voeg kleine bestanden terug samen in
runtime.tsof gerichte buren, en houd SDK-compatibiliteitsbestanden gescheiden van gebundelde hot paths. -
Testopschoning, verwachte test-delta: -300 tot -600. Verwijder tests die alleen verwijderde wrapper-vormen bevestigen. Behoud gedragstests voor command denial, group fallback, origin-subject matching, activation skip, access groups, pairing en redactie.
Verwachte minimale landingsvorm na deze golven:
plugin production <= -1,500
core production about +1,800 to +2,200 before final repack
tests <= +500
total <= +2,000
Niet Verplaatsen
Verplaats geen platformconfiguratiestandaarden, installatie-UX, doctor/fix-tekst, API-lookups, Slack-eigenaarsaanwezigheidscontroles, Matrix-alias-/verificatieafhandeling, Telegram callback-parsing, syntaxisparsing van opdrachten, native opdrachtregistratie, parsing van reactiepayloads, koppelingsantwoorden, opdrachtantwoorden, bevestigingen, typen, media, geschiedenis of logs.
Verificatie
Gerichte lokale loop:
pnpm lint:extensions:no-deprecated-channel-access
pnpm test src/channels/message-access/message-access.test.ts src/plugin-sdk/channel-ingress-runtime.test.ts src/plugin-sdk/access-groups.test.ts
pnpm test extensions/<changed-plugin>/src/...
pnpm plugin-sdk:api:check
pnpm config:docs:check
pnpm check:docs
git diff --check
Gebruik Testbox voor brede gewijzigde gates/full-suitebewijs zodra de LOC-trend binnen budget is.
Elk werkpakket legt vast:
- LOC vóór/na per categorie
- verwijderde Plugin-wrappers
- nieuwe kernhelper-LOC, indien aanwezig
- uitgevoerde gerichte tests
- resterende lijst met hotspots
Exitcriteria
- gebundelde productie-imports gebruiken geen verouderde channel-access- of command-auth-facades
- compatibiliteitscode is geïsoleerd tot SDK-/kernnaden
- gebundelde Plugins consumeren ingress-projecties of generieke uitkomsten rechtstreeks
- Plugin-productie-LOC is netto ten minste 1.500 lager ten opzichte van
origin/main - kernproductie-LOC is
<= +1,500, of elke overschrijding wordt gecompenseerd terwijl het totaal<= +2,000blijft - representatieve tests dekken redactie, route, opdracht/event, activatie, toegangsgroep en kanaalspecifiek fallbackgedrag