@sayoriqwq/effect-harness 0.0.4 → 0.1.1
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 +9 -77
- package/diagnostics/effect-routes.md +6 -0
- package/diagnostics/index.md +10 -0
- package/diagnostics/tsgo-routes.md +5 -0
- package/dist/src/eslint.d.ts +57 -0
- package/dist/src/eslint.js +42 -0
- package/dist/src/eslint.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/prelude.d.ts +6 -0
- package/dist/src/prelude.js +161 -0
- package/dist/src/prelude.js.map +1 -0
- package/package.json +25 -17
- package/prelude-assets/effect/managed/docs/diagnostics.md +6 -0
- package/prelude-assets/effect/managed/docs/editor-policy.md +5 -0
- package/prelude-assets/effect/managed/docs/effect-code.md +5 -0
- package/prelude-assets/effect/managed/docs/index.md +14 -0
- package/prelude-assets/effect/managed/docs/managed-surfaces.md +5 -0
- package/prelude-assets/effect/managed/docs/package-config.md +20 -0
- package/prelude-assets/effect/managed/docs/quality-policy.md +5 -0
- package/prelude-assets/effect/managed/docs/source-identity.md +5 -0
- package/prelude-assets/guidance/eslint.md +15 -0
- package/repos/effect.subtree.json +2 -2
- package/repos/tsgo.subtree.json +2 -2
- package/HARNESS.md +0 -66
- package/dist/bin/effect-harness.d.ts +0 -2
- package/dist/bin/effect-harness.js +0 -34
- package/dist/bin/effect-harness.js.map +0 -1
- package/dist/src/cli/Main.d.ts +0 -7
- package/dist/src/cli/Main.js +0 -45
- package/dist/src/cli/Main.js.map +0 -1
- package/dist/src/harness/Errors.d.ts +0 -24
- package/dist/src/harness/Errors.js +0 -26
- package/dist/src/harness/Errors.js.map +0 -1
- package/dist/src/harness/Guardrails.d.ts +0 -7
- package/dist/src/harness/Guardrails.js +0 -50
- package/dist/src/harness/Guardrails.js.map +0 -1
- package/dist/src/harness/Model.d.ts +0 -52
- package/dist/src/harness/Model.js +0 -170
- package/dist/src/harness/Model.js.map +0 -1
- package/dist/src/harness/ModuleSources.d.ts +0 -5
- package/dist/src/harness/ModuleSources.js +0 -47
- package/dist/src/harness/ModuleSources.js.map +0 -1
- package/dist/src/harness/ProviderDiscovery.d.ts +0 -172
- package/dist/src/harness/ProviderDiscovery.js +0 -157
- package/dist/src/harness/ProviderDiscovery.js.map +0 -1
- package/dist/src/harness/SourcePin.d.ts +0 -4
- package/dist/src/harness/SourcePin.js +0 -214
- package/dist/src/harness/SourcePin.js.map +0 -1
- package/dist/src/harness/verify/JsonFields.d.ts +0 -1
- package/dist/src/harness/verify/JsonFields.js +0 -4
- package/dist/src/harness/verify/JsonFields.js.map +0 -1
- package/dist/src/harness/verify/Pipeline.d.ts +0 -7
- package/dist/src/harness/verify/Pipeline.js +0 -55
- package/dist/src/harness/verify/Pipeline.js.map +0 -1
- package/dist/src/harness/verify/ProviderProfile.d.ts +0 -3
- package/dist/src/harness/verify/ProviderProfile.js +0 -726
- package/dist/src/harness/verify/ProviderProfile.js.map +0 -1
- package/dist/src/harness/verify/ProviderRepository.d.ts +0 -4
- package/dist/src/harness/verify/ProviderRepository.js +0 -127
- package/dist/src/harness/verify/ProviderRepository.js.map +0 -1
- package/dist/src/harness/verify/Tsgo.d.ts +0 -3
- package/dist/src/harness/verify/Tsgo.js +0 -166
- package/dist/src/harness/verify/Tsgo.js.map +0 -1
- package/dist/src/harness/verify/TsgoMetadata.d.ts +0 -4
- package/dist/src/harness/verify/TsgoMetadata.js +0 -50
- package/dist/src/harness/verify/TsgoMetadata.js.map +0 -1
- package/dist/src/harness/verify/TsgoPolicy.d.ts +0 -208
- package/dist/src/harness/verify/TsgoPolicy.js +0 -143
- package/dist/src/harness/verify/TsgoPolicy.js.map +0 -1
- package/dist/src/harness/verify/TsgoSuppressions.d.ts +0 -2
- package/dist/src/harness/verify/TsgoSuppressions.js +0 -24
- package/dist/src/harness/verify/TsgoSuppressions.js.map +0 -1
- package/dist/src/harness/verify/VerifyStage.d.ts +0 -62
- package/dist/src/harness/verify/VerifyStage.js +0 -85
- package/dist/src/harness/verify/VerifyStage.js.map +0 -1
- package/dist/src/platform/Json.d.ts +0 -4
- package/dist/src/platform/Json.js +0 -16
- package/dist/src/platform/Json.js.map +0 -1
- package/dist/src/platform/Process.d.ts +0 -6
- package/dist/src/platform/Process.js +0 -35
- package/dist/src/platform/Process.js.map +0 -1
- package/harness/code.md +0 -83
- package/harness/diagnostic-layers.md +0 -94
- package/harness/effect-routes.md +0 -50
- package/harness/feedback-loop.md +0 -156
- package/harness/index.md +0 -83
- package/harness/offcial-guide.md +0 -50
- package/harness/offcial-migrate.md +0 -220
- package/harness/source.md +0 -91
- package/harness/tsgo-routes.md +0 -58
- package/harness/tsgo.md +0 -241
- package/provider/docs/diagnostics.md +0 -48
- package/provider/docs/discovery.md +0 -104
- package/provider/docs/editor-policy.md +0 -55
- package/provider/docs/effect-code.md +0 -41
- package/provider/docs/index.md +0 -48
- package/provider/docs/managed-surfaces.md +0 -51
- package/provider/docs/package-config.md +0 -71
- package/provider/docs/quality-policy.md +0 -68
- package/provider/docs/source-identity.md +0 -48
- package/provider/effect-harness.provider.json +0 -1020
- package/provider/index.md +0 -189
- package/provider/snippets/agents.md +0 -34
package/harness/tsgo.md
DELETED
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
audience: [agent, human]
|
|
3
|
-
authors:
|
|
4
|
-
- codex
|
|
5
|
-
reviewed_by: []
|
|
6
|
-
purpose: 记录 effect-harness strict tsgo policy、ADR 决策和升级闭环。
|
|
7
|
-
status: active
|
|
8
|
-
sources:
|
|
9
|
-
- repos/tsgo/README.md
|
|
10
|
-
- repos/tsgo/_packages/tsgo/src/metadata.json
|
|
11
|
-
- repos/tsgo/_packages/tsgo/src/setup/consts.ts
|
|
12
|
-
- repos/tsgo/_packages/tsgo/src/setup/changes.ts
|
|
13
|
-
- repos/tsgo/etscore/options.go
|
|
14
|
-
- repos/tsgo/internal/rulerunner/diagnostics.go
|
|
15
|
-
- provider/effect-harness.provider.json
|
|
16
|
-
- tsconfig.json
|
|
17
|
-
updated: 2026-07-01
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
# Tsgo Policy
|
|
21
|
-
|
|
22
|
-
## Decisions
|
|
23
|
-
|
|
24
|
-
当前第三阶段采用 strict tsgo policy。目标不是“只要没有 TypeScript error 就通过”,而是
|
|
25
|
-
`tsgo --noEmit` 对 Effect diagnostics 达到 0 error、0 warning、0 suggestion、0 message。
|
|
26
|
-
|
|
27
|
-
`effect-tsgo patch` 只负责准备 native backend。类型检查和 Effect 语义诊断入口固定为:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
tsgo --noEmit
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## POLICY_NATIVE_BACKEND
|
|
34
|
-
|
|
35
|
-
当前 native backend 固定为 `@typescript/native-preview@7.0.0-dev.20260630.1`。
|
|
36
|
-
|
|
37
|
-
`@effect/tsgo@0.15.0` 可以识别 `@typescript/native-preview`,也可以识别 `typescript >= 7`。
|
|
38
|
-
本仓 provider 默认只投影 `@typescript/native-preview`。
|
|
39
|
-
|
|
40
|
-
`effect-tsgo` 是 setup/patch CLI。`tsgo` 是被 patch 后执行 `--noEmit` 的诊断 binary。
|
|
41
|
-
|
|
42
|
-
`repos/tsgo` pin 到 `Effect-TS/tsgo` commit
|
|
43
|
-
`43ed476270fb3cf78fe7afac2086d67340ca0486`,该 commit 对应当前 `@effect/tsgo@0.15.0`
|
|
44
|
-
package baseline。
|
|
45
|
-
|
|
46
|
-
## POLICY_DIAGNOSTIC_GATE
|
|
47
|
-
|
|
48
|
-
provider strict profile 固定以下 gate:
|
|
49
|
-
|
|
50
|
-
```json
|
|
51
|
-
{
|
|
52
|
-
"diagnostics": true,
|
|
53
|
-
"includeSuggestionsInTsc": true,
|
|
54
|
-
"ignoreEffectSuggestionsInTscExitCode": false,
|
|
55
|
-
"ignoreEffectWarningsInTscExitCode": false,
|
|
56
|
-
"ignoreEffectErrorsInTscExitCode": false
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
`diagnosticSeverity` MUST 是显式 object。`diagnosticSeverity: null` 表示关闭 Effect diagnostics,
|
|
61
|
-
在本仓和 provider projection 中都不允许。
|
|
62
|
-
|
|
63
|
-
## POLICY_RULE_MAP
|
|
64
|
-
|
|
65
|
-
strict rule map 只覆盖 `supportedEffect` 包含 `v4` 的规则。当前 `@effect/tsgo@0.15.0`
|
|
66
|
-
metadata 派生出 76 条 v4 规则。
|
|
67
|
-
|
|
68
|
-
v4 correctness 规则中官方默认 `off` 的规则提升为 `error`。
|
|
69
|
-
|
|
70
|
-
`effectNative` 规则全部提升为 `warning`。
|
|
71
|
-
|
|
72
|
-
`antipattern` 和 `style` 里官方默认 `off` 的 v4 规则提升为 `warning`。
|
|
73
|
-
|
|
74
|
-
官方默认为 `suggestion` 的规则保持 `suggestion`,由 diagnostic gate 让 suggestion 也参与
|
|
75
|
-
exit-code hard gate。
|
|
76
|
-
|
|
77
|
-
| Rule | Severity |
|
|
78
|
-
| --- | --- |
|
|
79
|
-
| `anyUnknownInErrorContext` | `error` |
|
|
80
|
-
| `asyncFunction` | `warning` |
|
|
81
|
-
| `catchAllToMapError` | `suggestion` |
|
|
82
|
-
| `catchToOrElseSucceed` | `suggestion` |
|
|
83
|
-
| `catchUnfailableEffect` | `suggestion` |
|
|
84
|
-
| `classSelfMismatch` | `error` |
|
|
85
|
-
| `cryptoRandomUUID` | `warning` |
|
|
86
|
-
| `cryptoRandomUUIDInEffect` | `warning` |
|
|
87
|
-
| `deterministicKeys` | `warning` |
|
|
88
|
-
| `duplicatePackage` | `warning` |
|
|
89
|
-
| `effectDoNotation` | `warning` |
|
|
90
|
-
| `effectFnIife` | `warning` |
|
|
91
|
-
| `effectFnImplicitAny` | `error` |
|
|
92
|
-
| `effectFnOpportunity` | `suggestion` |
|
|
93
|
-
| `effectGenUsesAdapter` | `warning` |
|
|
94
|
-
| `effectInFailure` | `warning` |
|
|
95
|
-
| `effectInVoidSuccess` | `warning` |
|
|
96
|
-
| `effectMapFlatten` | `suggestion` |
|
|
97
|
-
| `effectMapVoid` | `suggestion` |
|
|
98
|
-
| `effectSucceedWithVoid` | `suggestion` |
|
|
99
|
-
| `extendsNativeError` | `warning` |
|
|
100
|
-
| `floatingEffect` | `error` |
|
|
101
|
-
| `genericEffectServices` | `warning` |
|
|
102
|
-
| `globalConsole` | `warning` |
|
|
103
|
-
| `globalConsoleInEffect` | `warning` |
|
|
104
|
-
| `globalDate` | `warning` |
|
|
105
|
-
| `globalDateInEffect` | `warning` |
|
|
106
|
-
| `globalErrorInEffectCatch` | `warning` |
|
|
107
|
-
| `globalErrorInEffectFailure` | `warning` |
|
|
108
|
-
| `globalFetch` | `warning` |
|
|
109
|
-
| `globalFetchInEffect` | `warning` |
|
|
110
|
-
| `globalRandom` | `warning` |
|
|
111
|
-
| `globalRandomInEffect` | `warning` |
|
|
112
|
-
| `globalTimers` | `warning` |
|
|
113
|
-
| `globalTimersInEffect` | `warning` |
|
|
114
|
-
| `instanceOfSchema` | `warning` |
|
|
115
|
-
| `layerMergeAllWithDependencies` | `warning` |
|
|
116
|
-
| `lazyEffect` | `suggestion` |
|
|
117
|
-
| `lazyPromiseInEffectSync` | `warning` |
|
|
118
|
-
| `leakingRequirements` | `suggestion` |
|
|
119
|
-
| `missedPipeableOpportunity` | `warning` |
|
|
120
|
-
| `missingEffectContext` | `error` |
|
|
121
|
-
| `missingEffectError` | `error` |
|
|
122
|
-
| `missingLayerContext` | `error` |
|
|
123
|
-
| `missingReturnYieldStar` | `error` |
|
|
124
|
-
| `missingStarInYieldEffectGen` | `error` |
|
|
125
|
-
| `multipleCatchTag` | `suggestion` |
|
|
126
|
-
| `multipleEffectProvide` | `warning` |
|
|
127
|
-
| `nestedEffectGenYield` | `warning` |
|
|
128
|
-
| `newPromise` | `warning` |
|
|
129
|
-
| `newSchemaClass` | `warning` |
|
|
130
|
-
| `nodeBuiltinImport` | `warning` |
|
|
131
|
-
| `outdatedApi` | `warning` |
|
|
132
|
-
| `overriddenSchemaConstructor` | `error` |
|
|
133
|
-
| `preferSchemaOverJson` | `warning` |
|
|
134
|
-
| `processEnv` | `warning` |
|
|
135
|
-
| `processEnvInEffect` | `warning` |
|
|
136
|
-
| `redundantMapError` | `suggestion` |
|
|
137
|
-
| `redundantOrDie` | `suggestion` |
|
|
138
|
-
| `redundantSchemaTagIdentifier` | `suggestion` |
|
|
139
|
-
| `returnEffectInGen` | `suggestion` |
|
|
140
|
-
| `runEffectInsideEffect` | `suggestion` |
|
|
141
|
-
| `schemaNumber` | `suggestion` |
|
|
142
|
-
| `schemaStructWithTag` | `suggestion` |
|
|
143
|
-
| `serviceNotAsClass` | `warning` |
|
|
144
|
-
| `strictBooleanExpressions` | `warning` |
|
|
145
|
-
| `strictEffectProvide` | `warning` |
|
|
146
|
-
| `tryCatchInEffectGen` | `suggestion` |
|
|
147
|
-
| `unknownInEffectCatch` | `warning` |
|
|
148
|
-
| `unnecessaryArrowBlock` | `warning` |
|
|
149
|
-
| `unnecessaryEffectGen` | `suggestion` |
|
|
150
|
-
| `unnecessaryFailYieldableError` | `suggestion` |
|
|
151
|
-
| `unnecessaryPipe` | `suggestion` |
|
|
152
|
-
| `unnecessaryPipeChain` | `suggestion` |
|
|
153
|
-
| `unnecessaryTypeofType` | `suggestion` |
|
|
154
|
-
| `unsafeEffectTypeAssertion` | `warning` |
|
|
155
|
-
|
|
156
|
-
## POLICY_IMPORT_STYLE
|
|
157
|
-
|
|
158
|
-
Effect import style 跟随官方用户文档。provider strict profile 固定:
|
|
159
|
-
|
|
160
|
-
```json
|
|
161
|
-
{
|
|
162
|
-
"barrelImportPackages": ["effect"],
|
|
163
|
-
"topLevelNamedReexports": "follow"
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
本仓代码优先使用 `import { Effect, FileSystem, Path } from "effect"` 这一类 top-level named
|
|
168
|
-
import。只有官方 package 仍要求不稳定子路径时,才使用 `effect/unstable/**`。
|
|
169
|
-
|
|
170
|
-
## POLICY_OVERRIDES
|
|
171
|
-
|
|
172
|
-
provider 默认不生成 `overrides`。
|
|
173
|
-
|
|
174
|
-
普通源码和普通测试不得使用 `overrides` 降低 strict policy。
|
|
175
|
-
|
|
176
|
-
generated code、fixture、vendored source 等明确 scope 可以在后续申请例外。例外不是默认 capability;
|
|
177
|
-
必须先更新本 ADR,再更新 provider profile、`tsconfig.json` 和 verifier。
|
|
178
|
-
|
|
179
|
-
## POLICY_SUPPRESSIONS
|
|
180
|
-
|
|
181
|
-
`src/**`、`bin/**` 和普通 `tests/**` 禁止使用 `@effect-diagnostics ...:off` 或
|
|
182
|
-
`@effect-diagnostics-next-line ...:off`。
|
|
183
|
-
|
|
184
|
-
诊断通过修代码解决,不通过注释关闭。
|
|
185
|
-
|
|
186
|
-
## POLICY_KEY_PATTERNS
|
|
187
|
-
|
|
188
|
-
provider strict profile 固定以下 key policy:
|
|
189
|
-
|
|
190
|
-
```json
|
|
191
|
-
{
|
|
192
|
-
"keyPatterns": [
|
|
193
|
-
{ "target": "service", "pattern": "default", "skipLeadingPath": ["src/"] },
|
|
194
|
-
{ "target": "error", "pattern": "default", "skipLeadingPath": ["src/"] },
|
|
195
|
-
{ "target": "custom", "pattern": "default", "skipLeadingPath": ["src/"] }
|
|
196
|
-
],
|
|
197
|
-
"extendedKeyDetection": true
|
|
198
|
-
}
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
## POLICY_LAYER_GRAPH
|
|
202
|
-
|
|
203
|
-
provider strict profile 固定:
|
|
204
|
-
|
|
205
|
-
```json
|
|
206
|
-
{
|
|
207
|
-
"layerGraphFollowDepth": 1,
|
|
208
|
-
"noExternal": true,
|
|
209
|
-
"inlays": true,
|
|
210
|
-
"allowedDuplicatedPackages": [],
|
|
211
|
-
"pipeableMinArgCount": 2,
|
|
212
|
-
"effectFn": ["span"]
|
|
213
|
-
}
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
需要 Mermaid 图时,由 harness 维护本地可读文档或 artifact。provider 默认不依赖外部 Mermaid 链接。
|
|
217
|
-
|
|
218
|
-
## POLICY_UPGRADE_LOOP
|
|
219
|
-
|
|
220
|
-
升级 `@effect/tsgo` 或 `@effect/language-service` 时,先读取 pinned `repos/tsgo` metadata。
|
|
221
|
-
|
|
222
|
-
如果只是字段、版本或 commit 迁移,可以按当前 policy 直接迁移。
|
|
223
|
-
|
|
224
|
-
如果规则语义发生改变,迁移必须 block,让用户 decide。
|
|
225
|
-
|
|
226
|
-
如果新增 v4 rule 或新增影响 provider projection 的 capability,迁移必须 block,让用户 decide
|
|
227
|
-
是否引入。用户确认后,先更新本 ADR,再更新 provider profile、`tsconfig.json` 和 verifier。
|
|
228
|
-
|
|
229
|
-
## VERIFIER_CONTRACT
|
|
230
|
-
|
|
231
|
-
`pnpm verify` MUST 通过 `harness-contract` 和 `tsgo-diagnostics` stages 检查:
|
|
232
|
-
|
|
233
|
-
- `harness/tsgo.md` 包含所有稳定 policy keyword。
|
|
234
|
-
- `harness/tsgo.md` 包含当前 strict v4 rule map 的所有 rule name。
|
|
235
|
-
- `repos/tsgo/_packages/tsgo/src/metadata.json` 派生出的 v4 rule map 与
|
|
236
|
-
`src/harness/verify/TsgoPolicy.ts` 一致。
|
|
237
|
-
- `tsconfig.json` 与 provider profile 的 `@effect/language-service` plugin policy 一致。
|
|
238
|
-
- provider profile 的 `tsgoPolicy` 指向 `tsgo-official-source`。
|
|
239
|
-
- `package.json` 使用 `effect-tsgo patch` 和 `tsgo --noEmit`。
|
|
240
|
-
- 普通源码没有 Effect diagnostic suppress 注释。
|
|
241
|
-
- `effect-tsgo --version` 与 `tsgo --version` 都能确认当前 `@effect/tsgo` baseline。
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
audience: [agent, human]
|
|
3
|
-
authors:
|
|
4
|
-
- codex
|
|
5
|
-
reviewed_by: []
|
|
6
|
-
purpose: 说明接入 effect-harness 后 target 内 strict tsgo diagnostic gate 的受管口径。
|
|
7
|
-
status: active
|
|
8
|
-
sources:
|
|
9
|
-
- provider/effect-harness.provider.json
|
|
10
|
-
- harness/tsgo.md
|
|
11
|
-
- repos/tsgo/README.md
|
|
12
|
-
updated: 2026-07-02
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Diagnostics
|
|
16
|
-
|
|
17
|
-
## Commands
|
|
18
|
-
|
|
19
|
-
target 的 Effect diagnostics 主路径是:
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
tsgo --noEmit
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
target 的 native backend 准备命令是:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
effect-tsgo patch
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Prelude materialization 应通过 provider profile 维护这些 script 指针。
|
|
32
|
-
|
|
33
|
-
## Gate
|
|
34
|
-
|
|
35
|
-
strict profile 要求 `tsgo --noEmit` 达到 0 error、0 warning、0 suggestion、0 message。
|
|
36
|
-
|
|
37
|
-
`@effect/language-service` plugin MUST 保持 provider profile 声明的 strict v4 policy。
|
|
38
|
-
|
|
39
|
-
target SHOULD 修复 diagnostics。target SHOULD NOT 用 local override、diagnostic suppress 注释或
|
|
40
|
-
降级 rule map 绕过 provider gate。
|
|
41
|
-
|
|
42
|
-
## Drift
|
|
43
|
-
|
|
44
|
-
`package.json`、`tsconfig.json`、provider record、docs bundle 和 snippets 都是 provider-managed
|
|
45
|
-
surface。
|
|
46
|
-
|
|
47
|
-
target 修改这些 surface 后,Prelude maintain 应区分本地 drift、provider update 和可自动更新的
|
|
48
|
-
base match。
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
audience: [agent, human]
|
|
3
|
-
authors:
|
|
4
|
-
- codex
|
|
5
|
-
reviewed_by: []
|
|
6
|
-
purpose: 说明 Prelude 如何通过 provider discovery 消费 effect-harness provider artifact。
|
|
7
|
-
status: active
|
|
8
|
-
sources:
|
|
9
|
-
- provider/effect-harness.provider.json
|
|
10
|
-
- src/harness/ProviderDiscovery.ts
|
|
11
|
-
- src/cli/Main.ts
|
|
12
|
-
updated: 2026-07-02
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Provider Discovery
|
|
16
|
-
|
|
17
|
-
## Interface
|
|
18
|
-
|
|
19
|
-
Prelude SHOULD 通过 package artifact 执行 discovery,而不是复制
|
|
20
|
-
`provider/effect-harness.provider.json` 到 Prelude 源码中维护。
|
|
21
|
-
|
|
22
|
-
稳定入口是:
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
npx --yes @sayoriqwq/effect-harness provider-discover
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
本仓 self-conformance 或本地调试 MAY 显式传入 artifact root:
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
node bin/effect-harness.ts provider-discover --harness .
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
discovery 输出是 machine-readable JSON。它从 provider profile 和 package manifest 派生,不是第二份
|
|
35
|
-
profile 真源。
|
|
36
|
-
|
|
37
|
-
## Shape
|
|
38
|
-
|
|
39
|
-
discovery envelope MUST 暴露 provider identity:
|
|
40
|
-
|
|
41
|
-
- provider id
|
|
42
|
-
- contract version
|
|
43
|
-
- provider version
|
|
44
|
-
- default profile
|
|
45
|
-
- selected profile
|
|
46
|
-
|
|
47
|
-
discovery envelope MUST 暴露 package locator:
|
|
48
|
-
|
|
49
|
-
- package name
|
|
50
|
-
- package version
|
|
51
|
-
- provider artifact root
|
|
52
|
-
- provider profile path
|
|
53
|
-
- package files
|
|
54
|
-
- discovery command
|
|
55
|
-
|
|
56
|
-
discovery envelope MUST 暴露 target-managed surfaces:
|
|
57
|
-
|
|
58
|
-
- provider record surface
|
|
59
|
-
- `package.json` contribution
|
|
60
|
-
- `tsconfig.json` contribution
|
|
61
|
-
- editor policy contribution
|
|
62
|
-
- lint policy contribution
|
|
63
|
-
- test policy contribution
|
|
64
|
-
- verification policy contribution
|
|
65
|
-
- docs bundle contribution
|
|
66
|
-
- snippets contribution
|
|
67
|
-
|
|
68
|
-
discovery envelope MUST 暴露 artifact-only references:
|
|
69
|
-
|
|
70
|
-
- Effect source tree identity
|
|
71
|
-
- Effect source contract identity
|
|
72
|
-
- Effect anchor doc identity
|
|
73
|
-
- Effect route doc identity
|
|
74
|
-
- tsgo source tree identity
|
|
75
|
-
- tsgo source contract identity
|
|
76
|
-
- tsgo anchor doc identity
|
|
77
|
-
- tsgo route doc identity
|
|
78
|
-
|
|
79
|
-
discovery envelope MUST 暴露 internal harness surfaces,使 Prelude 能明确这些内容只服务
|
|
80
|
-
effect-harness 本仓维护和 self-conformance。
|
|
81
|
-
|
|
82
|
-
## Prelude
|
|
83
|
-
|
|
84
|
-
Prelude 是 target lifecycle owner。Prelude SHOULD 把 discovery 输出转成自己的 provider record、
|
|
85
|
-
materialization plan、drift record 和 maintain/update 流程。
|
|
86
|
-
|
|
87
|
-
Prelude MUST NOT 把 provider profile 复制进 Prelude 代码并手写保持同步。
|
|
88
|
-
|
|
89
|
-
Prelude MUST NOT 把 artifact-only references 当作 target-managed files 投递。`repos/effect/`、
|
|
90
|
-
`repos/tsgo/`、subtree contracts、route docs 和 anchor docs 只随 provider artifact 保留,target record
|
|
91
|
-
只记录 source identity。
|
|
92
|
-
|
|
93
|
-
Prelude SHOULD materialize docs bundle 和 snippets,因为它们是 provider-managed contributions。
|
|
94
|
-
|
|
95
|
-
Prelude SHOULD materialize package、tsconfig、editor、lint、test 和 verification contributions,
|
|
96
|
-
并把它们纳入 target drift detection。
|
|
97
|
-
|
|
98
|
-
## Boundary
|
|
99
|
-
|
|
100
|
-
`provider-discover` 只做发现和声明。它不创建 `.prelude/**`,不修改 target 仓库,不运行
|
|
101
|
-
maintain lifecycle,也不替 Prelude 决定 conflict policy。
|
|
102
|
-
|
|
103
|
-
effect-harness 继续维护 provider artifact、source identity、strict tsgo policy、docs bundle 和
|
|
104
|
-
snippets。Prelude 继续维护 target lifecycle。
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
audience: [agent, human]
|
|
3
|
-
authors:
|
|
4
|
-
- codex
|
|
5
|
-
reviewed_by: []
|
|
6
|
-
purpose: 说明 target 接入 effect-harness 后 editor policy contribution 的层级和边界。
|
|
7
|
-
status: active
|
|
8
|
-
sources:
|
|
9
|
-
- provider/effect-harness.provider.json
|
|
10
|
-
- harness/source.md
|
|
11
|
-
- repos/effect.subtree.json
|
|
12
|
-
- repos/tsgo.subtree.json
|
|
13
|
-
updated: 2026-07-02
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
# Editor Policy
|
|
17
|
-
|
|
18
|
-
## Boundary
|
|
19
|
-
|
|
20
|
-
editor policy 服务于 provider-internal source identity。
|
|
21
|
-
|
|
22
|
-
target SHOULD 接收 editor settings contribution,但 target MUST NOT 接收 provider source tree 本体。
|
|
23
|
-
|
|
24
|
-
`repos/**` 表示 provider artifact 内的 pinned source reference,不表示 target root 需要维护同名目录。
|
|
25
|
-
|
|
26
|
-
## Levels
|
|
27
|
-
|
|
28
|
-
auto-import exclusion 是 hard boundary。target editor SHOULD 排除 provider-internal source references,避免
|
|
29
|
-
应用代码从 pinned source tree 自动 import。
|
|
30
|
-
|
|
31
|
-
watch exclusion 是 recommended policy。target 可以按编辑器能力关闭 provider-internal source reference 的
|
|
32
|
-
file watching。
|
|
33
|
-
|
|
34
|
-
search exclusion 是 recommended policy。target 可以按编辑器能力关闭 provider-internal source reference 的
|
|
35
|
-
default search。
|
|
36
|
-
|
|
37
|
-
file visibility 是 preference。provider profile 只表达建议,不要求 target 隐藏所有 source identity。
|
|
38
|
-
|
|
39
|
-
## VSCode
|
|
40
|
-
|
|
41
|
-
VSCode projection SHOULD 设置 TypeScript 和 JavaScript auto-import exclude patterns。
|
|
42
|
-
|
|
43
|
-
VSCode projection SHOULD 设置 watcher 与 search exclusion。
|
|
44
|
-
|
|
45
|
-
VSCode projection MAY 设置 file visibility preference。
|
|
46
|
-
|
|
47
|
-
Effect source identity 当前 file visibility preference 是 enabled。
|
|
48
|
-
|
|
49
|
-
tsgo source identity 当前 file visibility preference 是 disabled。
|
|
50
|
-
|
|
51
|
-
## Zed
|
|
52
|
-
|
|
53
|
-
Zed projection SHOULD 使用 Zed 的 LSP settings shape 表达 auto-import exclusion。
|
|
54
|
-
|
|
55
|
-
Zed projection MAY 使用 file scan exclusions 表达 watch、search 或 visibility preference。
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
audience: [agent, human]
|
|
3
|
-
authors:
|
|
4
|
-
- codex
|
|
5
|
-
reviewed_by: []
|
|
6
|
-
purpose: 说明接入 effect-harness 后 target 内 Effect 代码应遵守的编码基线。
|
|
7
|
-
status: active
|
|
8
|
-
sources:
|
|
9
|
-
- provider/effect-harness.provider.json
|
|
10
|
-
- repos/effect/LLMS.md
|
|
11
|
-
updated: 2026-07-02
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Effect Code
|
|
15
|
-
|
|
16
|
-
## Baseline
|
|
17
|
-
|
|
18
|
-
target 接入 effect-harness 后,Effect 代码应以 provider profile 声明的 v4 beta package baseline
|
|
19
|
-
为准。
|
|
20
|
-
|
|
21
|
-
代码从已安装 package import。普通应用代码和测试代码 MUST NOT 从 provider-internal
|
|
22
|
-
`repos/effect` 或 `repos/tsgo` import。
|
|
23
|
-
|
|
24
|
-
## Patterns
|
|
25
|
-
|
|
26
|
-
Effect 程序 SHOULD 优先使用 `Effect.gen` 和 `Effect.fn` 组织可读流程。
|
|
27
|
-
|
|
28
|
-
Effect service definition 当前 SHOULD 使用 `Context.Service`。
|
|
29
|
-
|
|
30
|
-
Node 入口 SHOULD 使用 `NodeRuntime.runMain`。
|
|
31
|
-
|
|
32
|
-
Effect 测试 SHOULD 使用 `@effect/vitest` 的 `it.effect`、`it.live` 或 layer 组织。
|
|
33
|
-
|
|
34
|
-
CLI 代码 SHOULD 使用 `effect/unstable/cli`。target 不应引入旧的 `@effect/cli` 口径。
|
|
35
|
-
|
|
36
|
-
## Errors
|
|
37
|
-
|
|
38
|
-
错误建模 SHOULD 使用 Effect v4 baseline 下的 typed error pattern,例如
|
|
39
|
-
`Schema.TaggedErrorClass`。
|
|
40
|
-
|
|
41
|
-
在 `Effect.gen` 中抛出终止性 Effect 时,SHOULD 使用 `return yield*` 让 TypeScript 正确理解控制流。
|
package/provider/docs/index.md
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
audience: [agent, human]
|
|
3
|
-
authors:
|
|
4
|
-
- codex
|
|
5
|
-
reviewed_by: []
|
|
6
|
-
purpose: 定义 effect-harness provider 投递给 target 的 docs bundle 文件清单和边界。
|
|
7
|
-
status: active
|
|
8
|
-
sources:
|
|
9
|
-
- provider/effect-harness.provider.json
|
|
10
|
-
- provider/docs/effect-code.md
|
|
11
|
-
- provider/docs/diagnostics.md
|
|
12
|
-
- provider/docs/discovery.md
|
|
13
|
-
- provider/docs/editor-policy.md
|
|
14
|
-
- provider/docs/managed-surfaces.md
|
|
15
|
-
- provider/docs/package-config.md
|
|
16
|
-
- provider/docs/quality-policy.md
|
|
17
|
-
- provider/docs/source-identity.md
|
|
18
|
-
updated: 2026-07-02
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
# Docs Bundle
|
|
22
|
-
|
|
23
|
-
`provider/docs/**` 是 provider-managed target docs bundle 的 source。Prelude materialization
|
|
24
|
-
应该把这些文件投递到 `.prelude/providers/effect-harness/docs/**`。
|
|
25
|
-
|
|
26
|
-
## Files
|
|
27
|
-
|
|
28
|
-
| Source | Target | Purpose |
|
|
29
|
-
| --- | --- | --- |
|
|
30
|
-
| `provider/docs/effect-code.md` | `.prelude/providers/effect-harness/docs/effect-code.md` | 说明 target 内 Effect 代码的编码基线。 |
|
|
31
|
-
| `provider/docs/diagnostics.md` | `.prelude/providers/effect-harness/docs/diagnostics.md` | 说明 target 内 strict tsgo diagnostic gate。 |
|
|
32
|
-
| `provider/docs/discovery.md` | `.prelude/providers/effect-harness/docs/discovery.md` | 说明 Prelude 如何通过 provider discovery 消费 package artifact。 |
|
|
33
|
-
| `provider/docs/editor-policy.md` | `.prelude/providers/effect-harness/docs/editor-policy.md` | 说明 target 内 editor policy 的 hard、recommended 和 preference 层级。 |
|
|
34
|
-
| `provider/docs/managed-surfaces.md` | `.prelude/providers/effect-harness/docs/managed-surfaces.md` | 说明 target 内受管 surface、artifact-only reference 和 feedback loop 边界。 |
|
|
35
|
-
| `provider/docs/package-config.md` | `.prelude/providers/effect-harness/docs/package-config.md` | 说明 target 内 package baseline、script baseline 和 `tsconfig.json` projection。 |
|
|
36
|
-
| `provider/docs/quality-policy.md` | `.prelude/providers/effect-harness/docs/quality-policy.md` | 说明 target 内 lint、test 和 verify policy。 |
|
|
37
|
-
| `provider/docs/source-identity.md` | `.prelude/providers/effect-harness/docs/source-identity.md` | 说明 provider-internal source pin 如何以 identity 形式出现在 target record 中。 |
|
|
38
|
-
|
|
39
|
-
## Boundary
|
|
40
|
-
|
|
41
|
-
docs bundle MUST 面向 target 使用者说明受管能力。
|
|
42
|
-
|
|
43
|
-
docs bundle MUST NOT 要求 target 拥有 `repos/effect/`、`repos/tsgo/`、subtree contracts、Codex
|
|
44
|
-
runtime 资产、feedback intake、`.effect-harness.json` 或 effect-harness 管理的 `AGENTS.md`
|
|
45
|
-
block。
|
|
46
|
-
|
|
47
|
-
docs bundle SHOULD 只引用 target 可见 surface:provider record、package baseline、`tsconfig.json`
|
|
48
|
-
projection、diagnostic scripts、docs bundle 和 snippets。
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
audience: [agent, human]
|
|
3
|
-
authors:
|
|
4
|
-
- codex
|
|
5
|
-
reviewed_by: []
|
|
6
|
-
purpose: 说明 target 接入 effect-harness 后哪些 surface 受管、哪些只是 artifact reference。
|
|
7
|
-
status: active
|
|
8
|
-
sources:
|
|
9
|
-
- provider/effect-harness.provider.json
|
|
10
|
-
- provider/docs/index.md
|
|
11
|
-
- harness/feedback-loop.md
|
|
12
|
-
updated: 2026-07-02
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Managed Surfaces
|
|
16
|
-
|
|
17
|
-
## Target-Managed
|
|
18
|
-
|
|
19
|
-
target-managed surfaces 是 exported harness 的本地投影。
|
|
20
|
-
|
|
21
|
-
provider record、package baseline、`tsconfig.json` projection、editor settings projection、docs bundle、
|
|
22
|
-
snippets、lint policy、test policy 和 verification policy 都属于 target 应记录的 provider-managed
|
|
23
|
-
能力。
|
|
24
|
-
|
|
25
|
-
target 修改这些 surface 后,Prelude maintain SHOULD 区分 local drift、provider update 和 base match。
|
|
26
|
-
|
|
27
|
-
## Artifact-Only
|
|
28
|
-
|
|
29
|
-
source identity、source pin contract、route docs 和 upstream source references 是 provider artifact
|
|
30
|
-
reference。
|
|
31
|
-
|
|
32
|
-
target 可以通过 provider record 读取 source identity,但 target MUST NOT 接收 provider-internal source
|
|
33
|
-
tree、subtree contract 或 route docs 本体。
|
|
34
|
-
|
|
35
|
-
## Snippets
|
|
36
|
-
|
|
37
|
-
snippet 是 provider-managed source content。
|
|
38
|
-
|
|
39
|
-
effect-harness 可以提供 snippet contribution,但 effect-harness MUST NOT 直接管理 target `AGENTS.md`
|
|
40
|
-
block。
|
|
41
|
-
|
|
42
|
-
target-local agent policy 可以 include、copy 或改写 snippet,并由 target owner 决定本地落点。
|
|
43
|
-
|
|
44
|
-
## Feedback Loop
|
|
45
|
-
|
|
46
|
-
verification policy 的 completion gate 是 `pnpm verify`。
|
|
47
|
-
|
|
48
|
-
provider docs bundle 说明如何定位失败 stage、diagnostic layer 和受管 surface。
|
|
49
|
-
|
|
50
|
-
feedback loop semantics 用于判断下一步读哪个 provider doc,不表示 effect-harness 接管 Prelude
|
|
51
|
-
target lifecycle。
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
audience: [agent, human]
|
|
3
|
-
authors:
|
|
4
|
-
- codex
|
|
5
|
-
reviewed_by: []
|
|
6
|
-
purpose: 说明 target 接入 effect-harness 后 package 与 TypeScript 配置的受管口径。
|
|
7
|
-
status: active
|
|
8
|
-
sources:
|
|
9
|
-
- provider/effect-harness.provider.json
|
|
10
|
-
- harness/tsgo.md
|
|
11
|
-
updated: 2026-07-02
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Package Config
|
|
15
|
-
|
|
16
|
-
## Package
|
|
17
|
-
|
|
18
|
-
target 的 runtime dependencies MUST 包含 `effect` 和 `@effect/platform-node`。
|
|
19
|
-
|
|
20
|
-
target 的 Effect testing dependency MUST 包含 `@effect/vitest`。
|
|
21
|
-
|
|
22
|
-
target 的 test runner dependency MUST 包含 `vitest`。
|
|
23
|
-
|
|
24
|
-
target 的 diagnostics dependencies MUST 包含 `@effect/tsgo` 和 `@effect/language-service`。
|
|
25
|
-
|
|
26
|
-
target 的 native backend dependency MUST 包含 `@typescript/native-preview`。
|
|
27
|
-
|
|
28
|
-
target 的 lint dependencies MUST 包含 `eslint` 和 `@antfu/eslint-config`。
|
|
29
|
-
|
|
30
|
-
版本基线由 provider profile 管理。target 不应该用局部版本覆盖降低 Effect v4 beta、tsgo 或
|
|
31
|
-
language-service baseline。
|
|
32
|
-
|
|
33
|
-
## Scripts
|
|
34
|
-
|
|
35
|
-
target 的 native backend setup script SHOULD 指向:
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
effect-tsgo patch
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
target 的 primary diagnostics script SHOULD 指向:
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
tsgo --noEmit
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
target 的 test script SHOULD 指向:
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
vitest run
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
target 的 lint script SHOULD 指向:
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
eslint
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
这些 script 是 provider-managed 指针。Prelude materialization 和 maintain 应按 provider record
|
|
60
|
-
判断本地 drift。
|
|
61
|
-
|
|
62
|
-
## Tsconfig
|
|
63
|
-
|
|
64
|
-
target 的 `tsconfig.json` MUST 包含 `@effect/language-service` plugin。
|
|
65
|
-
|
|
66
|
-
plugin fields MUST 保持 provider profile 声明的 strict v4 policy。
|
|
67
|
-
|
|
68
|
-
`diagnosticSeverity` MUST 是 provider profile 投影出的显式 rule map。
|
|
69
|
-
|
|
70
|
-
target SHOULD 修复 diagnostics,而不是在 `tsconfig.json` 里添加 local override、关闭
|
|
71
|
-
`diagnosticSeverity` 或降低 diagnostic gate。
|