Repository navigation
Releases
Releases · GooDAnDReaDY/dsh-goal
v0.2.26 [DSH v0.2.0-rc.2]
Fixed & Hardened (Critical Security Hotfix: Connection Authentication & Fail-Closed Boundary)
- Canonical DSH Connection Authentication Gate (#172): Integrated ctx.connection.requestRejection(req) in getRequestRejection across all plugin HTTP and SSE endpoints, delegating session authentication to DSH core cookie session engine.
- Fail-Closed LAN Authentication Boundary (#172): Eliminated unauthenticated LAN access shortcut. Unauthenticated remote LAN callers lacking valid DSH browser session or explicit auth token are rejected fail-closed with HTTP 401 Unauthorized or 403 Forbidden.
- Loopback & Token Exemption Preservation (#172): Retained loopback peer validation (127.0.0.1, ::1) for local CLI monitoring and deployment verification (deploy.sh verify web); preserved explicit auth token support.
- CSRF & DNS Rebinding Secondary Defense (#172): Maintained secondary CSRF defense and strict private host validation.
- Design Contract & Security Suite (#172): Updated docs/design/DESIGN.md Section 5.1 and expanded test suites to 100% pass across all 138 tests.
v0.2.25 [DSH v0.2.0-rc.2]
Release Purpose
Hardens caller trust verification against DNS rebinding attacks and external WAN clients by enforcing private host validation.
What Changed & Why
- DNS Rebinding Guard (#160): Added
isTrustedHosthelper verifying hostnames and IP addresses against local loopback (127.0.0.0/8,::1), RFC1918 private subnets (10.0.0.0/8,172.16.0.0/12,192.168.0.0/16), and local domains (.local,.lan,localhost). - Fail-Closed Private Host Enforcing (#160):
isTrustedCallerinlib/routes.jsnow validates thatremoteAddress,Host, and parsedOrigin/Refererbelong to trusted private hosts. External WAN callers and public domain names (e.g.evil.compointing to a local IP) are rejected fail-closed (403 Forbidden). - Security Architecture Contract (#160): Updated
docs/design/DESIGN.mdsection 5.1 detailing DNS rebinding prevention and WAN IP filtering. - Security Regression Suite (#160): Added unit test cases in
test/security-sanitization-batch.test.mjsverifyingisTrustedHostacross IP subnets, loopback formats, and blocking simulated DNS rebinding attacks.
User & Service Impact
- Operators accessing DeepSeek Harness via browser on local LAN or loopback continue to function seamlessly.
- Mitigates unauthorized execution of state-changing routes (
rollback_milestone,clear, autonomous runs) via malicious web pages attempting DNS rebinding.
Compatibility
- Tested with DeepSeek Harness
v0.2.0-rc.2(compatible with0.1.7and0.2.0lines).
Verification
npm test: 137/137 tests pass (0 failures).deploy.sh check: preflightFAIL=0, client bundle drift check passed.
Commit Correspondence
- Gitea commit:
d9ceeb10dae1341f13d58bf3a9af732c58d9b068 - Mirror commit:
7cea7cb079830534459a64673a602c1d475d8132
v0.2.24 [DSH v0.2.0-rc.2]
Release Purpose
Resolves Git branch merge/discard checkout regression and restores comprehensive unit test coverage for all 10 client settings fields.
What Changed & Why
- Git Branch Checkout Fix (#157): Removed erroneous
--beforetargetBranchingit checkout <targetBranch>insidemergeGoalBranchanddiscardGoalBranch(lib/engine-git-branch.js). In Git,--forces arguments to be interpreted as file pathspecs rather than branch refs, which previously caused merge/discard actions to fail with exit code 1. - Root Confinement & Deprecation Fix (#157): Forwarded
allowedRootstoisGitRepositoryandgetSafeCwdand added null-checks beforefs.existsSync, eliminatingDEP0187deprecation warnings. - Git Branch Lifecycle Test (#157): Added
test/git-branch-lifecycle.test.mjsverifying branch creation, commits, merge intomain, and branch discard on a real temporary Git repository. - Client Settings Form Tests (#158, #145): Restored
test/card-form.test.mjstestingsrc/client/80-settings-logic.jsacross all 10 canonical settings fields (DEFAULT_SETTINGS,parseNumberField,getFieldStatus,computeSavePlan). - LAN Caller Trust & Auth Token Support (#158, #148): Added optional
authToken(DSH_GOAL_AUTH_TOKEN/x-dsh-auth-token/Authorization: Bearer) support toisTrustedCallerinlib/routes.jsand documented the LAN same-origin operator UI security trade-off indocs/design/DESIGN.md.
User & Service Impact
- Goal branch merge and discard operations from the UI and REST API now complete reliably without 500 errors.
- Zero breaking changes or configuration migrations required.
Compatibility
- Tested with DeepSeek Harness
v0.2.0-rc.2(compatible with0.1.7and0.2.0lines).
Verification
npm test: 136/136 tests pass (0 failures).deploy.sh check: preflightFAIL=0, client bundle drift check passed.
Commit Correspondence
- Gitea commit:
aaab732c784367daff472da33839708ebf86762a - Mirror commit:
d5a036b3a4e4f76ca72444426f6cf817d940a285
v0.2.23: Client decomposition and build drift verification
v0.2.22: Repository hygiene and dead code elimination
v0.2.21: Runtime logic and engine integrity fixes
v0.2.20: Security and sanitization fixes
Release v0.2.20 includes fixes for credentials leaks, host header validation, origin spoofing, and git ref sanitization (#120, #122, #123, #124, #125, #126, #144, #148). Mirror commit: 3d1ee60
v0.2.19: Security & Sanitization Batch
Fixed & Hardened (Security & Sanitization Batch)
- Credential Path & Host Sanitation (#120, #126): Purged hardcoded developer credentials path (
/mnt/external/...) and default internal port3005fromlib/engine-issue-sync.js; credentials and baseUrl are now resolved strictly via environment variables or explicit options; removed fallback default repository name. - Fail-Closed Caller Trust & Anti-Spoofing (#122, #144, #148): Hardened
isTrustedCallerinlib/routes.jsto reject non-browser LAN clients spoofing Origin/Host headers without browserSec-Fetch-Site: same-origin; requests permitted strictly for loopback clients or verified same-origin browser operator UI. - Git Ref & Branch Sanitization (#123): Added
isValidGitRefto reject flag injection (-f,--upload-pack), path traversal (..), and invalid characters in git operations; addedisValidGitRefcheck tobranch_actionHTTP route (400 Bad Request); added--separator before refs in git commands. - Working Directory Confinement & Tool Milestone Signature (#124, #128): Enforced safe cwd resolution via
getSafeCwdacross goal-start, tools, and git branch helpers; correctedcompleteMilestoneinvocation inlib/tools.jsto passnotesandworkspaceRootas distinct arguments. - Safe Milestone Checkpoints (#125): Replaced
git add -Awithgit add -uinlib/engine-reports.jsto prevent staging untracked files or secrets; purged banned--no-verifyflag from milestone checkpoint commits.
Correspondence:
v0.2.18: Settings Data Loss & Volatile Fix Batch
Fixed & Hardened (Settings Data Loss & Schemastery Volatile Batch)
- Volatile Schema Data Loss (#117): Added runtime polyfill fallback for
Schema.prototype.volatileand defensive config unwrapping, preventing DSH 0.2 from silently dropping plugin settings. - Schemastery Boxed Objects unwrapping (#121): Sanitized boxed Schemastery primitives at runtime entry and inside
applySettings, preventing boolean flags from forcing true and numbers from remaining boxed objects. - Settings Save Plan Coverage (#145): Synchronized
computeSavePlanandgetFieldStatusacross all 9 plugin configuration keys (maxTokenBudget,budgetWarningThreshold,autoCheckpointOnMilestone, etc.) so client configuration updates apply cleanly. - Card Form State Synchronization (#146): Unified form definitions between
lib/card-form-state.jsandlib/client.js, eliminating duplicate and diverging state management logic.
Correspondence:
v0.2.14
Fixed
- Cordis optional service resolution: removed unsupported optional syntax
goals?from top-levelinjectarray. - Safe service resolution: added
safeService(ctx, name)usingctx.reflect.get(name, false)forctx.goals,ctx.agents, andctx.tokenMeter. - Peer dependencies: marked
@deepseek-ai/dsh-goaloptional inpeerDependenciesMeta.