Repository navigation
docs(qa): RUNNER.md reads the connector self-URL from /meta/connector and states the scheduled-work switch - #24156
Merged
Conversation
…facts as the runtime answers them The connector self-URL check pointed runners at GET /api/v1/automation/connectors for a baseUrl that route never carries; it now reads the instance's own metadata (GET /api/v1/meta/connector/showcase_status_api, item.providerConfig.baseUrl) and records what a dev boot answered with and without OS_PORT. Package-authored scheduled work being off by default (OS_AUTOMATION_SCHEDULED_WORK_ENABLED) had no environment fact at all; it gets one, with its reader, the binders that consume it, and a measured default/on boot pair. Claude-Session: https://claude.ai/code/session_016PVjjuVPte5XEJvaQx1E4t Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
席位核对 · ACCEPT · PR #24156 (draft, head
|
This was referenced Oct 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #24119
Clause-②: no
Docs only:
docs/qa/platform-checklist/RUNNER.md, the two runner facts the card names, both inside "Environment facts the runner should not re-derive". Nothing else in the file moved. The "The record title" section is untouched, because #24127 may change it. No area file, no product code, no changeset: the diff ships nothing from any package, and the seat appliesskip-changesetat review.Authored by the os-dev dispatched for this card by the
domain:devxseat 2, sessionsession_016PVjjuVPte5XEJvaQx1E4t, branchclaude/issue-24119-runner-facts.How both facts were re-measured
Both were measured on
mainat2889760a5, the branch point, by reading the code and by twoos devboots ofexamples/app-showcase. The boots ran after a fullpnpm build, on the RUNNER's canonical boot line (objectstack dev --ui --seed-admin -p PORT -d file:...):-p 47311, environment untouched.OS_PORT=47312 OS_AUTOMATION_SCHEDULED_WORK_ENABLED=1,-p 47312.Both boots served the same
examples/app-showcase/dist/objectstack.json. The build compiled it with noOS_PORT, so its two self-pinging connectors holdproviderConfig.baseUrl: http://127.0.0.1:3000. Nothing listened on 3000.Passage 1: the connector self-URL check
Old (the bullet's
Check:sentence; the rest of the bullet is unchanged):New:
Sources and measurements:
GET /api/v1/automation/connectorsis served by theparts[0] === 'connectors'branch ofpackages/runtime/src/domains/automation.ts. That branch answersgetConnectorDescriptors()frompackages/services/service-automation/src/engine.ts, whose projection isname, label, type, description, icon, origin, state, degradedReason, actions. It has nobaseUrland noproviderConfig. Measured on both boots: every row's keys were exactlyactions, description, icon, label, name, origin, state, type, and the stringbaseUrldoes not occur in the body.GET /api/v1/meta/connector/showcase_status_apianswers the declared item. Itsitem.providerConfig.baseUrlis the valueresolveShowcaseSelfUrl()produced (examples/app-showcase/src/system/connectors/index.ts). Boot A answeredhttp://127.0.0.1:3000. Boot B answeredhttp://127.0.0.1:47312, while the artifact on disk still said 3000.showcase_taskfiredshowcase_declarative_connector_ping, which failed withNode 'ping' failed: connector_action(showcase_status_api.request) failed: fetch failed. On boot B the same create produced acompletedrun whoseping.bodycarriedstatus: 'ok'.plugins:array holds instances (isHostConfig,packages/cli/src/utils/plugin-detection.ts). So theservechild loadsobjectstack.config.tsitself and wraps it innew AppPlugin(config)(packages/cli/src/commands/serve.ts), andresolveShowcaseSelfUrl()reads the serving process's environment.os devhands-pto that child as--portand never exportsOS_PORT(itslocalEnv,packages/cli/src/commands/dev.ts). So the bullet's existing claim that-palone is not enough still holds, and that part was left as written.Disproved half of the card's reading. The card recorded that "
GET /api/v1/meta/connectorshows the build-timehttp://127.0.0.1:3000". On anos devboot that value is not build-time. It follows the serving process's environment: boot B answered 47312 over an artifact holding 3000. 3000 is what any boot withoutOS_PORTorSHOWCASE_SELF_URLanswers. The new text says this, so the next runner does not reason from the artifact.Passage 2: scheduled work
Premise correction. RUNNER.md had no scheduled-work passage, so there was nothing stale to rewrite:
git show c91af8ed6:docs/qa/platform-checklist/RUNNER.md | grep -ci schedulprints 0 (exit 1).c91af8ed6, the card's measurement commit, and2889760a5:git diff --statprints nothing.git merge-base --is-ancestor c91af8ed6 2889760a5exits 0. A positive answer proves itself, even on this shallow checkout.The fact was missing, not stale. The card's Done-when ("RUNNER.md states both facts as the runtime answers them") is met by adding it as one new environment-fact bullet, right after the connector bullet. Old text: none.
New:
Sources and measurements:
resolveScheduledWorkEnabled()inpackages/types/src/env.ts. It readsOS_AUTOMATION_SCHEDULED_WORK_ENABLEDand is truthy only for1,true,onoryes. Its docblock reads "Default OFF, in every posture and every kernel".resolveScheduledWorkPolicy()andscheduledWorkDisabledReason()in the same file are what the engine's bind, the/_statusrow and the schedule trigger read. AppPlugin's job loop logsdeclarative jobs NOT scheduled — …at info level (packages/runtime/src/app-artifact-handlers.ts, the!resolveScheduledWorkEnabled()branch).os devdoes not set it. Neitherpackages/cli/src/commands/dev.tsnorserve.tsnames the variable, anddev'slocalEnvdoes not carry it.Flows: 32 flow(s) 19 bound …and the twoNOT bound — disabled by deployment policylines, forshowcase_task_due_reminderandshowcase_scheduled_digest._statusansweredbound: falsefor both, with the policy reason.21 bound, and_statusansweredbound: truefor both.showcase_scheduled_digestcompleted its first run at 2026-10-17T05:51:55Z withtrigger.type: 'schedule', less than a minute after boot.Gates
All gates below were run on the final head
4094dd433, which isd76548150(the edit) plus a merge ofmainat6dede7a51. The merged commit touches none of the paths cited above. Each exit code was captured before any pipe.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(no paths) derived 13 commands from a 1-path change set. Every one exited 0:check-ci-filter-parity,check-closing-keyword-parityand its--self-test,check-comment-mask-corpus,@objectstack/lint check:doc-formula-expressions,check:cross-package-test-inputs,check:doc-authoring,check:driver-memory-census,check:gitlink-declared,check:nul-bytes,check:platform-checklist,check:refd-timer-probeandcheck:watch-hint-literal.check:platform-checklistprinted:check-platform-checklist: OK — 16 areas, 327 items (322 active, 1 planned).--ranreconciliation:13 derived famil(ies) accounted for — 13 run, 0 NOT-MEASURED (a DERIVED zero — all 13 recorded an exit code and none of them is 3).node scripts/pm/check-governed-merges.mjs --branch claude/issue-24119-runner-facts:0 of 1 path(s) hit the registerand NOT governed, 42 changed lines.Acceptance notes
automation.json,integration-system.json,platform-core.json,approvals.json). The new bullet states it once, for every item and every runner.serve.tssays that on anos devboot of a host config, the dev artifact door's copy of the stack replaces the config wrap's copy on the first artifact reload. After a watch rebuild,/meta/connectorwould therefore follow the recompiled artifact. Whether that recompile sees an exportedOS_PORTwas not measured. Both boots above were cold boots with no rebuild. No carrier.Generated by Claude Code