Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
318 commits
Select commit Hold shift + click to select a range
d3212eb
🌱 ci(tests): slice pkg/hub 3-way, rank slowest tests per shard, shuff…
clubanderson Sep 1, 2026
26b4d7e
πŸ§ͺ test(hive): pin every bucket decision in writeMergeEligible
clubanderson Sep 1, 2026
20949f4
πŸ§ͺ test(dashboard): pin the /api/config/governor response contract
clubanderson Sep 1, 2026
683765a
Merge pull request #5520 from kubestellar/fix/5388-restore-guard
kubestellar-prow[bot] Sep 1, 2026
b2a4093
πŸ§ͺ test(bin): contract test for enumerate-actionable.sh
clubanderson Sep 1, 2026
4550d3b
Merge pull request #5519 from kubestellar/fix/5508-budget-floor
kubestellar-prow[bot] Sep 1, 2026
7edd5c5
refactor(hub): extract SHA poller tick body for direct testing
clubanderson Sep 1, 2026
ca91cd7
Merge pull request #5521 from kubestellar/fix/5507-advisory-digest-su…
kubestellar-prow[bot] Sep 1, 2026
47fcbae
Merge pull request #5523 from kubestellar/ci/shard-hub-tests
kubestellar-prow[bot] Sep 1, 2026
e928e75
ci(dashboard-lint): catch calls to undefined identifiers with ESLint …
clubanderson Sep 1, 2026
d1f36ac
fix(dashboard): legacy budget toggle called undefined renderAll()
clubanderson Sep 1, 2026
c9d0893
Merge pull request #5524 from kubestellar/test/merge-eligible-buckets
kubestellar-prow[bot] Sep 1, 2026
c97f82c
πŸ§ͺ test(governor): extract six testable seams from runEvalCycle
clubanderson Sep 1, 2026
12d140c
Merge pull request #5526 from kubestellar/test/governor-config-get-co…
kubestellar-prow[bot] Sep 1, 2026
7b22769
ci: take docker and overlayfs-exec-guard off the build-and-test criti…
clubanderson Sep 1, 2026
d1470db
test(hub): per-test HubServer construction with isolated /data footprint
clubanderson Sep 1, 2026
64c0ef8
πŸ§ͺ test: add internal/testutil.Eventually and a time.Sleep ratchet for…
clubanderson Sep 1, 2026
708de37
Merge pull request #5527 from kubestellar/test/enumerate-actionable-c…
kubestellar-prow[bot] Sep 1, 2026
02ce082
πŸ”§ ci: guard that every src/deploy/ test suite is wired into a workflow
clubanderson Sep 1, 2026
a63874b
πŸ§ͺ test(hub): use a valid hex SHA in the auto-upgrade tick test
clubanderson Sep 1, 2026
924ec20
fix(bin): stop xargs -I from clobbering python dict literals in SHA r…
clubanderson Sep 1, 2026
55cdb89
✨ tui T32: split SSE reconcile and activity poll cadences
Danathar Sep 1, 2026
20010e0
[guide] docs: document reviewer selection algorithm in review-swarm.md
Sep 1, 2026
6aa9c97
[guide] docs: add governor.litellm prerequisites to retro-lane.md
Sep 1, 2026
f106690
test(bin): pin kick-governor.sh cadence/budget/pause contracts
clubanderson Sep 1, 2026
dfb8bf7
Merge pull request #5532 from kubestellar/ci/dashboard-no-undef
kubestellar-prow[bot] Sep 1, 2026
4dcf956
Merge pull request #5535 from kubestellar/ci/overlayfs-guard-cost
kubestellar-prow[bot] Sep 1, 2026
8ebdb68
πŸ› fix: agy sign-in cannot persist; a claude login must not restart an…
Danathar Sep 1, 2026
2c23268
Merge pull request #5533 from kubestellar/test/eval-cycle-seams
kubestellar-prow[bot] Sep 1, 2026
c8d493e
Merge pull request #5536 from kubestellar/test/hub-per-test-server
kubestellar-prow[bot] Sep 1, 2026
1e14371
Merge pull request #5538 from kubestellar/fix/5491-5529-ci-wiring
kubestellar-prow[bot] Sep 1, 2026
87e7059
πŸ› get-started: replace nonexistent npx package with the real contribu…
clubanderson Sep 1, 2026
9ff1bf5
Merge pull request #5544 from Danathar/feat/5421-split-poll-cadences
kubestellar-prow[bot] Sep 1, 2026
347d70a
Merge pull request #5545 from kubestellar/guide/docs-review-swarm-sel…
kubestellar-prow[bot] Sep 1, 2026
931d7bd
Merge pull request #5546 from kubestellar/guide/docs-retro-lane-litellm
kubestellar-prow[bot] Sep 1, 2026
44b886c
Merge pull request #5548 from kubestellar/test/kick-governor-contract
kubestellar-prow[bot] Sep 1, 2026
b8bd5c2
Merge pull request #5531 from kubestellar/test/sha-poller-tick
kubestellar-prow[bot] Sep 1, 2026
53cc2b0
test(bin): contract tests for merge-gate.sh and gh-rate-check.sh
clubanderson Sep 1, 2026
a404d87
Merge pull request #5537 from kubestellar/test/testutil-eventually-sl…
kubestellar-prow[bot] Sep 1, 2026
da93379
Merge pull request #5539 from kubestellar/fix/5528-recheck-xargs
kubestellar-prow[bot] Sep 1, 2026
6354d3d
Merge pull request #5552 from Danathar/fix/agy-credential-persistence
kubestellar-prow[bot] Sep 1, 2026
fe96434
Merge pull request #5540 from kubestellar/test/merge-gate-rate-check-…
kubestellar-prow[bot] Sep 1, 2026
8a59ca3
πŸ“š tui T26: document the complete terminal dashboard
Danathar Sep 1, 2026
d1eb586
πŸ› fix(ci): backend-smoke.yml rejected by the workflow parser β€” matrix…
clubanderson Sep 1, 2026
2638814
[architect] refactor: extract explicit poller lifecycle from register…
Sep 1, 2026
57bea4e
πŸ› fix(github): paginate findDigestComment newest-first so the bot can…
clubanderson Sep 1, 2026
78054be
πŸ› fix(bin): kick-governor pause checks fail closed, budget loop follo…
clubanderson Sep 1, 2026
fccd12e
πŸ› fix: three order-dependent test failures, not timing flakes (#5553)
clubanderson Sep 1, 2026
c8a53ce
Merge pull request #5563 from kubestellar/arch/refactor-poller-lifecycle
kubestellar-prow[bot] Sep 1, 2026
4dd9420
Merge pull request #5557 from Danathar/docs/5422-tui-operator-guide
kubestellar-prow[bot] Sep 1, 2026
c9ccf1c
Merge pull request #5560 from kubestellar/fix/5550-backend-smoke-matr…
kubestellar-prow[bot] Sep 1, 2026
1457917
Merge pull request #5566 from kubestellar/fix/5522-digest-pagination
kubestellar-prow[bot] Sep 1, 2026
6fbeb4e
πŸ“Ό docs(tui): reproducible VHS terminal demo with a loopback fixture
clubanderson Sep 1, 2026
d339dc3
πŸ› fix(bin): ci-maintainer cadence keyed to a nonexistent 'reviewer' a…
clubanderson Sep 1, 2026
0bdce4b
Merge pull request #5567 from kubestellar/fix/5549-kick-governor-defects
kubestellar-prow[bot] Sep 1, 2026
1bda02f
Merge pull request #5569 from kubestellar/fix/5553-flaky-tests
kubestellar-prow[bot] Sep 1, 2026
c4a2961
πŸ› fix(openapi): models[] is a string array, not objects; guard by run…
clubanderson Sep 1, 2026
ea34fdd
πŸ› fix(dashboard): restore cachedHealth in t.Cleanup so the live-clien…
clubanderson Sep 1, 2026
b35cb9c
✨ feat(spoke+hub): remediation-hint detectors on the heartbeat (#5577…
clubanderson Sep 1, 2026
7157d30
✨ feat(hub): remediation hints + distinct detector states on the heal…
clubanderson Sep 1, 2026
0ba5a9f
✨ feat(ui): render remediation hints on /fleet + no-cadence cause+fix…
clubanderson Sep 1, 2026
ea0053f
Merge pull request #5579 from kubestellar/remhints-5577-pr1-detectors
kubestellar-prow[bot] Sep 1, 2026
9aec121
Merge pull request #5583 from kubestellar/remhints-5577-pr2-verdict
kubestellar-prow[bot] Sep 1, 2026
11e3111
Merge pull request #5582 from kubestellar/remhints-5577-pr3-ui
kubestellar-prow[bot] Sep 1, 2026
b34254e
contribute: allow multiple concurrent sessions per GitHub account
hanthor Sep 1, 2026
1a98c68
πŸ› fix(heartbeat): degraded beats no longer blank primaryRepo/repos in…
clubanderson Sep 1, 2026
4c21d14
Merge pull request #5585 from kubestellar/fix-heartbeat-upgrading-bea…
kubestellar-prow[bot] Sep 1, 2026
4a00cbd
πŸ§ͺ test(testutil): add SkipUnlessRequired β€” make silent skips fatal in…
clubanderson Sep 1, 2026
c34f4af
πŸ§ͺ test(agent): convert guaranteed-precondition skips; arm the flag in…
clubanderson Sep 1, 2026
6cd9515
Merge pull request #5572 from kubestellar/docs/5423-tui-vhs-tape
kubestellar-prow[bot] Sep 1, 2026
cde915f
Merge pull request #5576 from kubestellar/fix/5574-openapi-models-str…
kubestellar-prow[bot] Sep 1, 2026
0afb67d
Merge pull request #5587 from kubestellar/fix/5388-go-skip-guard
kubestellar-prow[bot] Sep 1, 2026
913ea83
πŸ§ͺ test(hub): isolate manual upgrade success fixture
Danathar Sep 1, 2026
623cdd0
Merge pull request #5575 from kubestellar/fix/5571-ci-maintainer-cadence
kubestellar-prow[bot] Sep 1, 2026
4fd27c3
πŸ§ͺ test(tui): end-to-end v1 acceptance coverage for the assembled oper…
clubanderson Sep 1, 2026
8415a7b
πŸ§ͺ test(tui): wait via testutil.Eventually instead of raw time.Sleep
clubanderson Sep 1, 2026
7dcdd0d
Merge pull request #5578 from kubestellar/fix/5570-cachedhealth-leak
kubestellar-prow[bot] Sep 1, 2026
7596a2e
πŸ§ͺ test(testutil): add EventuallyEvery for in-process harnesses
clubanderson Sep 1, 2026
2774bc4
πŸ› fix(dashboard): persist dropdown choices to agent overlays
Danathar Sep 1, 2026
c78232e
πŸ“ docs: add root ROADMAP.md covering the v4/v5 release-line trajectory
clubanderson Sep 2, 2026
a60783a
Merge pull request #5590 from Danathar/fix/5580-v4-test-isolation
kubestellar-prow[bot] Sep 2, 2026
cdf3778
Merge pull request #5586 from Danathar/fix/5558-dashboard-agent-overlay
kubestellar-prow[bot] Sep 2, 2026
35e4bb1
πŸ§ͺ test(hub+agent): two more shuffle-order dependencies β€” uid-map file…
clubanderson Sep 2, 2026
ed7517b
Merge pull request #5593 from kubestellar/docs/5500-root-roadmap
kubestellar-prow[bot] Sep 2, 2026
0bb428c
🧹 remove dead pkg/channels trigger runtime; reject runtime-less chann…
clubanderson Sep 2, 2026
3b16388
Merge pull request #5584 from hanthor/multi-session-per-account
kubestellar-prow[bot] Sep 2, 2026
fb732a4
πŸ§ͺ test(testutil): make the skip-guard's coverage visible to the gate
clubanderson Sep 2, 2026
fbf3001
Merge pull request #5596 from kubestellar/fix/5580-shuffle-order-deps
kubestellar-prow[bot] Sep 2, 2026
509138b
Merge pull request #5598 from kubestellar/fix/5597-testutil-coverage
kubestellar-prow[bot] Sep 2, 2026
53f6a5f
Merge pull request #5592 from kubestellar/fix/5591-remove-dead-pkg-ch…
kubestellar-prow[bot] Sep 2, 2026
22b8eff
πŸ› fix(tui): fix six hanging/flaky acceptance tests in the T33 harness
clubanderson Sep 2, 2026
6845aaf
Merge pull request #5573 from kubestellar/test/5424-tui-acceptance
kubestellar-prow[bot] Sep 2, 2026
be52a38
fix(dashboard): show every reason an agent won't run on its card (#5594)
Danathar Sep 2, 2026
7a8edd4
πŸ§ͺ test(dashboard): centralize health-cache isolation in a restore hook
clubanderson Sep 2, 2026
dccf52f
πŸ‘· ci: dedicated bounded -shuffle lane for pkg/dashboard
clubanderson Sep 2, 2026
9676012
πŸ§ͺ test(testutil): cover EventuallyEveryFunc β€” restore the 90% floor
clubanderson Sep 2, 2026
39cbca4
Merge pull request #5601 from kubestellar/fix/5570-dashboard-shuffle-…
kubestellar-prow[bot] Sep 2, 2026
01748c8
Merge pull request #5602 from kubestellar/fix/5600-testutil-coverage
kubestellar-prow[bot] Sep 2, 2026
0b6b119
πŸ§ͺ test: finish the #5388 Go-side skip conversion β€” repo-file gates an…
clubanderson Sep 2, 2026
763df1e
Merge pull request #5599 from Danathar/fix/5594-agent-card-paused-pri…
kubestellar-prow[bot] Sep 2, 2026
361df1a
✨ feat(dashboard): one-click start & resume for paused agents
clubanderson Sep 2, 2026
67fd787
ci: pre-merge guard for untested internal/testutil helpers
clubanderson Sep 2, 2026
115292a
πŸ“ docs: fleet health verdict and remediation hints operator guide
clubanderson Sep 2, 2026
0a06527
docs: document HIVE_SESSION multi-session label for contributors
clubanderson Sep 2, 2026
5b07699
Merge pull request #5604 from kubestellar/fix/5388-go-skip-remainder
kubestellar-prow[bot] Sep 2, 2026
c27ee16
πŸ§ͺ test(tui): close the mutation gaps in the T33 acceptance harness
clubanderson Sep 2, 2026
ed187df
ci: register testutil-guard.yml in the release-line manifest
clubanderson Sep 2, 2026
eebc4d7
Merge pull request #5612 from kubestellar/docs/5606-fleet-health
kubestellar-prow[bot] Sep 2, 2026
d0e2041
πŸ“ docs: note that identical HIVE_SESSION labels still collide
clubanderson Sep 2, 2026
96b19da
πŸ“ docs: cross-link fleet health verdict from health-checks.md
clubanderson Sep 2, 2026
af2942a
Merge pull request #5610 from kubestellar/fix/i5594-agent-card-combin…
kubestellar-prow[bot] Sep 2, 2026
dcf8a10
Merge pull request #5614 from kubestellar/test/5424-mutation-verified
kubestellar-prow[bot] Sep 2, 2026
9262062
Merge pull request #5611 from kubestellar/ci/5603-testutil-guard
kubestellar-prow[bot] Sep 2, 2026
5972999
Merge pull request #5613 from kubestellar/docs/5605-hive-session
kubestellar-prow[bot] Sep 2, 2026
e26a861
fix(agent): pin Claude Remote Control off at every launch
clubanderson Sep 2, 2026
a9083d1
Merge pull request #5615 from kubestellar/docs/5606-fleet-health
kubestellar-prow[bot] Sep 2, 2026
5090c8c
Merge pull request #5619 from kubestellar/fix/5607-remote-control-pin
kubestellar-prow[bot] Sep 2, 2026
f1e7017
πŸ”– release: v4.1.0
actions-user Sep 2, 2026
a07d5b0
Merge pull request #5621 from kubestellar/release-gate/v4.1.0
github-actions[bot] Sep 2, 2026
8b9cf6d
[architect] refactor: crash-safe persist for the mutation claim ledger
Sep 2, 2026
e7e2b64
[quality] test: cover handleAgentLoginCode handler paths and Collecto…
Sep 2, 2026
d6af9e6
[guide] docs: document the Claude Remote Control pin-off (#5607) in C…
Sep 2, 2026
ecfec3a
observability(packs): log which agents a pack apply created
hanthor Sep 2, 2026
a8fdbb5
[architect] refactor: extract TerminalSession interface from Manager'…
Sep 2, 2026
dba34ff
[guide] docs: card-first diagnosis for agents that won't run (#5594 f…
Sep 2, 2026
a8619b0
Merge pull request #5628 from kubestellar/guide/docs-remote-control-pin
kubestellar-prow[bot] Sep 2, 2026
29f1fbc
[architect] refactor: extract knowledge-cluster config types from con…
Sep 2, 2026
ca79c73
[quality] test: cover watsonx branch of resolveGatewayAuth and curato…
Sep 2, 2026
f10bf64
Merge pull request #5640 from kubestellar/guide/docs-agent-card-blockers
kubestellar-prow[bot] Sep 2, 2026
b5f3c2d
Merge pull request #5633 from tuna-os/fix/log-created-agents
kubestellar-prow[bot] Sep 2, 2026
858da13
Merge pull request #5625 from kubestellar/arch/refactor-ledger-persist
kubestellar-prow[bot] Sep 2, 2026
5413dea
fix(relay): treat Claude Code's silent API retry as busy, not idle-co…
clubanderson Sep 2, 2026
8505448
πŸ› fix(ci): make tagged-release scratch push idempotent across retries
clubanderson Sep 2, 2026
715215f
Merge pull request #5648 from kubestellar/quality/test-hive-gateway-w…
kubestellar-prow[bot] Sep 2, 2026
9985593
Merge pull request #5647 from kubestellar/arch/refactor-config-knowle…
kubestellar-prow[bot] Sep 2, 2026
859fd70
Merge pull request #5658 from kubestellar/fix/5654-silent-retry-not-i…
kubestellar-prow[bot] Sep 2, 2026
c21a52e
[quality] test: cover labelPlanSink KickedPlan/QueuedPlan and planFro…
Sep 2, 2026
9804c3a
πŸ§ͺ test(agent): make watchdog fleet tests hermetic against leaked uid-…
clubanderson Sep 2, 2026
0386bb9
Merge pull request #5657 from kubestellar/fix/5629-idempotent-scratch…
kubestellar-prow[bot] Sep 2, 2026
c90c3ea
Merge pull request #5638 from kubestellar/arch/refactor-terminal-session
kubestellar-prow[bot] Sep 2, 2026
3e60f5b
πŸ› fix(relay): drop the task's scoped GitHub token on SIGINT/SIGTERM a…
clubanderson Sep 2, 2026
d184c26
Merge pull request #5666 from kubestellar/test/i5631-watchdog-lastpro…
kubestellar-prow[bot] Sep 2, 2026
18f3d58
Merge pull request #5637 from kubestellar/quality/test-login-code-han…
kubestellar-prow[bot] Sep 2, 2026
48ecb38
Merge pull request #5659 from kubestellar/fix/5655-sigint-token-cleanup
kubestellar-prow[bot] Sep 2, 2026
8fef641
🌱 ci: keep backend-smoke running after the hivecommons transfer
clubanderson Sep 2, 2026
9b51b03
[guide] docs: contributor-relay.md β€” token unlink on relay shutdown (…
Sep 2, 2026
d1b3f38
πŸ› fix(relay): re-detect claude readiness after a task, and never comp…
Danathar Sep 2, 2026
cbc75ce
Merge pull request #5671 from kubestellar/migrate/repo-identity-guards
kubestellar-prow[bot] Sep 2, 2026
38f72a4
🚚 ci: dual-publish images to kubestellar and hivecommons GHCR
clubanderson Sep 2, 2026
6cc94ff
🧹 ci: add inert GHCR prune twin for the hivecommons org
clubanderson Sep 2, 2026
56a5d0a
✨ changelog: per-PR changelog.d/ fragments and the release-time compi…
clubanderson Sep 2, 2026
1f86650
πŸ”§ ci: wire fragment compile into tagged-release, add changelog-fragme…
clubanderson Sep 2, 2026
8b2ea0b
πŸ“– docs: point changelog authors at changelog.d fragments (#5675)
clubanderson Sep 2, 2026
3888bb0
Merge pull request #5674 from kubestellar/fix/5650-claude-readiness-r…
kubestellar-prow[bot] Sep 2, 2026
d8427b9
Merge pull request #5676 from kubestellar/migrate/ghcr-dual-publish
kubestellar-prow[bot] Sep 2, 2026
e6b50b3
πŸ”– release: v4.1.1
actions-user Sep 2, 2026
13f87e0
Merge pull request #5680 from kubestellar/release-gate/v4.1.1
github-actions[bot] Sep 2, 2026
8e461ff
Merge pull request #5677 from kubestellar/migrate/prune-ghcr-hivecommons
kubestellar-prow[bot] Sep 2, 2026
3aff57a
Merge pull request #5679 from kubestellar/changelog-fragments-5675
kubestellar-prow[bot] Sep 2, 2026
6e76b8a
✨ feat(tui): authenticate with a per-user session, and say so when re…
Danathar Sep 2, 2026
8b2d1d9
πŸ“ docs: changelog entry for hivectl tui session auth
Danathar Sep 2, 2026
5e091a8
πŸ“ docs: point the login follow-up at #5651
Danathar Sep 2, 2026
046416e
✨ feat(tui): attach to agent terminals on containerized and remote hives
clubanderson Sep 2, 2026
7354012
πŸ“ docs: remote terminal attach in hivectl.md, env-vars.md, CHANGELOG
clubanderson Sep 2, 2026
b1c4aa3
✨ feat(deploy): make hivectl obtainable on hosts installed with hive-…
clubanderson Sep 2, 2026
c63bfb0
ci: retrigger β€” gosec install hit transient sum.golang.org stream error
Sep 2, 2026
33aedb3
fix(packs): stop counting disabled-agent re-adds as creations; give c…
clubanderson Sep 2, 2026
d039b22
✨ feat(timeline): complete the lifecycle panel β€” journeys, all stages…
clubanderson Sep 2, 2026
14d8d5f
Merge pull request #5665 from kubestellar/quality/test-plan-label-sink
kubestellar-prow[bot] Sep 2, 2026
d3e2779
Merge pull request #5673 from kubestellar/guide/docs-relay-token-shut…
kubestellar-prow[bot] Sep 2, 2026
487badb
Merge pull request #5663 from kubestellar/feat/5646-hivectl-podman-host
kubestellar-prow[bot] Sep 2, 2026
f45a7db
Merge pull request #5668 from kubestellar/fix/5632-pack-created-count…
kubestellar-prow[bot] Sep 2, 2026
63e6461
[strategist] planning: release-channels.md β€” reflect channel divergen…
Sep 2, 2026
662964e
βœ… test(timeline): cover the journey-store branches the rewrite added
clubanderson Sep 2, 2026
52d338c
[quality] test: cover buildAgentMinter mint-credential bootstrap in c…
Sep 2, 2026
a2b71cb
Merge pull request #5670 from kubestellar/feat/5656-lifecycle-journeys
kubestellar-prow[bot] Sep 2, 2026
edea49b
πŸ”– release: v4.2.0
actions-user Sep 2, 2026
1852f78
Merge pull request #5703 from kubestellar/release-gate/v4.2.0
github-actions[bot] Sep 2, 2026
86a68d8
Merge pull request #5695 from kubestellar/quality/test-build-agent-mi…
kubestellar-prow[bot] Sep 2, 2026
cb1c126
Merge pull request #5689 from kubestellar/strategy/release-channels-d…
kubestellar-prow[bot] Sep 2, 2026
86ea933
Merge pull request #5649 from Danathar/feat/5645-tui-session-auth
kubestellar-prow[bot] Sep 2, 2026
94a5a4c
fix: ACMM pack apply no longer pauses operator-owned agents
clubanderson Sep 2, 2026
5a0df74
βœ… test(tui): cover the remote-attach bridge's pump, watcher, and erro…
clubanderson Sep 2, 2026
7bebcb7
πŸ› preserve local relay sandbox on relaunch (#5702)
clubanderson Sep 2, 2026
24b650f
πŸ“– docs: add GitHub link to Danathar ADOPTERS entry
clubanderson Sep 2, 2026
b7740b5
πŸ”’ test(contribute): pin the #5652 local-relaunch posture invariant fr…
clubanderson Sep 2, 2026
818691e
Merge pull request #5669 from kubestellar/feat/5644-remote-attach
kubestellar-prow[bot] Sep 2, 2026
fd1bfa3
Merge pull request #5710 from kubestellar/adopters/danathar-link
kubestellar-prow[bot] Sep 2, 2026
642869b
Merge pull request #5660 from kubestellar/fix/5652-relaunch-keeps-loc…
kubestellar-prow[bot] Sep 2, 2026
0370585
Merge pull request #5707 from kubestellar/fix/5706-pack-pause-operato…
kubestellar-prow[bot] Sep 2, 2026
7e50551
✨ feature: hivectl login β€” obtain a hive session from the terminal in…
clubanderson Sep 2, 2026
88db28c
πŸ”– release: v4.3.0
actions-user Sep 2, 2026
f337cd8
ci(podman-lanes): survive podman info schema drift β€” read JSON with j…
clubanderson Sep 2, 2026
bf9dfb8
Merge pull request #5719 from kubestellar/release-gate/v4.3.0
github-actions[bot] Sep 2, 2026
9677667
βœ… test: cover the login/session error exits to clear the hivectl cove…
clubanderson Sep 2, 2026
60a55a6
Merge pull request #5692 from kubestellar/fix/podman-info-schema-drift
kubestellar-prow[bot] Sep 2, 2026
b57feab
Merge pull request #5664 from kubestellar/feat/5651-hivectl-login
kubestellar-prow[bot] Sep 2, 2026
0e2d923
πŸ› fix(contribute): make the task lease outlive the hub process
Danathar Sep 2, 2026
1db0b41
πŸ“ docs: record that contributor task leases now survive a hub restart
Danathar Sep 2, 2026
8c7d6bc
πŸ”’ refactor(contribute): crash-safe persist for the task-lease registr…
clubanderson Sep 2, 2026
bc9a83f
πŸ”– release: v4.4.0
actions-user Sep 2, 2026
6bebaf7
Merge pull request #5722 from kubestellar/release-gate/v4.4.0
github-actions[bot] Sep 2, 2026
08407ad
[guide] docs: api-reference.md β€” add 52 registered dashboard routes m…
kubestellar-hive[bot] Sep 2, 2026
83a9cfc
Merge pull request #5721 from kubestellar/fix/5681-v4-task-lease-pers…
kubestellar-prow[bot] Sep 2, 2026
1a2b69f
πŸ› fix: retry NOTICE go-licenses install (#5724)
clubanderson Sep 2, 2026
4872701
πŸ“– docs: document hivecommons image mirror (#5726)
clubanderson Sep 2, 2026
9be313f
πŸ› fix: honor contribute activity limit (#5727)
clubanderson Sep 2, 2026
3ab76ab
πŸ”– release: v4.5.0
actions-user Sep 2, 2026
106666c
Merge pull request #5731 from kubestellar/release-gate/v4.5.0
github-actions[bot] Sep 2, 2026
4cac976
[sec-check] fix: bind the GitHub device-flow poll to the client that …
kubestellar-hive[bot] Sep 3, 2026
9fed41b
[quality] test: pin degraded-boot branches of MergeLayersYAML/MergeLa…
kubestellar-hive[bot] Sep 3, 2026
6383176
[guide] docs: env-vars.md β€” add 7 missing operator-facing variables (…
kubestellar-hive[bot] Sep 3, 2026
f921a9e
[quality] test: pin the crash-safe lease-registry persist invariants …
kubestellar-hive[bot] Sep 3, 2026
d532637
[strategist] planning: harmonize ADOPTERS.md maturity tiers with the …
kubestellar-hive[bot] Sep 3, 2026
b54e7c5
πŸ› fix: clamp GitHub rate-limit readings monotone within a window (#5738)
Danathar Sep 3, 2026
f5c18de
πŸ› fix(fleet): give the agent-down / all-paused / provider-quota verdi…
Danathar Sep 3, 2026
44a7f41
πŸ› fix: name the base branch in every contributor task prompt (#5732)
Danathar Sep 3, 2026
b8c6120
[strategist] planning: RFC #4002 phased delivery roadmap (docs/rfc-40…
kubestellar-hive[bot] Sep 3, 2026
833693e
[strategist] planning: add UPGRADE.md β€” operator upgrade guide for ma…
kubestellar-hive[bot] Sep 3, 2026
cd567be
[architect] refactor: remove dead pkg/hub wrapkey* envelope-encryptio…
kubestellar-hive[bot] Sep 3, 2026
2c00350
[architect] refactor: remove dead pkg/hub Go SVG quadrant renderer (q…
kubestellar-hive[bot] Sep 3, 2026
eb0b9d4
πŸ› fix: watch the depth agy's credential actually lives at (#5736)
Danathar Sep 3, 2026
083cfb5
πŸ”– release: v4.6.0
actions-user Sep 3, 2026
9ade6e8
Merge pull request #5754 from kubestellar/release-gate/v4.6.0
github-actions[bot] Sep 3, 2026
638389a
πŸ› bug fix: adopt agy onboarding wizard relay support (#5753)
clubanderson Sep 3, 2026
e25ac5f
✨ feature: adopt dashboard branding override (#5752)
clubanderson Sep 3, 2026
187cc74
[quality] test: pin mutation journal commit() persist-failure rollbac…
kubestellar-hive[bot] Sep 3, 2026
b90c49a
πŸ”– release: v4.7.0
actions-user Sep 3, 2026
e710e9d
Merge pull request #5758 from kubestellar/release-gate/v4.7.0
github-actions[bot] Sep 3, 2026
9f9699a
πŸ“– docs: add HiveCommons migration tracker (#5765)
clubanderson Sep 3, 2026
b73e642
πŸ› bug fix: parse prefixed PR refs (#5766)
clubanderson Sep 3, 2026
9587e7c
πŸ“– docs: link upgrade guide (#5759)
clubanderson Sep 3, 2026
c99df02
πŸ› bug fix: require session for GitHub logout (#5767)
clubanderson Sep 3, 2026
b0d9aca
πŸ“– docs: add stable soak policy (#5761)
clubanderson Sep 3, 2026
5f5cc5f
πŸ“– docs: correct wrapkey design status (#5760)
clubanderson Sep 3, 2026
de7abb7
πŸ› bug fix: add hermetic cmd hive path seams (#5769)
clubanderson Sep 3, 2026
57cd5c8
πŸ› bug fix: add dashboard seam tests (#5770)
clubanderson Sep 3, 2026
5eafab6
πŸ› bug fix: harden dashboard start readiness test (#5787)
clubanderson Sep 3, 2026
30a830b
πŸ› fix dashboard org migration via repos (#5793)
clubanderson Sep 3, 2026
68fddab
🌱 other: rename v4 module path to hivecommons (#5815)
clubanderson Sep 3, 2026
34e7ee0
πŸ“– docs/refs sweep (#5818)
clubanderson Sep 3, 2026
43f0705
πŸ› bug fix: make the GitHub App write path visible, and name an org tr…
Danathar Sep 3, 2026
47db0d0
πŸ”„ sync: top up v5 with latest v4 (310 commits)
clubanderson Sep 3, 2026
d8b34cc
Merge remote-tracking branch 'origin/v5' into sync/v4-into-v5-topup-4
clubanderson Sep 3, 2026
4ced22c
Merge remote-tracking branch 'origin/v5' into sync/v4-into-v5-topup-4
clubanderson Sep 3, 2026
d2f34cf
Merge branch 'v5' into sync/v4-into-v5-topup-4
clubanderson Sep 3, 2026
402b0b4
🌱 fix merge fallout: add v5 to guard workflow branch lists, drop dead…
clubanderson Sep 3, 2026
9e6360f
Merge remote-tracking branch 'origin/sync/v4-into-v5-topup-4' into sy…
clubanderson Sep 3, 2026
c1af02f
Merge remote-tracking branch 'origin/v5' into sync/v4-into-v5-topup-4
clubanderson Sep 3, 2026
a2447af
Merge remote-tracking branch 'origin/v5' into sync/v4-into-v5-topup-4
clubanderson Sep 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,5 @@ Fixes #
- [ ] Title uses the repo emoji convention, for example `πŸ“– docs: ...`, `πŸ› fix: ...`, or `✨ feature: ...`.
- [ ] Commits include DCO sign-off (`git commit -s`).
- [ ] Docs, examples, and policies are updated when behavior changes.
- [ ] `CHANGELOG.md` has an entry for user-visible changes (features, fixes, new env vars, behavior changes), or the change is not user-facing.
- [ ] A `changelog.d/<category>-<pr-or-slug>.md` fragment carries the changelog entry for user-visible changes (features, fixes, new env vars, behavior changes) β€” see `changelog.d/README.md`; or the change is not user-facing (`no-changelog` label). Do not append to `CHANGELOG.md`'s `## Unreleased` directly (#5675).
- [ ] No secrets, credentials, or local runtime state are committed.
11 changes: 11 additions & 0 deletions .github/release-lines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ release_lines: [v2, v4, v5]
# somebody has to justify, and a new release line still has to be added or
# explicitly excluded here before the guard goes green again.
pinned:
# PR-level guard for the changelog.d/ fragment convention (#5675). v4 only:
# changelog.d/ and src/scripts/compile-changelog.sh exist only on v4, v2 is
# sunset, and a PR targeting v2 runs the v2 merge-ref's workflows anyway,
# where this file does not exist. Same excluded-not-backfilled reasoning as
# docs-link-check.yml below.
changelog-fragment-guard.yml: [-v2]
# Static analysis and vulnerability scanning for the Go module. Pinned to the
# release lines and nothing else: a feature branch gets the same gate through
# `pull_request`, and running it on every pushed branch would burn runner
Expand Down Expand Up @@ -76,6 +82,11 @@ pinned:
# See src/docs/release-line-guard.md, "The infra workflow sync".
scorecard.yml: [main, -v2, -v5]
suid-contract.yml: []
# PR-level guard for src/internal/testutil (#5603). Pinned to the release
# lines and nothing else: it is a pull_request-only path-gated check, and a
# testutil regression can only reach a release line through a PR targeting
# one.
testutil-guard.yml: []
v2-ci.yml: []
v2-tests.yml: []

Expand Down
195 changes: 171 additions & 24 deletions .github/scripts/check-inline-js.js
Original file line number Diff line number Diff line change
@@ -1,72 +1,219 @@
#!/usr/bin/env node
'use strict';

// Syntax-checks the inline <script> blocks of the HTML files whose paths are
// given as command line arguments. Paths are never interpolated into a shell
// or JavaScript string, so any filename (quotes, spaces, metacharacters) is
// handled safely.
// Checks the inline <script> blocks of the HTML files whose paths are given as
// command line arguments, in two passes:
//
// 1. Syntax: each block is written to a temp file and run through
// `node --check`. This catches parse errors only.
//
// 2. Undefined identifiers: all blocks of a file are concatenated (classic
// scripts share one global scope, so a function declared in block 0 is
// legitimately callable from block 1) and run through ESLint with ONLY
// the `no-undef` rule, browser globals, and the small allowlist below.
// This is the pass that catches the #5516 class of bug β€” a call to a
// helper that was never defined (`apiFetch is not defined`) parses fine
// and shipped to a release because pass 1 was the only gate.
//
// Pass 2 requires `npm ci --ignore-scripts` to have been run in
// .github/scripts (eslint + globals are exact-pinned in package.json there).
// If the dependency is missing the script FAILS rather than silently skipping
// the pass: a checker that quietly stops checking is how #5388 happened.
//
// Paths are never interpolated into a shell or JavaScript string, so any
// filename (quotes, spaces, metacharacters) is handled safely.

const fs = require('fs');
const os = require('os');
const path = require('path');
const { execFileSync } = require('child_process');

const SCRIPT_BLOCK_RE = /<script[^>]*>([\s\S]*?)<\/script>/gi;
const SCRIPT_CLOSE_TAG_LEN = '</script>'.length;

function checkFile(htmlFile, tmpDir) {
const html = fs.readFileSync(htmlFile, 'utf8');
let match;
let idx = 0;
const blocks = [];
// ECMAScript level the shipped dashboard is written against. In ESLint flat
// config this sets both the parser level and the set of built-in globals
// (Promise, Map, structuredClone, ...) that `no-undef` accepts.
const ECMA_VERSION = 2022;

// Identifiers the page legitimately gets from somewhere other than its own
// inline scripts. Neither HTML file has an external `<script src>` tag or a
// dynamic script loader, so this list is empty on purpose. Add an entry ONLY
// with a comment naming where the global comes from, and verify by grep that
// the source really provides it β€” an allowlist entry is a hole in this check.
const EXTRA_GLOBALS = {
// Example (do not uncomment without a real provider):
// marked: 'readonly', // provided by <script src="marked.min.js">
};

function loadEslint() {
try {
const { Linter } = require('eslint');
const globals = require('globals');
return { Linter, globals };
} catch (err) {
console.error(
'ERROR: eslint/globals are not installed for the no-undef pass.\n' +
' Run `npm ci --ignore-scripts` in .github/scripts first.\n' +
` (${err.message})`
);
return null;
}
}

function lineOf(text, offset) {
let line = 1;
for (let i = 0; i < offset; i++) {
if (text.charCodeAt(i) === 10) line++;
}
return line;
}

// Returns [{ js, htmlLine }] for every non-empty <script> block. `js` is the
// raw block contents (not trimmed) so that line N of `js` is HTML line
// htmlLine + N - 1; the opening tag and the first JS line share a line.
function extractBlocks(html) {
const blocks = [];
let match;
SCRIPT_BLOCK_RE.lastIndex = 0;
while ((match = SCRIPT_BLOCK_RE.exec(html)) !== null) {
const js = match[1].trim();
if (!js) continue;
const outFile = path.join(tmpDir, `block_${idx}.js`);
fs.writeFileSync(outFile, js);
blocks.push(outFile);
idx++;
const js = match[1];
if (!js.trim()) continue;
const jsStart = match.index + match[0].length - js.length - SCRIPT_CLOSE_TAG_LEN;
blocks.push({ js, htmlLine: lineOf(html, jsStart) });
}
console.log(`Extracted ${idx} script block(s)`);
return blocks;
}

function syntaxCheck(blocks, tmpDir) {
let failed = false;
for (const block of blocks) {
console.log(` Parsing ${path.basename(block)}...`);
blocks.forEach((block, idx) => {
const outFile = path.join(tmpDir, `block_${idx}.js`);
fs.writeFileSync(outFile, block.js.trim());
console.log(` Parsing ${path.basename(outFile)}...`);
try {
execFileSync(process.execPath, ['--check', block], { stdio: 'inherit' });
execFileSync(process.execPath, ['--check', outFile], { stdio: 'inherit' });
} catch (err) {
failed = true;
}
fs.rmSync(block, { force: true });
}
fs.rmSync(outFile, { force: true });
});
return !failed;
}

// Maps a line in the concatenated script back to (block index, HTML line).
function buildLineMap(blocks) {
const starts = [];
let cumulative = 0;
for (const block of blocks) {
starts.push(cumulative);
cumulative += block.js.split('\n').length;
}
return (concatLine) => {
let idx = 0;
while (idx + 1 < starts.length && starts[idx + 1] < concatLine) idx++;
const lineInBlock = concatLine - starts[idx];
return { block: idx, htmlLine: blocks[idx].htmlLine + lineInBlock - 1 };
};
}

// `no-undef` reports every reference to an unknown name, including one that
// is guarded on the same line by a feature test such as
// if (typeof openPlanReview === 'function') openPlanReview(id);
// That pattern is safe at runtime (the call only happens when the name
// exists) and is how the dashboard wires optional navigation hooks. Exempt a
// reference only when its OWN line carries a `typeof NAME` comparison, so an
// unguarded call to the same name elsewhere still fails. This is deliberately
// narrower than adding the name to EXTRA_GLOBALS.
const NOT_DEFINED_RE = /^'([^']+)' is not defined\.$/;

function isTypeofGuardedOnLine(message, lines) {
const m = NOT_DEFINED_RE.exec(message.message);
if (!m) return false;
const name = m[1];
const line = lines[message.line - 1] || '';
const guard = new RegExp('typeof\\s+' + name + '\\s*[!=]==?\\s*[\'"]');
return guard.test(line);
}

function noUndefCheck(htmlFile, blocks, eslint) {
const { Linter, globals } = eslint;
const code = blocks.map((b) => b.js).join('\n');
const toHtml = buildLineMap(blocks);

// Flat-config matching only applies to files under the Linter's cwd, so
// anchor cwd at the HTML file's own directory: the checker then works on
// any path (repo-relative in CI, absolute in local runs), and a fatal
// "No matching configuration" can never masquerade as a clean pass.
const absHtml = path.resolve(htmlFile);
const linter = new Linter({ cwd: path.dirname(absHtml) });
const messages = linter.verify(
code,
[{
files: ['**/*.js'],
languageOptions: {
ecmaVersion: ECMA_VERSION,
sourceType: 'script',
globals: { ...globals.browser, ...EXTRA_GLOBALS },
},
rules: { 'no-undef': 'error' },
}],
{ filename: `${path.basename(absHtml)}.inline.js` }
);

const lines = code.split('\n');
const findings = messages.filter((m) => !isTypeofGuardedOnLine(m, lines));
const exempted = messages.length - findings.length;

console.log(` no-undef over ${blocks.length} concatenated block(s), ${lines.length} lines` +
(exempted ? ` (${exempted} typeof-guarded reference(s) exempted)` : '') + '...');
for (const m of findings) {
const { block, htmlLine } = toHtml(m.line);
console.log(` ${htmlFile}:${htmlLine}:${m.column} (block ${block}) ${m.message} [${m.ruleId || 'fatal'}]`);
}
return findings.length === 0;
}

function checkFile(htmlFile, tmpDir, eslint) {
const html = fs.readFileSync(htmlFile, 'utf8');
const blocks = extractBlocks(html);
console.log(`Extracted ${blocks.length} script block(s)`);
if (blocks.length === 0) return true;

const syntaxOk = syntaxCheck(blocks, tmpDir);
// A parse error would make the no-undef pass report the same problem less
// clearly; only run it on syntactically valid input.
if (!syntaxOk) return false;
return noUndefCheck(htmlFile, blocks, eslint);
}

function main() {
const files = process.argv.slice(2);
if (files.length === 0) {
console.log('No HTML files to check.');
return 0;
}

const eslint = loadEslint();
if (!eslint) return 1;

const tmpRoot = process.env.RUNNER_TEMP || os.tmpdir();
const tmpDir = fs.mkdtempSync(path.join(tmpRoot, 'inline-js-'));
let ok = true;
try {
for (const htmlFile of files) {
console.log(`Checking ${htmlFile}...`);
if (!checkFile(htmlFile, tmpDir)) ok = false;
if (!checkFile(htmlFile, tmpDir, eslint)) ok = false;
}
} finally {
fs.rmSync(tmpDir, { recursive: true, force: true });
}

if (!ok) {
console.error('Syntax errors found in inline script block(s).');
console.error('Inline script check failed (syntax error or undefined identifier).');
return 1;
}
console.log('All script blocks passed syntax check.');
console.log('All script blocks passed syntax and no-undef checks.');
return 0;
}

Expand Down
Loading
Loading