Repository navigation
feat: implement boot loop - #104
Merged
couragehong merged 3 commits intoMay 7, 2026
Merged
Conversation
esifea
marked this pull request as ready for review
May 7, 2026 01:45
couragehong
added a commit
that referenced
this pull request
May 7, 2026
…ctor config Rewrites the boot loop to address five integration bugs in #104's first draft, plus a handful of hygiene fixes. Critical: 1. envector.ClientConfig.KeyDim is now set (DefaultKeyDim=1024 const matching Qwen3-Embedding-0.6B per spec). Without it, OpenKeysFromFile().validate() rejects the call with 'WithKeyDim required'. 2. envector.ClientConfig.KeyPath now points to the per-key directory (~/.rune/keys/<keyID>/) via keymanager.KeyDir, not its parent. envector resolves EncKey.json directly under WithKeyPath. 3. embedder.New now uses embedder.ResolveSocketPath("") instead of a TODO empty-string placeholder. 4. After Vault.GetAgentManifest, deps.ApplyVaultBundle(bundle) propagates AgentID / AgentDEK / IndexName / KeyID to the service structs (formerly missing → capture's AES envelope would seal with empty DEK). 5. keymanager.SaveEncKey replaces SaveKeys (matching the rename). Hygiene: - bootOnce helper isolates one boot attempt so partial-success cleanup becomes uniform: any failure after a NewClient succeeds closes the partial conns (vault/embedder/envector) before retrying. No more gRPC conn leak on retry. - RunBootLoop runs ctx.Err() at the top of each iteration so SIGTERM during sleep stops cleanly. - empty-config / config-load failures now record into m.lastError so diagnostics surfaces the cause; attempt counter increments uniformly. - 'persistent failure' log fires every 20 attempts based on attempts (was checked inline only on Vault path). - Added Manager.LastError() public reader for diagnostics tools. - BootAdapterInjector gains ApplyVaultBundle method for the metadata propagation step. Spec note (open follow-up): RunBootLoop returns on first Active. Re-init after dormant↔active transitions is the responsibility of service.LifecycleService.ReloadPipelines (which spawns a fresh RunBootLoop goroutine) — the boot loop itself does not loop forever after success, contrary to a literal reading of rune-mcp.md §부팅 시퀀스. Will revisit if reload behavior turns out wrong.
This was referenced May 7, 2026
couragehong
added a commit
that referenced
this pull request
May 7, 2026
…fixes feat(boot): end-to-end boot loop — super-set of #104
heeyeon01
pushed a commit
to heeyeon01/rune
that referenced
this pull request
Jul 7, 2026
…ctor config Rewrites the boot loop to address five integration bugs in CryptoLabInc#104's first draft, plus a handful of hygiene fixes. Critical: 1. envector.ClientConfig.KeyDim is now set (DefaultKeyDim=1024 const matching Qwen3-Embedding-0.6B per spec). Without it, OpenKeysFromFile().validate() rejects the call with 'WithKeyDim required'. 2. envector.ClientConfig.KeyPath now points to the per-key directory (~/.rune/keys/<keyID>/) via keymanager.KeyDir, not its parent. envector resolves EncKey.json directly under WithKeyPath. 3. embedder.New now uses embedder.ResolveSocketPath("") instead of a TODO empty-string placeholder. 4. After Vault.GetAgentManifest, deps.ApplyVaultBundle(bundle) propagates AgentID / AgentDEK / IndexName / KeyID to the service structs (formerly missing → capture's AES envelope would seal with empty DEK). 5. keymanager.SaveEncKey replaces SaveKeys (matching the rename). Hygiene: - bootOnce helper isolates one boot attempt so partial-success cleanup becomes uniform: any failure after a NewClient succeeds closes the partial conns (vault/embedder/envector) before retrying. No more gRPC conn leak on retry. - RunBootLoop runs ctx.Err() at the top of each iteration so SIGTERM during sleep stops cleanly. - empty-config / config-load failures now record into m.lastError so diagnostics surfaces the cause; attempt counter increments uniformly. - 'persistent failure' log fires every 20 attempts based on attempts (was checked inline only on Vault path). - Added Manager.LastError() public reader for diagnostics tools. - BootAdapterInjector gains ApplyVaultBundle method for the metadata propagation step. Spec note (open follow-up): RunBootLoop returns on first Active. Re-init after dormant↔active transitions is the responsibility of service.LifecycleService.ReloadPipelines (which spawns a fresh RunBootLoop goroutine) — the boot loop itself does not loop forever after success, contrary to a literal reading of rune-mcp.md §부팅 시퀀스. Will revisit if reload behavior turns out wrong.
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.
Summary
Validation
Cross-Agent Invariants
scripts/bootstrap-mcp.shremains the single source of truth for runtime prep (venv/deps/self-heal)codex mcp ...) are clearly separated from cross-agent/common instructionsSKILL.md,commands/rune/*.toml, andAGENT_INTEGRATION.mdstay consistent on boundariesNotes for Reviewers