@foggy-projects/deepseek-harness-plugin 0.4.0-beta.16 → 0.4.0-beta.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -2
- package/docs/PUBLIC-BETA-READINESS.md +15 -4
- package/docs/WINDOWS-BETA-ACCEPTANCE.md +10 -2
- package/experience/linux/prepare.sh +1 -1
- package/package.json +1 -1
- package/skills/foggy-deepseek-onboarding/assets/versions.json +1 -1
- package/skills/foggy-deepseek-onboarding/references/onboarding-workflow.md +4 -1
- package/skills/foggy-deepseek-onboarding/scripts/onboarding.py +40 -1
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ modify `PATH`, or register Python globally. Advanced users may explicitly set
|
|
|
14
14
|
## Local beta installation
|
|
15
15
|
|
|
16
16
|
```powershell
|
|
17
|
-
dsh plugin --profile web add --workspace-root ./foggy-projects-deepseek-harness-plugin-0.4.0-beta.
|
|
17
|
+
dsh plugin --profile web add --workspace-root ./foggy-projects-deepseek-harness-plugin-0.4.0-beta.17.tgz
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
Restart `dsh web`, use the browser it opens (or the complete printed URL,
|
|
@@ -27,6 +27,24 @@ After npm beta publication, the corresponding one-line install is:
|
|
|
27
27
|
dsh plugin --profile web add --workspace-root @foggy-projects/deepseek-harness-plugin@beta
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
+
DeepSeek Harness 0.1.2-rc.1 applies pnpm's minimum-release-age policy to its
|
|
31
|
+
profile lockfile. An upgrade performed shortly after publication can therefore
|
|
32
|
+
fail while naming either the new plugin or the previously installed Beta. This
|
|
33
|
+
is a DSH profile-policy failure, not a damaged Foggy package. Use the exact
|
|
34
|
+
profile directory printed in the error and rebuild its lockfile, then rerun the
|
|
35
|
+
same `dsh plugin add` command:
|
|
36
|
+
|
|
37
|
+
```powershell
|
|
38
|
+
Set-Location "<the DSH profile directory printed in the error>"
|
|
39
|
+
npx --yes pnpm@11.7.0 clean --lockfile
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The failed add normally records the requested exact version under
|
|
43
|
+
`minimumReleaseAgeExclude` before returning. If the error repeats, confirm that
|
|
44
|
+
both the installed and requested exact Foggy versions named by the error appear
|
|
45
|
+
under that key in the profile's `pnpm-workspace.yaml`; do not disable the policy
|
|
46
|
+
globally.
|
|
47
|
+
|
|
30
48
|
For development, `FOGGY_ASSET_CACHE_DIRS` can contain platform-delimited verified
|
|
31
49
|
asset-cache directories. It is not required for a normal install.
|
|
32
50
|
|
|
@@ -50,7 +68,10 @@ Opaque CLI profiles remain available for users who prefer them and default to
|
|
|
50
68
|
the private persistent `<dataRoot>/cli-profiles` directory, but they are not a
|
|
51
69
|
prerequisite for ordinary development. Composite onboarding commands are
|
|
52
70
|
idempotent: unchanged completed phases are resumed rather than re-adding a
|
|
53
|
-
datasource or re-registering a local Bundle.
|
|
71
|
+
datasource or re-registering a local Bundle. A resumed datasource checkpoint is
|
|
72
|
+
also reconciled against the live Runtime; if the datasource was removed outside
|
|
73
|
+
the wrapper, only datasource configuration, verification, and schema discovery
|
|
74
|
+
are resumed. Settings detects legacy temporary
|
|
54
75
|
profiles and offers an explicit, validated migration into the persistent store.
|
|
55
76
|
|
|
56
77
|
Private Python, CLI, Launcher, the analysis Skill, install state, and Runtime
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# Public beta readiness: 0.4.0-beta.
|
|
1
|
+
# Public beta readiness: 0.4.0-beta.17
|
|
2
2
|
|
|
3
3
|
Assessment date: 2026-09-05
|
|
4
4
|
|
|
5
5
|
## Verdict
|
|
6
6
|
|
|
7
|
-
`0.4.0-beta.
|
|
7
|
+
`0.4.0-beta.17` is suitable for a scoped public beta on Windows 10/11 x64 and
|
|
8
8
|
Linux/WSL2 x64. It is not a general-availability release.
|
|
9
9
|
|
|
10
10
|
The plugin package stays small and downloads large components only during
|
|
@@ -42,7 +42,7 @@ system PATH, registry, or a user's existing Python installation.
|
|
|
42
42
|
copy of the synthetic password.
|
|
43
43
|
- The package and settings contract report Python 3.12.13 as `Foggy private`,
|
|
44
44
|
CLI 0.1.23, Launcher 0.1.18, analysis Skill 0.1.17, and onboarding Skill
|
|
45
|
-
0.4.0-beta.
|
|
45
|
+
0.4.0-beta.17; the same component display was accepted in the preceding
|
|
46
46
|
native Windows beta run.
|
|
47
47
|
- Runtime startup now reports the current phase, elapsed/timeout seconds, and a
|
|
48
48
|
bounded progress value. A real Windows launch with Temurin 17 reached readiness
|
|
@@ -63,7 +63,7 @@ system PATH, registry, or a user's existing Python installation.
|
|
|
63
63
|
downloaded artifacts are not trusted until the complete SHA256 matches.
|
|
64
64
|
- Windows progress writes tolerate transient sharing violations without losing
|
|
65
65
|
the previous valid progress document or leaving temporary files behind.
|
|
66
|
-
- Current automated regression passes 20 Node tests and
|
|
66
|
+
- Current automated regression passes 20 Node tests and 25 Python tests. The
|
|
67
67
|
new datasource tests cover secret-free persisted state, direct Runtime API
|
|
68
68
|
submission, CLI bypass for inline development credentials, stable inline
|
|
69
69
|
credential resumption, bounded transient connection retry, and output redaction.
|
|
@@ -71,6 +71,17 @@ system PATH, registry, or a user's existing Python installation.
|
|
|
71
71
|
datasource composite twice, retained the Runtime PID, and emitted a complete
|
|
72
72
|
`01` through `06` workspace evidence sequence without falling back to granular
|
|
73
73
|
commands.
|
|
74
|
+
- A separate recovery regression completed a SQLite onboarding composite,
|
|
75
|
+
removed the managed datasource outside the wrapper, and reran the same
|
|
76
|
+
composite. The wrapper detected the missing live datasource, reset only the
|
|
77
|
+
three dependent checkpoints, recreated and tested the datasource, rebound the
|
|
78
|
+
namespace, and rediscovered the selected table successfully.
|
|
79
|
+
- The full release rehearsal converted an inspected 126-column TMS order table
|
|
80
|
+
into versioned TM/QM source, passed eight development question-bank cases,
|
|
81
|
+
deployed the exact Git-tagged source to a separate Ubuntu host, published the
|
|
82
|
+
bundle, and passed the same question bank before and after a Runtime restart.
|
|
83
|
+
The remote Runtime retained its datasource binding, active bundle, query
|
|
84
|
+
model, and 11-tool MCP surface after restart.
|
|
74
85
|
|
|
75
86
|
## Beta boundaries
|
|
76
87
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Native Windows Beta acceptance
|
|
2
2
|
|
|
3
3
|
This runbook validates DeepSeek Harness `0.1.2-rc.1` with Foggy plugin
|
|
4
|
-
`0.4.0-beta.
|
|
4
|
+
`0.4.0-beta.17` on a clean 64-bit Windows 10 or Windows 11 machine. Use a local
|
|
5
5
|
directory that is not synchronized by OneDrive.
|
|
6
6
|
|
|
7
7
|
## Prerequisites
|
|
@@ -34,6 +34,14 @@ npx --yes --package=@deepseek-ai/dsh@0.1.2-rc.1 --package=pnpm@11.7.0 `
|
|
|
34
34
|
npx --yes --package=@deepseek-ai/dsh@0.1.2-rc.1 --package=pnpm@11.7.0 dsh web
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
+
If an immediate upgrade reports
|
|
38
|
+
`ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION`, use the exact DSH profile directory
|
|
39
|
+
printed by the error, run `npx --yes pnpm@11.7.0 clean --lockfile` there, and
|
|
40
|
+
repeat the same plugin-add command. The failed add normally records the new
|
|
41
|
+
exact package version in that profile's `minimumReleaseAgeExclude`; if the
|
|
42
|
+
error names an older installed Beta, confirm that exact version is listed too.
|
|
43
|
+
Do not disable the policy globally.
|
|
44
|
+
|
|
37
45
|
Let DSH open the browser automatically. If it does not, copy the complete URL
|
|
38
46
|
printed by `dsh web`, including its `?token=...` query, into the browser. A new
|
|
39
47
|
browser session cannot use the bare `http://127.0.0.1:3080/` URL until that
|
|
@@ -54,7 +62,7 @@ Expected component state:
|
|
|
54
62
|
- CLI 0.1.23;
|
|
55
63
|
- Launcher 0.1.18;
|
|
56
64
|
- analysis Skill 0.1.17;
|
|
57
|
-
- onboarding Skill 0.4.0-beta.
|
|
65
|
+
- onboarding Skill 0.4.0-beta.17;
|
|
58
66
|
- Java 17+ available;
|
|
59
67
|
- native DSH Skill registration available.
|
|
60
68
|
|
package/package.json
CHANGED
|
@@ -72,7 +72,10 @@ tables list -> bounded schema inspection
|
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
It does not stop or restart Runtime. Repeated calls reuse completed checkpoints when the public
|
|
75
|
-
connection contract is unchanged.
|
|
75
|
+
connection contract is unchanged. Before reusing a datasource checkpoint, the wrapper verifies that
|
|
76
|
+
the named datasource still exists with the expected public type in the live Runtime. If it was
|
|
77
|
+
removed outside the wrapper, datasource configuration, verification, and schema discovery resume
|
|
78
|
+
automatically from the first affected step. Inline password values are excluded from the comparison.
|
|
76
79
|
Transient connection-pool readiness timeouts are retried a small, bounded number of times; invalid
|
|
77
80
|
credentials, invalid URLs, and other configuration errors fail immediately.
|
|
78
81
|
|
|
@@ -2760,6 +2760,38 @@ def step_completed(state: dict, name: str) -> bool:
|
|
|
2760
2760
|
return state.get("steps", {}).get(name, {}).get("status") == "completed"
|
|
2761
2761
|
|
|
2762
2762
|
|
|
2763
|
+
def reconcile_datasource_checkpoint(
|
|
2764
|
+
state: dict,
|
|
2765
|
+
install_state: dict,
|
|
2766
|
+
data_root: Path,
|
|
2767
|
+
runtime_state: dict,
|
|
2768
|
+
) -> dict | None:
|
|
2769
|
+
"""Reset dependent checkpoints when the live Runtime lost the datasource."""
|
|
2770
|
+
if not step_completed(state, "datasourceConfigured"):
|
|
2771
|
+
return None
|
|
2772
|
+
connection = state["connection"]
|
|
2773
|
+
listed = cli_json(
|
|
2774
|
+
install_state,
|
|
2775
|
+
runtime_state,
|
|
2776
|
+
connection["namespace"],
|
|
2777
|
+
["datasources", "list"],
|
|
2778
|
+
"datasources list for checkpoint reconciliation",
|
|
2779
|
+
)
|
|
2780
|
+
if matching_datasource(listed, connection) is not None:
|
|
2781
|
+
return None
|
|
2782
|
+
reset_steps = ("datasourceConfigured", "datasourceVerified", "schemaDiscovered")
|
|
2783
|
+
for name in reset_steps:
|
|
2784
|
+
mark_step(state, name, "pending", reason="runtime-datasource-missing")
|
|
2785
|
+
state.get("artifacts", {}).pop("schemaDiscovery", None)
|
|
2786
|
+
write_onboarding_state(data_root, state)
|
|
2787
|
+
return {
|
|
2788
|
+
"recovered": True,
|
|
2789
|
+
"reason": "runtime-datasource-missing",
|
|
2790
|
+
"resetSteps": list(reset_steps),
|
|
2791
|
+
"dataSource": connection["name"],
|
|
2792
|
+
}
|
|
2793
|
+
|
|
2794
|
+
|
|
2763
2795
|
def bound_project_roots(state: dict) -> list[Path]:
|
|
2764
2796
|
values = [state.get("projectRoot"), *state.get("workspaceBindings", [])]
|
|
2765
2797
|
result: list[Path] = []
|
|
@@ -2792,7 +2824,7 @@ def bind_completed_workspace(state: dict, data_root: Path, project_root: Path) -
|
|
|
2792
2824
|
|
|
2793
2825
|
|
|
2794
2826
|
def datasource_run_command(args: argparse.Namespace) -> dict:
|
|
2795
|
-
_install_root, install_state, data_root,
|
|
2827
|
+
_install_root, install_state, data_root, runtime_state = onboarding_context(args, require_runtime=True)
|
|
2796
2828
|
project_root = normalized(args.project_root or Path.cwd())
|
|
2797
2829
|
requested_connection = validate_connection(read_json_object(normalized(args.connection_file), "Connection plan"))
|
|
2798
2830
|
resumable_connection = persisted_connection(requested_connection)
|
|
@@ -2834,6 +2866,9 @@ def datasource_run_command(args: argparse.Namespace) -> dict:
|
|
|
2834
2866
|
))
|
|
2835
2867
|
save_composite_result(evidence_dir, "01-plan.json", plan_result, files)
|
|
2836
2868
|
state = read_onboarding_state(data_root, profile)
|
|
2869
|
+
checkpoint_recovery = reconcile_datasource_checkpoint(
|
|
2870
|
+
state, install_state, data_root, runtime_state,
|
|
2871
|
+
)
|
|
2837
2872
|
|
|
2838
2873
|
if step_completed(state, "datasourceConfigured"):
|
|
2839
2874
|
configured = resumed_phase(profile, "datasourceConfigured")
|
|
@@ -2844,6 +2879,8 @@ def datasource_run_command(args: argparse.Namespace) -> dict:
|
|
|
2844
2879
|
install_root=args.install_root, data_root=args.data_root, profile=profile, apply=False, replace=False,
|
|
2845
2880
|
runtime_password=requested_connection.get("password"),
|
|
2846
2881
|
))
|
|
2882
|
+
if checkpoint_recovery:
|
|
2883
|
+
configure_dry["checkpointRecovery"] = checkpoint_recovery
|
|
2847
2884
|
save_composite_result(evidence_dir, "02-datasource-dry.json", configure_dry, files)
|
|
2848
2885
|
if not args.approve_configure:
|
|
2849
2886
|
return {
|
|
@@ -2860,6 +2897,8 @@ def datasource_run_command(args: argparse.Namespace) -> dict:
|
|
|
2860
2897
|
install_root=args.install_root, data_root=args.data_root, profile=profile, apply=True, replace=False,
|
|
2861
2898
|
runtime_password=requested_connection.get("password"),
|
|
2862
2899
|
))
|
|
2900
|
+
if checkpoint_recovery:
|
|
2901
|
+
configured["checkpointRecovery"] = checkpoint_recovery
|
|
2863
2902
|
save_composite_result(evidence_dir, "03-datasource-apply.json", configured, files)
|
|
2864
2903
|
state = read_onboarding_state(data_root, profile)
|
|
2865
2904
|
|