github_grid_assets 0.1.0
github_grid_assets: ^0.1.0 copied to clipboard
GitHub App identity and authenticated REST transport for grid extensions.
0.1.0 #
- PROMOTED from 0.1.0-rc.16. This is the stable release of the 0.1.0 line; the code is the candidate's, unchanged. Every family dependency constraint is rewritten from its prerelease form to the stable one, because pub refuses a stable package that depends on a prerelease.
- Consumers on a
^0.1.0-rc.Nconstraint resolve this automatically: a caret range admits the release above its own prereleases, so no downstream pubspec edit is required to pick it up.
0.1.0-rc.16 #
- Changed: the
grid_assetsfloor is^0.6.0-rc.16— the intake store tests referencekFilingApprovalRevisionPrefix, first exported there; the release scrub gate analyzes the package at its declared floors and caught the rc.13 floor. - Added: the station keeps watching an OUTBOUND issue after it opens one. A seat declares
GitHubIssueWatch(originatingBeadId:, owner:, repository:, issueNumber:)values onGitHubReconcilerConfig.issueWatches, and the reconciler observes each watched issue's resource and its Link-paginated timeline, emittingNormalizedGitHubEvent.issueCommentedandNormalizedGitHubEvent.watchedIssueStateChanged(pow-1rn.8). - Added: TWO read lanes, split by what a GitHub App can actually reach. A watch naming the seat's own repository rides the existing
GitHubAppClientand its installation token. Every other repository is FOREIGN — an App cannot be installed on a third party's, for reading or writing — and rides the new GET-onlyGitHubReadClientover the sameGitHubHttpTransportseam, token-less by default (Authorizationomitted entirely) with an optional personal token named byGitHubReconcilerConfig.foreignReadTokenVariable. Writing to a foreign repository stays out of scope and human-authored. - Added: the foreign lane has its OWN rate budget — a separate
GitHubPollCoordinatorkeyedforeign/issue-watch, spaced byGitHubReconcilerConfig.foreignMinimumSpacingand clamped up to a 65-second floor whenever no token is configured, which keeps a four-request reserve inside GitHub's 60-per-hour unauthenticated allowance. An installed-repository start neither waits on that budget nor spends it. - Added: the watch covers every terminal and near-terminal state, not just comments — closed as completed, closed as not planned, reopened, lock changes, transferred, deleted, converted to a discussion, and unreadable (private or 404). Closed, reopened, locked and unreadable watches keep polling; transferred, deleted and converted stop.
- Added:
GitHubReconcilerCursor.issueWatches— per-coordinate issue identity, comment/timeline marks, state, reason, lock and update time, plus two conditional tags in the EXISTINGetagsmap, written and evicted with their record. ADDITIVE at cursorversion: 1: absence decodes empty, so a live seat upgrades in place; a present-but-wrong shape throws. Watch observations ride the existing pending queue with per-leg acknowledgement. - Added:
GitHubIssueWatchProjection, registered as the durableissue-watchdelivery leg besideci-feedback. It asks the EXISTINGGitHubSelfTrustabout the issue's AUTHOR — the only identity with an answer — and reopens the ORIGINATING bead with a deterministic note andgithub.watch.*metadata. It never approves anything: an external maintainer's reply lands the bead OPEN and unstamped, and the same update removes all three approval-stamp keys.GitHubReconcilerBindingAssetsshares one trust and onebdstore between both projections. - Added:
githubRestHeadersandgithubFailureCause— one home each for the REST header contract and for the type-led, 300-character-bounded cause every GitHub failure escalates with;GitHubAppPrOpenernow renders through the shared formatter unchanged. - Changed:
GitHubPollCoordinator.scheduleis generic and returns its request's result, so a single scheduled GET can ride a budget.GitHubReconcilerRuntimeFactoryandcreateGitHubReconcilerRuntimetake a nullableforeignClient. - Compatibility: every new configuration value is optional and defaults to the feature-off value. An empty
issueWatchesconstructs no foreign transport, reads no environment variable and makes no watch request, soSpaceDelegate.substationsandLunarDelegate.substationsneed no edit.
0.1.0-rc.15 #
- Added: the station reacts to a red workflow run that is not a station pull request. A seat declares
WorkflowRunIntakeRules onGitHubReconcilerConfig.workflowRuns(workflow path + events + branches + conclusions + priority + validation plan + approve); the reconciler gains a/actions/runs?status=completedleg that emitsNormalizedGitHubEvent.workflowRunConcluded— with each failed job and its first failed step — for matching runs only, and intake files the failure as an OPENbugcarrying the run metadata, its validation plan and one falsifiable acceptance checkbox. An empty rule list is the default and makes the leg spend no request at all (pow-1rn.7). - Added:
GitHubSelfTrustadmits the seat's OWNgithub-workflowOWNER/REPOSITORYidentity asTrustLevel.selfbeside the human login; every other repository — a fork's run above all — stays external, and the poll leg drops a foreignhead_repositorybefore it costs a jobs request. - Added: a rule with
approve: trueself-approves its SELF-authority filing by CALLINGgrid_assets'ApproveServiceasgithub-workflow. The four-row filing preflight is unchanged and is still the only route to thegrid.approved_*stamp; a refused preflight leaves the bead OPEN, unstamped, with the failing rows in its notes. Seepower_station#own-workflow-failures-are-self-approved. - Added:
GitHubReconcilerCursor.workflow_runs_since— ADDITIVE at cursorversion: 1, so a cursor already on disk still loads.
0.1.0-rc.14 #
- Fixed: the CI feedback leg no longer runs
bd export --all, which every proxied-server store refuses; one head-of-lineCheckConcludedobservation wedged a seat's GitHub poll forever and the failure never reached the station log (5 of 8 lunar seats were dark from 2026-09-03).CiFeedbackProjectioncomposes one typedBdCliService.listScopesession read, ignores-with-a-flare zero, many, or id-less matching sessions, gains aCiFeedbackReporterseam bound onto the binding-provided value, and the reconciler subscribes to the station transport above the substation git bundle; a source fence keepsbd exportout oflib/(pow-2xmo, #261). - Fixed: approval receipts bind to the filing basis (#232).
0.1.0-rc.13 #
- Changed:
SubstationSeedbuilds through grid_assets' single availability resolution — the seat mounts the selected generated definition Seeds from the resolvedSubstationFactsSnapshot, and every seat keeps building without facts (the pre-resolution path) instead of failing closed (pow-4peu, #216). - Floors tightened to
grid_assets ^0.6.0-rc.13.
0.1.0-rc.12 #
- Fixed:
deliverREUSES an open pull request for the branch (one GET, PATCH when the title/body changed,step.deliveredwithreused: true) instead of racing a create into HTTP 422 and stranding a reworked roundheld(pow-r4eo, #211). - Floors tightened to
grid_assets ^0.6.0-rc.12.
0.1.0-rc.11 #
- Fixed: the App transport encodes its body as UTF-8 at the SINK
(
ioRequest.add(utf8.encode(body))) and sendsContent-Type: application/json; charset=utf-8. AnIOSinkfalls back to iso-8859-1 when the content type carries no charset, and latin1 THROWS on the first code unit above U+00FF — so a single em dash in a PR body killed delivery before the request was ever sent. Encoding at the sink covers every caller, the/pullsPOST and the installation-token exchange alike. - Fixed: a THROWN PR-open error escalates type-first — generic advice leads and
the cause trails as
Cause (<runtimeType>): …, capped at 300 CHARACTERS (never a first-line cap:safeToStringescapes newlines, so a serialized request renders as one multi-kilobyte line). Delivery passes the reason throughlandReasonTail, which keeps the TAIL, so the type and message now survive the cut instead of whatever an SDK error had embedded (pow-b14a, #201). - Changed: the
grid_assetsfloor is^0.6.0-rc.11— the in-set coherence floor for this wave.
0.1.0-rc.10 #
- Adopts the the_grid wave 2 and grid_assets 0.6.0-rc.10: floors
grid_assets ^0.6.0-rc.10,grid_cli ^0.5.0-rc.12,grid_engine ^0.3.0-rc.12,grid_runtime ^0.2.0-rc.10,grid_sdk ^0.3.0-rc.10(power_station#195). No API change.
0.1.0-rc.9 #
- Added:
SubstationSeed, the COMPOSED per-seat stack, plus itsSubstationAppIdentitydelivery identity and theMountedSubstationSeedoffline projection. A downstream station now composes a full GitHub-delivering seat fromthe_grid+power_stationalone: the seed mounts the seat'sTypedEnvironmentProviderrung, the mounted projection,grid_assets'GitGridAssets, the live-arm reconciler binding,GitHubReconcilerAssets,GitHubGridAssetsandMountEligibilityAssets, and wraps the App client and PR opener on a live poll arm.SubstationAppIdentity.installationIdis anint, so a malformed installation id fails where the seat is authored rather than during mount; the pre-existingGitHubAppConfigis untouched. - Changed: the
grid_assetsfloor is^0.6.0-rc.9— the seed consumes the arming mechanism vended there.
0.1.0-rc.8 #
- Breaking:
GitHubSelfTrust.fromEnvironmenttakes an injectedEnvironmentReader; nothing underlib/readsPlatform.environmentambiently any more, and the App-key asset tests are hermetic against an operator's exportedGRID_GITHUB_APP_KEY_*variables (pow-vw38, #184). - Breaking: the reconciler poll reads every
Linkpage before advancing, andsincemoves only to the last examined update. Issue-shaped pull rows fetch the full pull resource;GitHubReconcilerCursorcachespullHeadsbeside their conditional tags (intake/pull/<nodeId>) and evicts the two together.nextGitHubPageUriis the one home for theLinkparse (pow-40a4, #182). - Added: a durable pending/delivered outbox on the cursor document. An
observation is persisted pending before its sink runs, acknowledged per
delivery leg (
addObserver/removeObserver,kSinkDeliveryLeg), and replayed as a step of the next poll after a restart, so an event between a fetch and a crash is delivered exactly once. The document stays version 1 (pow-oe97, #183). - Changed: GitHub intake bead writes (correlate, create, update) ride
BdCliService, inheriting the shared compatibility and runner behaviour; requiresdart_grid_assetsat the rc that shipscreate(defer:, externalRef:, setMetadata:)andlistScope(pow-0nvg, #174). - Changed: the decision lane's lookup rides the composing station's roster-mode
decisions index --surface, so a decision in a sibling register is reachable (#178). - Breaking:
GitHubIntakeStore.upsertDeferredis renamedupsert, and admitted GitHub intake beads are filed OPEN — the9999-12-31parking date is dropped (pow-5wo). The store writes no approval marker of any kind; absence of the approve verb'sgrid.approved_*stamp is the pending state (power_station#github-intake-files-open-and-unstamped).
0.1.0-rc.7 #
- Breaking: the reconciler tolerates pull rows and flare polling failures (pow-2s1, #143) — the polling loop no longer throws on a failed poll.
- Closed intake rows are filtered from reconciliation (#144).
- Model environments route through typed seats (pow-n6n.2, #168).
- Requires
grid_cli ^0.5.0-rc.10(the rc.8/rc.9 cap is lifted now that the hosted chain resolves) andgrid_assets ^0.6.0-rc.7.
0.1.0-rc.6 #
GitHubReconcilerBindingAssets: provides each live seat a durableGitHubCursorStoreand SELF-only deferred-intakeGitHubEventSink, completing the ambient seams required byGitHubReconcilerAssetsto construct its polling runtime (#139).
0.1.0-rc.5 #
GitHubAppClientAssets: per-seat GitHub App client construction with per-app key resolution — the key path comes from the env var each seat'sprivateKeyVarnames (inert when unset, loud on a bad path or mode), replacing the single fixedGC_GITHUB_APP_KEY_PATH(#134).- Committee fakes adopt the
declared-tests-presentlane; floorsgrid_assets ^0.6.0-rc.5(#133).
0.1.0-rc.4 #
- The seat's ServiceBundle derivation uses
ServiceBundle.derive— field drops are now compile errors (#126).
0.1.0-rc.3 #
- Landing postures as sibling
DeliveryMethods:GitHubDeliveryPolicyvalues selectGitHubPrDelivery(default),GitHubAutoMergeDelivery(native auto-merge only when validation rc == 0 and every committee grade is B or better), orGitHubDirectMergeDelivery(protected-aware); refused enables fall back loudly with named flares (#121). - CI-feedback path:
GitHubGridAssetsobservesGitHubReconcilerRuntime/CiFeedbackProjectionfrom the tree; a failedCheckConcludedroutes exactly one fencedgrid/reworkthrough the chokepoint, with the ratified attempt budget and cap gate (#122). GitHubReconcilerAssets: the provider that constructs a liveGitHubReconcilerRuntimefrom aGitHubReconcilerConfigvalue and mounts it for the seat; config-absent and dry/offline compositions construct nothing (#123).
0.1.0-rc.2 #
- Requires
grid_assets ^0.6.0-rc.1. This is the load-bearing change: 0.1.0-rc.1 could resolve alongsidegrid_assets 0.5.0-rc.1, which still exportedGitHubPrDelivery, so a hosted resolve saw the same symbol from two packages and failed to compile ("'GitHubPrDelivery' is imported from both ..."). Local path overrides masked it; only a no-override resolve hit it. The tightened constraint makes that pairing unrepresentable.
Changelog #
0.1.0-rc.1 #
- Initial release: GitHub App identity and authenticated REST transport.
- Home of the org's GitHub grid-asset implementations:
GitHubAppPrOpener,GitHubPrDelivery, theGitHubGridAssetsseed, and the reconciler/cursor surface, relocated out ofgrid_assetsby pow-2ua (power_station #109).grid_assetsholds the generic assets and the abstractions; the dependency runs implementation -> abstraction, so this package depends ongrid_assetsand never the reverse. - Published as a pre-release because it depends on pre-release siblings
(
grid_assets ^0.5.0-rc.1,grid_engine ^0.3.0-rc.3,grid_runtime).