@hassangameryt/freeflow 0.5.0 → 0.7.0
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +4 -5
- package/README.md +141 -163
- package/capabilities/cognitive-routing/SKILL.md +387 -0
- package/capabilities/context-virtualization/SKILL.md +103 -0
- package/capabilities/conversation-history/SKILL.md +53 -0
- package/command-surface.json +6 -37
- package/hooks/freeflow-runtime-context.mjs +50 -541
- package/hooks/hooks.json +1 -26
- package/hooks/tests/check-runtime-context-hook.sh +114 -308
- package/package.json +27 -17
- package/pi-extension/dist/cognitive-routing/commands.js +96 -0
- package/pi-extension/dist/cognitive-routing/config.js +232 -0
- package/pi-extension/dist/cognitive-routing/controller.js +1292 -0
- package/pi-extension/dist/cognitive-routing/history.js +451 -0
- package/pi-extension/dist/cognitive-routing/host.js +188 -0
- package/pi-extension/dist/cognitive-routing/pi-routing-session.js +414 -0
- package/pi-extension/dist/cognitive-routing/pi-session-control.js +320 -0
- package/pi-extension/dist/cognitive-routing/runtime.js +43 -0
- package/pi-extension/dist/cognitive-routing/tool.js +212 -0
- package/pi-extension/dist/cognitive-routing/types.js +6 -0
- package/pi-extension/dist/context-virtualization/commands.js +89 -0
- package/pi-extension/dist/context-virtualization/projector.js +42 -0
- package/pi-extension/dist/context-virtualization/runtime.js +356 -0
- package/pi-extension/dist/context-virtualization/state.js +57 -0
- package/pi-extension/dist/context-virtualization/types.js +10 -0
- package/pi-extension/dist/conversation-history/passages.js +66 -0
- package/pi-extension/dist/conversation-history/ranking.js +105 -0
- package/pi-extension/dist/conversation-history/runtime.js +226 -0
- package/pi-extension/dist/conversation-history/search.js +56 -0
- package/pi-extension/dist/conversation-history/types.js +1 -0
- package/pi-extension/dist/freeflow-context/resolver.js +120 -0
- package/pi-extension/dist/freeflow-context/runtime.js +80 -0
- package/pi-extension/dist/freeflow-context/source-projector.js +95 -0
- package/pi-extension/dist/freeflow-context/tool.js +308 -0
- package/pi-extension/dist/freeflow-context/types.js +12 -0
- package/pi-extension/dist/freeflow-context/visibility.js +28 -0
- package/pi-extension/dist/index.js +564 -129
- package/pi-extension/dist/runtime/runtime-context.js +357 -470
- package/pi-extension/dist/runtime/runtime-identity.js +5 -0
- package/pi-extension/dist/settings/settings-tui.js +78 -0
- package/pi-extension/dist/settings/settings-ui.js +572 -826
- package/pi-extension/dist/ui/text-component.js +57 -0
- package/pi-extension/src/cognitive-routing/commands.ts +129 -0
- package/pi-extension/src/cognitive-routing/config.ts +303 -0
- package/pi-extension/src/cognitive-routing/controller.ts +1628 -0
- package/pi-extension/src/cognitive-routing/history.ts +650 -0
- package/pi-extension/src/cognitive-routing/host.ts +266 -0
- package/pi-extension/src/cognitive-routing/pi-routing-session.ts +538 -0
- package/pi-extension/src/cognitive-routing/pi-session-control.ts +444 -0
- package/pi-extension/src/cognitive-routing/runtime.ts +57 -0
- package/pi-extension/src/cognitive-routing/tool.ts +273 -0
- package/pi-extension/src/cognitive-routing/types.ts +89 -0
- package/pi-extension/src/context-virtualization/commands.ts +111 -0
- package/pi-extension/src/context-virtualization/projector.ts +62 -0
- package/pi-extension/src/context-virtualization/runtime.ts +406 -0
- package/pi-extension/src/context-virtualization/state.ts +79 -0
- package/pi-extension/src/context-virtualization/types.ts +92 -0
- package/pi-extension/src/conversation-history/passages.ts +81 -0
- package/pi-extension/src/conversation-history/ranking.ts +155 -0
- package/pi-extension/src/conversation-history/runtime.ts +250 -0
- package/pi-extension/src/conversation-history/search.ts +79 -0
- package/pi-extension/src/conversation-history/types.ts +31 -0
- package/pi-extension/src/freeflow-context/resolver.ts +139 -0
- package/pi-extension/src/freeflow-context/runtime.ts +100 -0
- package/pi-extension/src/freeflow-context/source-projector.ts +106 -0
- package/pi-extension/src/freeflow-context/tool.ts +360 -0
- package/pi-extension/src/freeflow-context/types.ts +70 -0
- package/pi-extension/src/freeflow-context/visibility.ts +53 -0
- package/pi-extension/src/index.ts +597 -135
- package/pi-extension/src/runtime/runtime-context.ts +373 -491
- package/pi-extension/src/runtime/runtime-identity.ts +8 -0
- package/pi-extension/src/settings/settings-tui.ts +93 -0
- package/pi-extension/src/settings/settings-ui.ts +679 -910
- package/pi-extension/src/ui/text-component.ts +66 -0
- package/pi-extension/tests/cognitive-routing/commands.test.js +134 -0
- package/pi-extension/tests/cognitive-routing/controller.test.js +1128 -0
- package/pi-extension/tests/cognitive-routing/extension-lifecycle.test.js +1142 -0
- package/pi-extension/tests/cognitive-routing/history.test.js +274 -0
- package/pi-extension/tests/cognitive-routing/host-fixture.js +4 -0
- package/pi-extension/tests/cognitive-routing/host-identity.test.js +63 -0
- package/pi-extension/tests/cognitive-routing/pi-normal-lifecycle.test.js +434 -0
- package/pi-extension/tests/cognitive-routing/pi-session-control.test.js +174 -0
- package/pi-extension/tests/cognitive-routing/pi-session-history.test.js +91 -0
- package/pi-extension/tests/cognitive-routing/profile-resolution.test.js +279 -0
- package/pi-extension/tests/cognitive-routing/tool.test.js +230 -0
- package/pi-extension/tests/context-virtualization/extension.test.js +749 -0
- package/pi-extension/tests/context-virtualization/projector.test.js +110 -0
- package/pi-extension/tests/context-virtualization/runtime.test.js +216 -0
- package/pi-extension/tests/conversation-history/runtime.test.js +98 -0
- package/pi-extension/tests/conversation-history/search.test.js +97 -0
- package/pi-extension/tests/integration/mode-free-core.test.js +218 -0
- package/pi-extension/tests/integration/pi-extension.test.js +532 -3701
- package/pi-extension/tests/integration/prompt-architecture.test.js +350 -0
- package/pi-extension/tests/integration/unaffected-regressions.test.js +411 -0
- package/runtime/prompts/cognitive-routing.md +10 -0
- package/runtime/prompts/context-virtualization.md +3 -0
- package/runtime/prompts/conversation-history.md +3 -0
- package/runtime/prompts/core.md +84 -0
- package/runtime/prompts/interaction-contract.md +11 -0
- package/skills/action-selection/SKILL.md +140 -0
- package/skills/action-selection/references/trajectory-stalls.md +71 -0
- package/skills/bypass/SKILL.md +109 -38
- package/skills/commit-work/SKILL.md +94 -55
- package/skills/commit-work/references/git-state-edges.md +94 -0
- package/skills/commit-work/references/simple-push.md +92 -0
- package/skills/commit-work/references/staging-decisions.md +79 -46
- package/skills/decision-gate/SKILL.md +80 -22
- package/skills/design-for-depth/SKILL.md +206 -60
- package/skills/design-for-depth/references/design-pressure-signals.md +108 -240
- package/skills/design-for-depth/references/interface-design-loop.md +77 -97
- package/skills/design-for-depth/references/module-and-dependency-design.md +147 -0
- package/skills/design-for-depth/references/software-design-philosophy.md +128 -174
- package/skills/design-for-depth/references/state-and-failure-boundaries.md +136 -0
- package/skills/diagnose-failure/SKILL.md +200 -48
- package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +18 -6
- package/skills/diagnose-failure/references/{flaky-and-performance.md → flaky-and-performance-diagnosis.md} +13 -5
- package/skills/discuss/SKILL.md +119 -65
- package/skills/discuss/references/discussion-continuity.md +123 -0
- package/skills/evaluate-skill/SKILL.md +166 -52
- package/skills/evaluate-skill/references/{definition-schema.md → evaluation-definition-schema.md} +43 -3
- package/skills/evaluate-skill/references/evaluation-design.md +56 -30
- package/skills/evaluate-skill/references/execution-and-evidence.md +8 -3
- package/skills/evaluate-skill/references/review-and-revision.md +62 -21
- package/skills/evaluate-skill/scripts/lib/definitions.mjs +114 -3
- package/skills/evaluate-skill/scripts/lib/grade-interaction.mjs +156 -1
- package/skills/evaluate-skill/scripts/lib/grade.mjs +9 -1
- package/skills/evaluate-skill/scripts/lib/pi.mjs +147 -32
- package/skills/evaluate-skill/scripts/lib/rpc.mjs +4 -4
- package/skills/evaluate-skill/scripts/lib/runner.mjs +36 -14
- package/skills/evaluate-skill/scripts/lib/sandbox.mjs +92 -0
- package/skills/evaluate-skill/scripts/pi-guard.mjs +1 -1
- package/skills/evaluate-skill/scripts/pi-observer.mjs +66 -0
- package/skills/evaluate-skill/scripts/skill-eval.mjs +6 -5
- package/skills/execute-work/SKILL.md +99 -57
- package/skills/execute-work/references/code-practices.md +4 -4
- package/skills/execute-work/references/execute-work-edges.md +62 -0
- package/skills/finish-branch/SKILL.md +2 -2
- package/skills/finish-branch/references/integration-options.md +1 -1
- package/skills/handoff/SKILL.md +3 -3
- package/skills/launch-work/SKILL.md +1 -1
- package/skills/launch-work/references/launch-readiness.md +2 -2
- package/skills/migration-work/SKILL.md +2 -2
- package/skills/migration-work/references/migration-lifecycle.md +1 -1
- package/skills/release-work/SKILL.md +1 -1
- package/skills/release-work/references/release-evidence.md +1 -1
- package/skills/review-artifact/SKILL.md +129 -66
- package/skills/review-artifact/references/adjudicate-artifact-review.md +101 -0
- package/skills/review-artifact/references/independent-artifact-reviewer-contract.md +159 -0
- package/skills/review-work/SKILL.md +113 -68
- package/skills/review-work/references/adjudicate-work-review.md +97 -0
- package/skills/review-work/references/independent-work-reviewer-contract.md +139 -0
- package/skills/review-work/references/security-risk-lens.md +18 -16
- package/skills/setup-freeflow/SKILL.md +16 -17
- package/skills/setup-freeflow/references/activation-contract.md +24 -30
- package/skills/setup-freeflow/references/host-setup.md +6 -7
- package/skills/simplify-code/SKILL.md +97 -39
- package/skills/simplify-code/references/simplification-patterns.md +1 -1
- package/skills/tdd/SKILL.md +100 -53
- package/skills/tdd/references/test-design.md +3 -3
- package/skills/track-work/SKILL.md +195 -58
- package/skills/track-work/references/working-record-format.md +515 -0
- package/skills/track-work/scripts/lib/document.mjs +713 -0
- package/skills/track-work/scripts/lib/format.mjs +166 -0
- package/skills/track-work/scripts/lib/store.mjs +233 -0
- package/skills/track-work/scripts/lib/transitions.mjs +790 -0
- package/skills/track-work/scripts/lib/views.mjs +40 -0
- package/skills/track-work/scripts/working-record.mjs +316 -0
- package/skills/verify-work/SKILL.md +57 -19
- package/skills/verify-work/references/browser-runtime-evidence.md +2 -2
- package/skills/verify-work/references/integration-evidence.md +1 -7
- package/skills/verify-work/references/performance-evidence.md +2 -2
- package/skills/workflow/SKILL.md +137 -55
- package/skills/workflow/references/domain-skill-composition.md +26 -40
- package/skills/write-plan/SKILL.md +1 -1
- package/skills/write-skill/SKILL.md +218 -61
- package/skills/write-skill/references/activation-boundaries.md +63 -21
- package/skills/write-skill/references/agent-first-instructions.md +61 -27
- package/skills/write-skill/references/progressive-disclosure.md +97 -33
- package/skills/write-skill/references/skill-dependency-graphs.md +190 -0
- package/capabilities/output-router/SKILL.md +0 -206
- package/capabilities/output-router/references/safety-policy.md +0 -40
- package/capabilities/output-router/references/setup.md +0 -110
- package/pi-extension/dist/output-router/host-producer-identification.js +0 -232
- package/pi-extension/dist/output-router/native-safety-net.js +0 -216
- package/pi-extension/dist/output-router/observed-tool-routing.js +0 -122
- package/pi-extension/dist/output-router/renderers.js +0 -1023
- package/pi-extension/dist/output-router/router-tools.js +0 -554
- package/pi-extension/dist/output-router/schemas.js +0 -383
- package/pi-extension/dist/output-router/status.js +0 -744
- package/pi-extension/dist/output-router/utils.js +0 -502
- package/pi-extension/src/output-router/host-producer-identification.ts +0 -256
- package/pi-extension/src/output-router/native-safety-net.ts +0 -248
- package/pi-extension/src/output-router/observed-tool-routing.ts +0 -134
- package/pi-extension/src/output-router/renderers.ts +0 -1108
- package/pi-extension/src/output-router/router-tools.ts +0 -579
- package/pi-extension/src/output-router/schemas.ts +0 -387
- package/pi-extension/src/output-router/status.ts +0 -791
- package/pi-extension/src/output-router/utils.ts +0 -554
- package/pi-extension/tests/output-router/observed-producers.test.js +0 -132
- package/pi-extension/tests/output-router/search.test.js +0 -722
- package/router/dist/benchmarks/benchmark-harness.d.ts +0 -35
- package/router/dist/benchmarks/benchmark-harness.js +0 -92
- package/router/dist/benchmarks/benchmarks.d.ts +0 -109
- package/router/dist/benchmarks/benchmarks.js +0 -979
- package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +0 -95
- package/router/dist/benchmarks/codex-qa-benchmarks.js +0 -500
- package/router/dist/benchmarks/command-benchmarks.d.ts +0 -143
- package/router/dist/benchmarks/command-benchmarks.js +0 -698
- package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +0 -82
- package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +0 -773
- package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +0 -132
- package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +0 -1380
- package/router/dist/benchmarks/context-saving-baseline.d.ts +0 -60
- package/router/dist/benchmarks/context-saving-baseline.js +0 -470
- package/router/dist/benchmarks/index-benchmarks.d.ts +0 -103
- package/router/dist/benchmarks/index-benchmarks.js +0 -862
- package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +0 -101
- package/router/dist/benchmarks/storage-policy-benchmarks.js +0 -618
- package/router/dist/benchmarks/vault-index-benchmarks.d.ts +0 -56
- package/router/dist/benchmarks/vault-index-benchmarks.js +0 -322
- package/router/dist/config/config.d.ts +0 -103
- package/router/dist/config/config.js +0 -632
- package/router/dist/config/router-contract.d.ts +0 -10
- package/router/dist/config/router-contract.js +0 -54
- package/router/dist/config/schema.d.ts +0 -27
- package/router/dist/config/schema.js +0 -648
- package/router/dist/config/types.d.ts +0 -573
- package/router/dist/config/types.js +0 -41
- package/router/dist/evidence/bounded-evidence.d.ts +0 -40
- package/router/dist/evidence/bounded-evidence.js +0 -323
- package/router/dist/evidence/evidence-range-selector.d.ts +0 -24
- package/router/dist/evidence/evidence-range-selector.js +0 -232
- package/router/dist/evidence/evidence-search.d.ts +0 -27
- package/router/dist/evidence/evidence-search.js +0 -490
- package/router/dist/evidence/evidence.d.ts +0 -38
- package/router/dist/evidence/evidence.js +0 -200
- package/router/dist/evidence/failure-contracts.d.ts +0 -37
- package/router/dist/evidence/failure-contracts.js +0 -166
- package/router/dist/evidence/line-ranges.d.ts +0 -24
- package/router/dist/evidence/line-ranges.js +0 -22
- package/router/dist/experiments/local-index.d.ts +0 -64
- package/router/dist/experiments/local-index.js +0 -581
- package/router/dist/index.d.ts +0 -30
- package/router/dist/index.js +0 -32
- package/router/dist/local/local-traversal.d.ts +0 -18
- package/router/dist/local/local-traversal.js +0 -334
- package/router/dist/processing/engine.d.ts +0 -132
- package/router/dist/processing/engine.js +0 -533
- package/router/dist/processing/reducers.d.ts +0 -280
- package/router/dist/processing/reducers.js +0 -1673
- package/router/dist/processing/renderers.d.ts +0 -31
- package/router/dist/processing/renderers.js +0 -195
- package/router/dist/processing/scripts.d.ts +0 -91
- package/router/dist/processing/scripts.js +0 -386
- package/router/dist/repo/repo-traversal.d.ts +0 -18
- package/router/dist/repo/repo-traversal.js +0 -245
- package/router/dist/routing/observed-reducers.d.ts +0 -41
- package/router/dist/routing/observed-reducers.js +0 -661
- package/router/dist/routing/observed-routing.d.ts +0 -26
- package/router/dist/routing/observed-routing.js +0 -378
- package/router/dist/routing/parsers.d.ts +0 -16
- package/router/dist/routing/parsers.js +0 -521
- package/router/dist/routing/run-filters.d.ts +0 -60
- package/router/dist/routing/run-filters.js +0 -238
- package/router/dist/routing/run-reducers.d.ts +0 -49
- package/router/dist/routing/run-reducers.js +0 -122
- package/router/dist/sandbox/adapter-roots.d.ts +0 -46
- package/router/dist/sandbox/adapter-roots.js +0 -66
- package/router/dist/sandbox/eryx-python-adapter.d.ts +0 -13
- package/router/dist/sandbox/eryx-python-adapter.js +0 -868
- package/router/dist/sandbox/jq-wasm-adapter.d.ts +0 -9
- package/router/dist/sandbox/jq-wasm-adapter.js +0 -429
- package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +0 -13
- package/router/dist/sandbox/quickjs-wasi-adapter.js +0 -384
- package/router/dist/sandbox/script-sandbox.d.ts +0 -134
- package/router/dist/sandbox/script-sandbox.js +0 -337
- package/router/dist/setup/script-transform-adapters.d.ts +0 -32
- package/router/dist/setup/script-transform-adapters.js +0 -278
- package/router/dist/tools/batch.d.ts +0 -33
- package/router/dist/tools/batch.js +0 -586
- package/router/dist/tools/run.d.ts +0 -62
- package/router/dist/tools/run.js +0 -1304
- package/router/dist/tools/search.d.ts +0 -66
- package/router/dist/tools/search.js +0 -1364
- package/router/dist/transform/engine.d.ts +0 -168
- package/router/dist/transform/engine.js +0 -2072
- package/router/dist/vault/vault-index.d.ts +0 -125
- package/router/dist/vault/vault-index.js +0 -416
- package/router/dist/vault/vault.d.ts +0 -138
- package/router/dist/vault/vault.js +0 -630
- package/runtime/interaction-contract.md +0 -16
- package/skills/discuss/references/checkpoints.md +0 -66
- package/skills/execute-work/references/execution-loop.md +0 -77
- package/skills/mode-contract/SKILL.md +0 -104
- package/skills/review-artifact/references/reviewer-prompt.md +0 -148
- package/skills/review-work/references/reviewer-prompt.md +0 -134
- package/skills/track-work/references/working-record-schema.md +0 -378
- package/skills/workflow/references/workflow-loop.md +0 -92
- /package/skills/handoff/references/{templates.md → handoff-templates.md} +0 -0
|
@@ -1,106 +1,252 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-for-depth
|
|
3
|
-
description: Use
|
|
3
|
+
description: Use during coding and software design to keep boundaries, interfaces, ownership, state, dependencies, and failure behavior simple and proportionate.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Design For Depth
|
|
7
7
|
|
|
8
|
-
Reduce coordination by hiding
|
|
8
|
+
Reduce coordination by hiding coherent, likely-changing decisions behind small, stable, outcome-level interfaces.
|
|
9
9
|
|
|
10
|
-
A **module** is anything with an interface and implementation. A **caller** is anything that uses
|
|
10
|
+
A **module** is anything with an interface and implementation. A **caller** is anything that uses it. The **interface** is every fact callers must know to use it correctly: operations, inputs, decisions, states, ordering, errors, side effects, dependencies, configuration, timing, and recovery.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
**Depth** is useful coherent behavior and hidden complexity per unit of caller knowledge.
|
|
13
13
|
|
|
14
|
-
Use this as a compositional lens
|
|
14
|
+
Use this as a compositional lens under the active activity. It is not a mandatory phase, authority source, architecture owner, or reason to refactor.
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## Orient Broadly, Deepen Narrowly
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Use breadth of understanding before depth of intervention.
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Before deepening a design, understand only the material breadth:
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
- complete caller outcome;
|
|
23
|
+
- caller-owned decisions;
|
|
24
|
+
- existing interface and dependencies;
|
|
25
|
+
- canonical state and visible transitions;
|
|
26
|
+
- success, failure, and recovery boundary;
|
|
27
|
+
- current constraints and accepted non-goals;
|
|
28
|
+
- evidence capable of changing the design route.
|
|
23
29
|
|
|
24
|
-
|
|
30
|
+
Then deepen only the decision, seam, state boundary, or failure unit whose ownership could materially change the result.
|
|
25
31
|
|
|
26
|
-
|
|
32
|
+
Do not broaden the task merely to complete the survey. Do not discuss every design topic, inspect every dependency, generate every alternative, or design the whole system.
|
|
27
33
|
|
|
28
|
-
|
|
29
|
-
- Which decisions genuinely belong to the caller?
|
|
30
|
-
- Which ordering, policy, storage, retry, cleanup, or provider details can the module own?
|
|
31
|
-
- What counts as complete and visible success?
|
|
32
|
-
- If it fails, who observes it, what state or evidence is written, and what must never happen?
|
|
33
|
-
- Does failure stop, fail closed, fail open, degrade, retry, escalate, or require recovery?
|
|
34
|
-
- What is safe to restart, and what evidence establishes recovery?
|
|
35
|
-
- Which likely-changing decision should remain local?
|
|
34
|
+
## Start Shallow
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
For any coding or design task, ask:
|
|
38
37
|
|
|
39
|
-
|
|
38
|
+
1. What complete outcome is changing?
|
|
39
|
+
2. What must callers currently know or coordinate?
|
|
40
|
+
3. Does this change add caller knowledge, spread policy, alter dependency direction, or change state or failure ownership?
|
|
41
|
+
4. Would keeping the current boundary make correct use or the next likely change materially harder?
|
|
40
42
|
|
|
41
|
-
|
|
43
|
+
When the change is local, source-backed, reversible, and leaves the interface, dependencies, state, and failure unit sound:
|
|
42
44
|
|
|
43
|
-
|
|
45
|
+
- apply this lens silently;
|
|
46
|
+
- preserve accepted behavior;
|
|
47
|
+
- do not load references;
|
|
48
|
+
- do not present architectural alternatives;
|
|
49
|
+
- do not widen the task.
|
|
44
50
|
|
|
45
|
-
|
|
51
|
+
A large mechanical change may need no design escalation. A one-line change may require it when permissions, canonical state, public behavior, compatibility, or consequential failure changes.
|
|
46
52
|
|
|
47
|
-
|
|
53
|
+
An abstraction is not required merely because code is duplicated, tests are awkward, or another design is imaginable.
|
|
54
|
+
|
|
55
|
+
## Enter Early Or Re-enter From Evidence
|
|
56
|
+
|
|
57
|
+
Use this lens early when ownership, interface, state, dependency, or failure decisions could harden into caller contracts before implementation.
|
|
58
|
+
|
|
59
|
+
Early design may support:
|
|
60
|
+
|
|
61
|
+
- discussion;
|
|
62
|
+
- a Spec or Plan;
|
|
63
|
+
- an API or module boundary;
|
|
64
|
+
- a state transition;
|
|
65
|
+
- a consequential integration;
|
|
66
|
+
- test-seam selection.
|
|
67
|
+
|
|
68
|
+
During implementation, testing, and review, preserve a supported boundary without reopening it merely because this lens remains in context.
|
|
69
|
+
|
|
70
|
+
Re-enter later only when direct evidence shows:
|
|
71
|
+
|
|
72
|
+
- caller coordination growing;
|
|
73
|
+
- policy or state spreading;
|
|
74
|
+
- repeated patches adding flags or lifecycle knowledge;
|
|
75
|
+
- tests reproducing internal choreography;
|
|
76
|
+
- dependencies or failures crossing unclear ownership;
|
|
77
|
+
- prior boundary assumptions becoming false.
|
|
78
|
+
|
|
79
|
+
When repeated or unexplained failure lacks a supported cause, use [Diagnose Failure](../diagnose-failure/SKILL.md) first. Diagnosis owns causal investigation. This lens consumes supported structural evidence without recreating the diagnosis.
|
|
80
|
+
|
|
81
|
+
## Establish The Outcome And Failure Unit
|
|
82
|
+
|
|
83
|
+
Before choosing classes, services, packages, adapters, or states, name:
|
|
84
|
+
|
|
85
|
+
- caller and complete outcome;
|
|
86
|
+
- caller-visible success and failure;
|
|
87
|
+
- decisions the caller genuinely owns;
|
|
88
|
+
- coordination or likely-changing policy the module could hide;
|
|
89
|
+
- the **failure unit**: the coherent outcome treated as one success, failure, and recovery boundary.
|
|
90
|
+
|
|
91
|
+
When the boundary has side effects, can leave partial state, or makes failure materially consequential, establish its **failure contract**:
|
|
92
|
+
|
|
93
|
+
- who observes failure;
|
|
94
|
+
- canonical and diagnostic state written;
|
|
95
|
+
- forbidden partial outcomes;
|
|
96
|
+
- stop, fail-open, fail-closed, degrade, retry, or escalation behavior;
|
|
97
|
+
- cancellation and concurrency behavior when relevant;
|
|
98
|
+
- safe restart, recovery, and reconciliation;
|
|
99
|
+
- evidence required to prove the outcome.
|
|
100
|
+
|
|
101
|
+
Failure behavior is part of the interface even when its mechanism remains private.
|
|
102
|
+
|
|
103
|
+
Depth is not breadth. A deep module owns one coherent decision or failure unit. It does not collect unrelated responsibilities merely to reduce method count.
|
|
104
|
+
|
|
105
|
+
Use [Decision Gate](../decision-gate/SKILL.md) when the boundary changes product behavior, public interfaces, compatibility, permissions, security, privacy, billing, data-loss behavior, migration direction, or another user-owned outcome.
|
|
106
|
+
|
|
107
|
+
## Hide Coordination And Likely-Changing Decisions
|
|
108
|
+
|
|
109
|
+
Prefer interfaces where callers request an outcome and the module owns its internal protocol.
|
|
110
|
+
|
|
111
|
+
Before exposing a flag, path, state, ordering rule, retry, provider detail, timing behavior, dependency choice, or recovery step, ask:
|
|
112
|
+
|
|
113
|
+
- Does the caller genuinely own this choice?
|
|
48
114
|
- Does exposing it make correct use easier?
|
|
49
|
-
- Is it stable enough to become a contract?
|
|
115
|
+
- Is it stable enough to become a supported contract?
|
|
116
|
+
- Which surrounding edits would occur if it changed?
|
|
50
117
|
- Could one outcome-level operation hide it?
|
|
51
118
|
|
|
52
|
-
Keep
|
|
119
|
+
Keep public:
|
|
120
|
+
|
|
121
|
+
- caller-owned outcomes and decisions;
|
|
122
|
+
- stable invariants;
|
|
123
|
+
- necessary inputs;
|
|
124
|
+
- observable success and failure semantics;
|
|
125
|
+
- information required for correct recovery.
|
|
126
|
+
|
|
127
|
+
Keep private unless callers genuinely control them:
|
|
128
|
+
|
|
129
|
+
- sequencing;
|
|
130
|
+
- storage layout;
|
|
131
|
+
- provider mechanics;
|
|
132
|
+
- retries and cleanup;
|
|
133
|
+
- temporary states;
|
|
134
|
+
- cache and optimization machinery;
|
|
135
|
+
- diagnostic implementation;
|
|
136
|
+
- dependency construction.
|
|
137
|
+
|
|
138
|
+
A **seam** is a boundary where behavior, dependencies, or observation can change without forcing surrounding edits. An **enabling point** is where an adapter, test implementation, clock, probe, provider, or migration path enters that seam.
|
|
53
139
|
|
|
54
|
-
|
|
140
|
+
Add a seam for demonstrated variation, a known migration, a required observation boundary, or a dependency that must be controlled in tests—not imagined flexibility.
|
|
55
141
|
|
|
56
142
|
## Recognize Structural Pressure
|
|
57
143
|
|
|
58
|
-
Structural pressure
|
|
144
|
+
Structural pressure is evidence that the current boundary is increasing coordination or hiding no useful decision.
|
|
145
|
+
|
|
146
|
+
Pressure may appear as:
|
|
147
|
+
|
|
148
|
+
- change amplification across unrelated callers;
|
|
149
|
+
- caller lifecycle choreography;
|
|
150
|
+
- scattered policy;
|
|
151
|
+
- unowned canonical state or failure behavior;
|
|
152
|
+
- growing flags, temporary states, retries, or recovery rules;
|
|
153
|
+
- tests coupled to machinery rather than accepted behavior;
|
|
154
|
+
- infrastructure details leaking into policy;
|
|
155
|
+
- edge-case patches revealing one shared contract gap;
|
|
156
|
+
- a bounded result unexpectedly requiring a subsystem.
|
|
157
|
+
|
|
158
|
+
Ordinary bugs, failed tests, duplicate code, broad mechanical edits, finding count, and personal design preference do not prove structural pressure.
|
|
159
|
+
|
|
160
|
+
When observed coordination could change the next route, read [Design Pressure Signals](references/design-pressure-signals.md). Skip it only when an equivalent route classification is already supported.
|
|
161
|
+
|
|
162
|
+
When structural pressure is supported but the likely-changing decision or missing information-hiding boundary cannot yet be named, read [Software Design Philosophy](references/software-design-philosophy.md).
|
|
163
|
+
|
|
164
|
+
Read the narrowest reference whose condition matches the current question. Read another only if its distinct question remains afterward.
|
|
165
|
+
|
|
166
|
+
## Choose The Required Design Depth
|
|
167
|
+
|
|
168
|
+
Read [Interface Design Loop](references/interface-design-loop.md) before:
|
|
169
|
+
|
|
170
|
+
- comparing materially different interfaces;
|
|
171
|
+
- selecting consequential ownership;
|
|
172
|
+
- freezing an important correctness boundary;
|
|
173
|
+
- choosing among real seam placements.
|
|
174
|
+
|
|
175
|
+
Read [State And Failure Boundaries](references/state-and-failure-boundaries.md) when correctness materially depends on:
|
|
176
|
+
|
|
177
|
+
- canonical state;
|
|
178
|
+
- partial effects;
|
|
179
|
+
- atomic visibility;
|
|
180
|
+
- concurrency or cancellation;
|
|
181
|
+
- idempotency and retries;
|
|
182
|
+
- recovery or reconciliation;
|
|
183
|
+
- failure evidence.
|
|
184
|
+
|
|
185
|
+
Read [Module And Dependency Design](references/module-and-dependency-design.md) when the question materially concerns:
|
|
186
|
+
|
|
187
|
+
- module decomposition;
|
|
188
|
+
- cohesion and conceptual integrity;
|
|
189
|
+
- dependency direction;
|
|
190
|
+
- cycles or layering;
|
|
191
|
+
- policy versus infrastructure;
|
|
192
|
+
- shared ownership;
|
|
193
|
+
- ports and adapters.
|
|
59
194
|
|
|
60
|
-
|
|
61
|
-
- one policy or behavior requires unrelated edits across callers;
|
|
62
|
-
- callers or tests duplicate lifecycle choreography;
|
|
63
|
-
- tests need many owned internals or production hooks created only for testing;
|
|
64
|
-
- a bounded outcome requires an unplanned subsystem because no current seam can own it;
|
|
65
|
-
- correctness depends on coordinated steps that no module owns.
|
|
195
|
+
Several references may apply to one consequential boundary. Read them one at a time and only while each distinct condition remains.
|
|
66
196
|
|
|
67
|
-
|
|
197
|
+
## Test Through The Intended Interface
|
|
68
198
|
|
|
69
|
-
|
|
199
|
+
The intended interface is the normal behavior and test surface.
|
|
70
200
|
|
|
71
|
-
|
|
201
|
+
Question the design before adding test machinery when callers or tests must:
|
|
72
202
|
|
|
73
|
-
|
|
203
|
+
- bypass the intended interface;
|
|
204
|
+
- reproduce lifecycle choreography;
|
|
205
|
+
- mock many internals to verify one outcome;
|
|
206
|
+
- depend on private temporary states;
|
|
207
|
+
- know dependency construction callers should not own.
|
|
74
208
|
|
|
75
|
-
|
|
76
|
-
2. Choose the success and failure unit.
|
|
77
|
-
3. Inventory what callers, tests, reviewers, and future agents must know.
|
|
78
|
-
4. Keep caller-owned decisions public and move internal protocol behind the module.
|
|
79
|
-
5. Separate required trust and safety from speculative efficiency, scale, or portability.
|
|
80
|
-
6. For a structural or hard-to-reverse choice, compare materially different ownership or seam placements—not cosmetic variants.
|
|
81
|
-
7. Prefer the design with less caller knowledge, better locality, safer failure behavior, easier correct use, and proportionate evidence cost.
|
|
209
|
+
Do not redesign merely because an internal test observes internals. The problem is external callers requiring knowledge the module should hide.
|
|
82
210
|
|
|
83
|
-
|
|
211
|
+
Architecture-bearing tests should protect:
|
|
84
212
|
|
|
85
|
-
|
|
213
|
+
- accepted behavior;
|
|
214
|
+
- visible failure;
|
|
215
|
+
- state invariants;
|
|
216
|
+
- forbidden partial outcomes;
|
|
217
|
+
- settled recovery behavior;
|
|
218
|
+
- a real dependency or observation seam.
|
|
86
219
|
|
|
87
|
-
|
|
220
|
+
Tests that protect only accidental machinery do not justify that machinery.
|
|
88
221
|
|
|
89
|
-
|
|
222
|
+
Exploratory code can produce design evidence. It does not become production architecture without deliberate selection, authorized implementation, and verification at the required boundary.
|
|
90
223
|
|
|
91
|
-
|
|
224
|
+
## Return The Narrowest Supported Route
|
|
92
225
|
|
|
93
|
-
|
|
226
|
+
Return a changed ownership, scope, authority, or route boundary through [Workflow](../workflow/SKILL.md). Otherwise return to the active activity with:
|
|
94
227
|
|
|
95
|
-
|
|
228
|
+
- structural evidence;
|
|
229
|
+
- affected caller outcome;
|
|
230
|
+
- interface, module, dependency, state, and failure unit involved;
|
|
231
|
+
- likely-changing or currently unowned decision;
|
|
232
|
+
- materially different alternatives only when real;
|
|
233
|
+
- recommendation and assumptions;
|
|
234
|
+
- unresolved user-owned decisions;
|
|
235
|
+
- evidence still required;
|
|
236
|
+
- narrowest route.
|
|
96
237
|
|
|
97
|
-
|
|
98
|
-
- Every caller coordinates retry, storage, cleanup, and error translation → consider an outcome-level module that owns the protocol.
|
|
99
|
-
- One isolated condition is wrong while callers and the interface remain valid → make a local correction; do not redesign.
|
|
100
|
-
- Related failures repeatedly add shared states and caller rules → diagnose the common cause, then use this lens only when structural pressure is supported.
|
|
238
|
+
Possible routes include:
|
|
101
239
|
|
|
102
|
-
|
|
240
|
+
- continue with the current boundary;
|
|
241
|
+
- make a local correction;
|
|
242
|
+
- diagnose an unsupported cause;
|
|
243
|
+
- revise a Spec or Plan;
|
|
244
|
+
- use [Simplify Code](../simplify-code/SKILL.md) for behavior-preserving reduction;
|
|
245
|
+
- run a bounded learning slice;
|
|
246
|
+
- propose bounded deepening;
|
|
247
|
+
- defer supported design pressure;
|
|
248
|
+
- stop for owner direction.
|
|
103
249
|
|
|
104
|
-
|
|
250
|
+
A design recommendation does not authorize implementation.
|
|
105
251
|
|
|
106
|
-
|
|
252
|
+
Freeze a supported boundary instead of pursuing architectural completeness. Retain the decision, not perpetual design activity.
|