Skip to content

[Bug]: Secret decryption fails with correct passphrase #40#41

Merged
initializ-mk merged 1 commit intoinitializ:mainfrom
pandey03muskan:main
Apr 4, 2026
Merged

[Bug]: Secret decryption fails with correct passphrase #40#41
initializ-mk merged 1 commit intoinitializ:mainfrom
pandey03muskan:main

Conversation

@pandey03muskan
Copy link
Copy Markdown
Contributor

@pandey03muskan pandey03muskan commented Apr 2, 2026

Type of Change

  • Bug fix

Description

forge secret set/get/list/delete commands were failing with decryption failed (wrong passphrase?) when run from inside a project directory, even with the correct passphrase.

Root cause: parseSecretsPath() in forge-cli/cmd/secret.go scanned forge.yaml line-by-line for any path: key. Every standard forge.yaml has skills: path: SKILL.md — after strings.TrimSpace, that line matched first, so the CLI was trying to AES-256-GCM decrypt SKILL.md as if it were an encrypted secrets file.

forge run was unaffected because Runner.buildSecretProvider() hardcodes the secrets file paths and never calls parseSecretsPath.

Fix:

parseSecretsPath now tracks the secrets: top-level YAML block and only matches path: keys within that block
Extracted resolveSecretsPath() as a single shared function so the displayed path and the actual provider path are always consistent

General Checklist

  • Tests pass for affected modules (go test ./...)
  • Code is formatted (gofmt -w)
  • Linter passes (golangci-lint run)
  • go vet reports no issues

Copy link
Copy Markdown
Contributor

@initializ-mk initializ-mk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug confirmedparseSecretsPath() matches the first path: line in forge.yaml regardless of YAML nesting. In a standard config, skills.path: SKILL.md appears before secrets.path, so the CLI tries to decrypt SKILL.md as an encrypted secrets file.

Fix is correct — tracking the secrets: top-level block via indentation before matching path: resolves the ambiguity. The resolveSecretsPath() extraction also fixes the display/actual path inconsistency.

Minor suggestions:

  • The blank-line removals in encrypted_file_provider.go (Delete and ensureLoaded) are unrelated cosmetic changes — consider dropping them to keep the diff focused.

No new bugs introduced. LGTM.

@initializ-mk initializ-mk merged commit 3b779f6 into initializ:main Apr 4, 2026
9 checks passed
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.

2 participants