Skip to content

Harden stream status watchdog and add operator strategy docs#3

Merged
freshtechbro merged 4 commits intomainfrom
codex/stream-watchdog-and-ops-docs
Mar 2, 2026
Merged

Harden stream status watchdog and add operator strategy docs#3
freshtechbro merged 4 commits intomainfrom
codex/stream-watchdog-and-ops-docs

Conversation

@freshtechbro
Copy link
Copy Markdown
Owner

Summary

  • fix ops stream auth fallback and Decisions feed wiring to use authenticated stream URLs
  • switch decisions query ordering to newest-first () and align unit assertions
  • harden dashboard stream UX with consistent states, shared debounce config, and TopNav/Markets parity
  • add backend SSE heartbeat and frontend inactivity watchdog () to prevent stale-live badges
  • add plus architecture SVG and README/docs index links

Validation

openpolytrader@0.1.0 lint
eslint . --ext .ts --max-warnings=0

openpolytrader@0.1.0 typecheck
tsc -p tsconfig.json --noEmit

openpolytrader@0.1.0 build
tsc -p tsconfig.json

openpolytrader@0.1.0 test
vitest run

RUN v4.0.16 /Users/bishopdotun/Documents/DevProjects/openpolytrader

✓ tests/unit/market-catalog-refresher.test.ts (76 tests) 86ms
✓ tests/unit/ip-oracle-client.test.ts (12 tests) 197ms
✓ tests/unit/polymarket-api-creds.test.ts (8 tests) 183ms
✓ tests/unit/fw-projection-agent.test.ts (5 tests) 84ms
✓ tests/unit/learning-agent.test.ts (7 tests) 153ms
✓ tests/unit/execution.test.ts (92 tests) 285ms
✓ tests/unit/slo-aggregates.test.ts (5 tests) 157ms
✓ tests/unit/risk-profile-active.test.ts (37 tests) 39ms
✓ tests/unit/concurrency.test.ts (4 tests) 83ms
✓ tests/unit/config.test.ts (46 tests) 75ms
✓ tests/unit/llm-services.test.ts (59 tests) 673ms
✓ tests/unit/fw-projection-remediation.test.ts (3 tests) 49ms
✓ tests/unit/zen-messages-client.test.ts (14 tests) 233ms
✓ tests/unit/llm-decision-logger.test.ts (2 tests) 44ms
✓ tests/unit/dependency-resolver.test.ts (22 tests) 30ms
✓ tests/unit/signal-aggregator.test.ts (30 tests) 42ms
✓ tests/unit/websearch.test.ts (48 tests) 133ms
✓ tests/unit/portfolio-llm-anomaly.test.ts (8 tests) 55ms
✓ tests/unit/risk-advisor.test.ts (9 tests) 56ms
✓ tests/unit/scanner-llm.test.ts (12 tests) 56ms
✓ tests/unit/api-config.test.ts (101 tests) 1349ms
✓ tests/unit/market-catalog-prestart-defaults.test.ts (2 tests) 15ms
✓ tests/unit/ops-agent-llm-summary.test.ts (8 tests) 61ms
✓ tests/unit/market-catalog-generator.test.ts (56 tests) 1893ms
✓ skips markets when orderbook verification throws (catch) 1759ms
✓ tests/unit/dependency-relation-catalog-tool.test.ts (6 tests) 68ms
✓ tests/unit/marketdata-llm-outlier.test.ts (3 tests) 39ms
✓ tests/unit/dependency-llm-extractor.test.ts (9 tests) 60ms
✓ tests/unit/portfolio.test.ts (56 tests) 31ms
✓ tests/unit/gates.test.ts (42 tests) 29ms
✓ tests/unit/market-catalog-cli.test.ts (4 tests) 55ms
✓ tests/unit/supervisor-reconciliation.test.ts (11 tests) 26ms
✓ tests/unit/polymarket-data-api.test.ts (13 tests) 26ms
✓ tests/unit/ops-agent-scheduling.test.ts (1 test) 11ms
✓ tests/unit/dependency-relation-catalog-cli.test.ts (2 tests) 14ms
✓ tests/unit/state-rebuilder.test.ts (2 tests) 21ms
✓ tests/unit/openai-sdk-client-extract.test.ts (12 tests) 19ms
✓ tests/unit/llm-config.test.ts (12 tests) 19ms
✓ tests/unit/execution-user-channel.test.ts (8 tests) 35ms
✓ tests/unit/execution-state.test.ts (19 tests) 10ms
✓ tests/unit/circuit-breaker.test.ts (4 tests) 12ms
✓ tests/unit/risk-profile-root.test.ts (1 test) 8ms
✓ tests/unit/risk.test.ts (26 tests) 7ms
stdout | tests/unit/main-shutdown.test.ts > createShutdownHandler > uses default timer and logger fallbacks when not provided
[shutdown] received SIGTERM, beginning shutdown

stdout | tests/unit/main-shutdown.test.ts > createShutdownHandler > uses default timer and logger fallbacks when not provided
[shutdown] complete in 1ms

✓ tests/unit/main-shutdown.test.ts (10 tests) 21ms
✓ tests/unit/slo-checks.test.ts (23 tests) 32ms
✓ tests/unit/api-config-missing-schema.test.ts (1 test) 15ms
✓ tests/unit/no-hardcoded-urls.test.ts (1 test) 21ms
✓ tests/unit/no-process-env-access.test.ts (1 test) 44ms
✓ tests/unit/websearch_cache.test.ts (7 tests) 13ms
✓ tests/unit/trading-state-manager.test.ts (13 tests) 41ms
✓ tests/unit/fw-relation-catalog-startup-guard.test.ts (5 tests) 6ms
✓ tests/unit/dependency-relation-catalog.test.ts (5 tests) 10ms
✓ tests/unit/ev_signal.test.ts (4 tests) 11ms
✓ tests/unit/polymarket-clob.test.ts (6 tests) 11ms
✓ tests/unit/retry-policy.test.ts (2 tests) 35ms
✓ tests/unit/polymarket-auth.test.ts (5 tests) 6ms
✓ tests/unit/no-hardcoded-dashboard-urls.test.ts (1 test) 14ms
✓ tests/unit/telemetry.test.ts (11 tests) 35ms
✓ tests/unit/marketdata-llm-request.test.ts (1 test) 15ms
✓ tests/unit/env-example-coverage.test.ts (2 tests) 14ms
✓ tests/unit/market-catalog.test.ts (2 tests) 7ms
✓ tests/unit/message-bus.test.ts (2 tests) 4ms
✓ tests/unit/no-dashboard-import-meta-env.test.ts (1 test) 8ms
✓ tests/unit/marketdata-price-change.test.ts (3 tests) 11ms
✓ tests/unit/book-freshness-quarantine.test.ts (12 tests) 8ms
✓ tests/unit/risk-profile-override-dir.test.ts (1 test) 6ms
✓ tests/unit/marketdata-subscriptions.test.ts (1 test) 5ms
✓ tests/unit/ops-agent-extra.test.ts (13 tests) 7ms
✓ tests/unit/rate-limiter.test.ts (1 test) 25ms
✓ tests/unit/execution-llm-hints.test.ts (4 tests) 28ms
✓ tests/unit/allowlist.test.ts (10 tests) 6ms
✓ tests/unit/infra-config.test.ts (1 test) 12ms
✓ tests/unit/incident-tracker.test.ts (3 tests) 5ms
✓ tests/unit/serialization.test.ts (12 tests) 9ms
✓ tests/unit/dependency-domain.test.ts (7 tests) 8ms
✓ tests/unit/fw-hull-solver.test.ts (2 tests) 7ms
✓ tests/unit/llm-decision-stream.test.ts (2 tests) 9ms
✓ tests/unit/polymarket-realtime.test.ts (4 tests) 14ms
✓ tests/unit/fw-loop-engine.test.ts (2 tests) 21ms
✓ tests/unit/domain-utils.test.ts (8 tests) 8ms
✓ tests/unit/security.test.ts (6 tests) 6ms
✓ tests/unit/orderbook.test.ts (8 tests) 9ms
✓ tests/unit/fw-objective.test.ts (3 tests) 4ms
✓ tests/unit/risk-agent-llm.test.ts (3 tests) 5ms
✓ tests/unit/contract-mapper.test.ts (2 tests) 10ms
✓ tests/unit/dev-orchestration-scripts.test.ts (4 tests) 5ms
✓ tests/unit/config-validate-missing-schema.test.ts (1 test) 7ms
✓ tests/unit/dashboard-env-example-coverage.test.ts (1 test) 9ms
✓ tests/unit/sequence.test.ts (9 tests) 7ms
✓ tests/unit/event-dedupe.test.ts (5 tests) 5ms
✓ tests/unit/math.test.ts (4 tests) 4ms
✓ tests/unit/risk-extended.test.ts (6 tests) 4ms
✓ tests/unit/capital-config.test.ts (1 test) 2ms
✓ tests/unit/telemetry-events-module.test.ts (1 test) 2ms

Test Files 93 passed (93)
Tests 1140 passed (1140)
Start at 14:31:35
Duration 5.92s (transform 6.48s, setup 0ms, import 13.44s, tests 7.15s, environment 20ms)

openpolytrader@0.1.0 test:coverage
vitest run --coverage

RUN v4.0.16 /Users/bishopdotun/Documents/DevProjects/openpolytrader
Coverage enabled with v8

✓ tests/unit/ip-oracle-client.test.ts (12 tests) 187ms
✓ tests/unit/slo-aggregates.test.ts (5 tests) 108ms
✓ tests/unit/zen-messages-client.test.ts (14 tests) 138ms
✓ tests/unit/learning-agent.test.ts (7 tests) 134ms
✓ tests/unit/polymarket-api-creds.test.ts (8 tests) 156ms
✓ tests/unit/execution.test.ts (92 tests) 238ms
✓ tests/unit/websearch.test.ts (48 tests) 42ms
✓ tests/unit/market-catalog-refresher.test.ts (76 tests) 134ms
✓ tests/unit/concurrency.test.ts (4 tests) 68ms
✓ tests/unit/llm-services.test.ts (59 tests) 636ms
✓ tests/unit/fw-projection-agent.test.ts (5 tests) 50ms
✓ tests/unit/config.test.ts (46 tests) 61ms
✓ tests/unit/dependency-relation-catalog-tool.test.ts (6 tests) 49ms
✓ tests/unit/ops-agent-llm-summary.test.ts (8 tests) 62ms
✓ tests/unit/dependency-llm-extractor.test.ts (9 tests) 69ms
✓ tests/unit/market-catalog-cli.test.ts (4 tests) 47ms
✓ tests/unit/risk-advisor.test.ts (9 tests) 103ms
✓ tests/unit/portfolio-llm-anomaly.test.ts (8 tests) 88ms
✓ tests/unit/fw-projection-remediation.test.ts (3 tests) 51ms
✓ tests/unit/no-process-env-access.test.ts (1 test) 20ms
✓ tests/unit/scanner-llm.test.ts (12 tests) 88ms
✓ tests/unit/llm-decision-logger.test.ts (2 tests) 41ms
✓ tests/unit/api-config.test.ts (101 tests) 1372ms
✓ tests/unit/signal-aggregator.test.ts (30 tests) 56ms
✓ tests/unit/trading-state-manager.test.ts (13 tests) 11ms
✓ tests/unit/market-catalog-generator.test.ts (56 tests) 1912ms
✓ skips markets when orderbook verification throws (catch) 1763ms
✓ tests/unit/risk-profile-active.test.ts (37 tests) 43ms
✓ tests/unit/retry-policy.test.ts (2 tests) 16ms
✓ tests/unit/telemetry.test.ts (11 tests) 12ms
✓ tests/unit/execution-user-channel.test.ts (8 tests) 34ms
✓ tests/unit/marketdata-llm-outlier.test.ts (3 tests) 51ms
✓ tests/unit/slo-checks.test.ts (23 tests) 19ms
✓ tests/unit/dependency-resolver.test.ts (22 tests) 31ms
✓ tests/unit/portfolio.test.ts (56 tests) 39ms
✓ tests/unit/gates.test.ts (42 tests) 20ms
✓ tests/unit/rate-limiter.test.ts (1 test) 9ms
✓ tests/unit/polymarket-data-api.test.ts (13 tests) 19ms
✓ tests/unit/execution-llm-hints.test.ts (4 tests) 15ms
✓ tests/unit/no-hardcoded-urls.test.ts (1 test) 17ms
✓ tests/unit/state-rebuilder.test.ts (2 tests) 5ms
✓ tests/unit/fw-loop-engine.test.ts (2 tests) 6ms
✓ tests/unit/supervisor-reconciliation.test.ts (11 tests) 54ms
stdout | tests/unit/main-shutdown.test.ts > createShutdownHandler > uses default timer and logger fallbacks when not provided
[shutdown] received SIGTERM, beginning shutdown

stdout | tests/unit/main-shutdown.test.ts > createShutdownHandler > uses default timer and logger fallbacks when not provided
[shutdown] complete in 3ms

✓ tests/unit/main-shutdown.test.ts (10 tests) 43ms
✓ tests/unit/llm-config.test.ts (12 tests) 37ms
✓ tests/unit/market-catalog-prestart-defaults.test.ts (2 tests) 24ms
✓ tests/unit/dependency-relation-catalog-cli.test.ts (2 tests) 51ms
✓ tests/unit/no-hardcoded-dashboard-urls.test.ts (1 test) 7ms
✓ tests/unit/marketdata-llm-request.test.ts (1 test) 67ms
✓ tests/unit/openai-sdk-client-extract.test.ts (12 tests) 11ms
✓ tests/unit/polymarket-realtime.test.ts (4 tests) 5ms
✓ tests/unit/circuit-breaker.test.ts (4 tests) 16ms
✓ tests/unit/env-example-coverage.test.ts (2 tests) 5ms
✓ tests/unit/websearch_cache.test.ts (7 tests) 20ms
✓ tests/unit/api-config-missing-schema.test.ts (1 test) 26ms
✓ tests/unit/polymarket-clob.test.ts (6 tests) 13ms
✓ tests/unit/infra-config.test.ts (1 test) 13ms
✓ tests/unit/ops-agent-scheduling.test.ts (1 test) 7ms
✓ tests/unit/marketdata-price-change.test.ts (3 tests) 11ms
✓ tests/unit/ev_signal.test.ts (4 tests) 11ms
✓ tests/unit/contract-mapper.test.ts (2 tests) 3ms
✓ tests/unit/execution-state.test.ts (19 tests) 11ms
✓ tests/unit/dependency-relation-catalog.test.ts (5 tests) 16ms
✓ tests/unit/llm-decision-stream.test.ts (2 tests) 6ms
✓ tests/unit/orderbook.test.ts (8 tests) 6ms
✓ tests/unit/dashboard-env-example-coverage.test.ts (1 test) 5ms
✓ tests/unit/serialization.test.ts (12 tests) 7ms
✓ tests/unit/dependency-domain.test.ts (7 tests) 7ms
✓ tests/unit/no-dashboard-import-meta-env.test.ts (1 test) 17ms
✓ tests/unit/risk.test.ts (26 tests) 8ms
✓ tests/unit/risk-profile-root.test.ts (1 test) 13ms
✓ tests/unit/domain-utils.test.ts (8 tests) 8ms
✓ tests/unit/book-freshness-quarantine.test.ts (12 tests) 9ms
✓ tests/unit/fw-hull-solver.test.ts (2 tests) 6ms
✓ tests/unit/config-validate-missing-schema.test.ts (1 test) 4ms
✓ tests/unit/market-catalog.test.ts (2 tests) 8ms
✓ tests/unit/ops-agent-extra.test.ts (13 tests) 11ms
✓ tests/unit/sequence.test.ts (9 tests) 3ms
✓ tests/unit/polymarket-auth.test.ts (5 tests) 5ms
✓ tests/unit/fw-relation-catalog-startup-guard.test.ts (5 tests) 7ms
✓ tests/unit/risk-profile-override-dir.test.ts (1 test) 9ms
✓ tests/unit/allowlist.test.ts (10 tests) 8ms
✓ tests/unit/security.test.ts (6 tests) 5ms
✓ tests/unit/risk-agent-llm.test.ts (3 tests) 5ms
✓ tests/unit/marketdata-subscriptions.test.ts (1 test) 10ms
✓ tests/unit/incident-tracker.test.ts (3 tests) 25ms
✓ tests/unit/dev-orchestration-scripts.test.ts (4 tests) 5ms
✓ tests/unit/event-dedupe.test.ts (5 tests) 5ms
✓ tests/unit/fw-objective.test.ts (3 tests) 5ms
✓ tests/unit/risk-extended.test.ts (6 tests) 3ms
✓ tests/unit/message-bus.test.ts (2 tests) 4ms
✓ tests/unit/math.test.ts (4 tests) 4ms
✓ tests/unit/telemetry-events-module.test.ts (1 test) 3ms
✓ tests/unit/capital-config.test.ts (1 test) 4ms

Test Files 93 passed (93)
Tests 1140 passed (1140)
Start at 14:31:42
Duration 6.96s (transform 5.93s, setup 0ms, import 12.99s, tests 6.93s, environment 18ms)

% Coverage report from v8
-------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-------------------|---------|----------|---------|---------|-------------------
All files | 98.89 | 97.02 | 98.6 | 99.3 |
agents/dependency | 96.42 | 90.54 | 100 | 98.57 |
...MExtractor.ts | 96 | 89.06 | 100 | 98.43 | 255
...artupGuard.ts | 100 | 100 | 100 | 100 |
agents/execution | 100 | 100 | 100 | 100 |
...ionAdvisor.ts | 100 | 100 | 100 | 100 |
agents/ops | 99.15 | 97.56 | 95.65 | 100 |
OpsAgent.ts | 97.87 | 93.58 | 93.33 | 100 | 91,200,278-280
...Quarantine.ts | 98.61 | 98.55 | 85.71 | 100 | 60
sloAggregates.ts | 100 | 98.61 | 100 | 100 | 100
sloChecks.ts | 100 | 100 | 100 | 100 |
agents/portfolio | 100 | 98.41 | 100 | 100 |
...folioAgent.ts | 100 | 98.41 | 100 | 100 | 96-99,504
agents/risk | 96.26 | 94 | 100 | 97.69 |
RiskAdvisor.ts | 93.33 | 96.55 | 100 | 93.1 | 129-142
RiskAgent.ts | 97.11 | 93.38 | 100 | 99 | 294
agents/signal | 100 | 98.21 | 100 | 100 |
...gatorAgent.ts | 100 | 98.21 | 100 | 100 | 154,217
api | 99.16 | 98.71 | 100 | 100 |
server.ts | 99.16 | 98.71 | 100 | 100 | 676,683-685
config | 99.17 | 98.06 | 100 | 99.05 |
capital.ts | 100 | 100 | 100 | 100 |
env.ts | 100 | 100 | 100 | 100 |
infra.ts | 100 | 100 | 100 | 100 |
llm.ts | 100 | 100 | 100 | 100 |
markets.ts | 100 | 100 | 100 | 100 |
policy.ts | 100 | 100 | 100 | 100 |
risk.ts | 100 | 100 | 100 | 100 |
riskProfile.ts | 99.24 | 98.9 | 100 | 99.13 | 259
schema.ts | 100 | 95.65 | 100 | 100 | 223,268
store.ts | 100 | 100 | 100 | 100 |
validate.ts | 95 | 94.82 | 100 | 95 | 94,100
venues.ts | 0 | 0 | 0 | 0 |
core | 99.32 | 100 | 97.5 | 99.29 |
...uitBreaker.ts | 98.41 | 100 | 94.11 | 98.3 | 97
MessageBus.ts | 100 | 100 | 100 | 100 |
...eRebuilder.ts | 100 | 100 | 100 | 100 |
...ateManager.ts | 100 | 100 | 100 | 100 |
shutdown.ts | 100 | 100 | 100 | 100 |
domain | 97.7 | 93.8 | 100 | 98.02 |
allowlist.ts | 100 | 100 | 100 | 100 |
...ractMapper.ts | 100 | 100 | 100 | 100 |
dependency.ts | 97.22 | 88.54 | 100 | 100 | ...70,245-252,264
execution.ts | 95.34 | 93.4 | 100 | 95.23 | ...69,178-180,194
feeModel.ts | 100 | 100 | 100 | 100 |
gates.ts | 97.73 | 93.85 | 100 | 97.58 | ...78,382,416,423
idempotency.ts | 100 | 100 | 100 | 100 |
llm.ts | 100 | 100 | 100 | 100 |
market.ts | 100 | 100 | 100 | 100 |
opportunity.ts | 100 | 100 | 100 | 100 |
orderbook.ts | 100 | 96.38 | 100 | 100 | 165,188
sequence.ts | 100 | 100 | 100 | 100 |
security | 100 | 100 | 100 | 100 |
Auth.ts | 100 | 100 | 100 | 100 |
Secrets.ts | 100 | 100 | 100 | 100 |
services | 99 | 97.48 | 96 | 99.54 |
...entTracker.ts | 93.33 | 100 | 75 | 93.33 | 24
...gRefresher.ts | 99.07 | 97.32 | 97.67 | 99.64 | 659
...etApiCreds.ts | 100 | 100 | 100 | 100 |
...marketAuth.ts | 100 | 100 | 100 | 100 |
...ketDataApi.ts | 98.41 | 96 | 91.66 | 100 | 132,144
RateLimiter.ts | 100 | 100 | 100 | 100 |
RetryPolicy.ts | 100 | 100 | 100 | 100 |
...ices/ip-oracle | 95.18 | 93.54 | 100 | 96.05 |
...acleClient.ts | 95.18 | 93.54 | 100 | 96.05 | 198-200
services/llm | 99.39 | 98.93 | 98.3 | 99.76 |
LLMClient.ts | 99.14 | 97.91 | 100 | 99.51 | 639
...sionLogger.ts | 100 | 97.22 | 100 | 100 | 123
LLMRouter.ts | 100 | 100 | 100 | 100 |
MockLLMClient.ts | 100 | 100 | 100 | 100 |
...ISdkClient.ts | 100 | 100 | 100 | 100 |
...agesClient.ts | 99 | 100 | 88.88 | 100 |
...ices/websearch | 99.45 | 97.42 | 96.15 | 100 |
ExaClient.ts | 99.42 | 98.14 | 95.83 | 100 | 153,284
...rawlClient.ts | 99.39 | 96.11 | 95.45 | 100 | 128,242,258,272
...earchCache.ts | 100 | 100 | 100 | 100 |
telemetry | 100 | 100 | 100 | 100 |
allowlist.ts | 100 | 100 | 100 | 100 |
...sionStream.ts | 100 | 100 | 100 | 100 |
metrics.ts | 100 | 100 | 100 | 100 |
tools | 98.9 | 96.74 | 100 | 99.06 |
...CatalogCli.ts | 100 | 100 | 100 | 100 |
...gGenerator.ts | 98.75 | 96.35 | 100 | 98.92 | 156,303-304
...neratorCli.ts | 100 | 100 | 100 | 100 |
...ogPrestart.ts | 100 | 100 | 100 | 100 |
...restartCli.ts | 100 | 100 | 100 | 100 |
utils | 100 | 100 | 100 | 100 |
concurrency.ts | 100 | 100 | 100 | 100 |
crypto.ts | 100 | 100 | 100 | 100 |
eventDedupe.ts | 100 | 100 | 100 | 100 |
math.ts | 100 | 100 | 100 | 100 |
serialization.ts | 100 | 100 | 100 | 100 |
-------------------|---------|----------|---------|---------|-------------------

openpolytrader-dashboard@0.1.0 build
vite build

vite v7.3.0 building client environment for production...
transforming...
✓ 71 modules transformed.
rendering chunks...
computing gzip size...
dist/index.html 0.79 kB │ gzip: 0.43 kB
dist/assets/index-PqrGoB65.css 18.35 kB │ gzip: 4.15 kB
dist/assets/index-CkxwDnB0.js 245.30 kB │ gzip: 76.79 kB
✓ built in 945ms

Notes

  • deleted local snapshot artifacts under as requested (not tracked in git).

freshtechbro and others added 4 commits March 2, 2026 14:30
- append token only when session cookie is absent for stream auth fallback
- wire Decisions page to use getOpsStreamUrl for authenticated SSE
- return decisions in descending timestamp order and align endpoint test expectation

Co-authored-by: Codex <noreply@openai.com>
- add connecting/live/offline stream state handling in TopNav and Markets
- share stream debounce config and expose watchdog timeout env
- add SSE heartbeat event stream_ping and no-event watchdog fallback
- keep stream badge stable during bootstrap while allowing auto-recovery

Co-authored-by: Codex <noreply@openai.com>
- add operator strategy report with strategy selection and risk controls
- include architecture flow SVG asset and link it from README/docs index
- surface strategy report in operations documentation map

Co-authored-by: Codex <noreply@openai.com>
- Preserve user-selected risk profile while async config bootstrap completes
- Avoid default profile overwriting fast user selection before apply

Co-authored-by: Codex <noreply@openai.com>
@freshtechbro freshtechbro merged commit edd21e2 into main Mar 2, 2026
1 check passed
@freshtechbro freshtechbro deleted the codex/stream-watchdog-and-ops-docs branch March 2, 2026 20:37
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