nobrainer-tech-flow 0.0.0-stage → 2.4.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.
Files changed (149) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +18 -0
  3. package/.claude-plugin/plugin.json +21 -0
  4. package/.codex-plugin/plugin.json +47 -0
  5. package/.opencode/INSTALL.md +37 -0
  6. package/.opencode/plugins/nobrainer-tech-skills.js +66 -0
  7. package/.pi/extensions/nobrainer-tech-skills.js +64 -0
  8. package/AGENTS.md +204 -0
  9. package/CLAUDE.md +204 -0
  10. package/CONTRIBUTING.md +70 -0
  11. package/GEMINI.md +1 -0
  12. package/LICENSE +21 -0
  13. package/README.md +658 -2
  14. package/SECURITY.md +33 -0
  15. package/adapters/bootstrap.md +27 -0
  16. package/assets/nobrainer-tech-logo.svg +1 -0
  17. package/assets/nobrainer-workflow.svg +155 -0
  18. package/assets/plugin-logo.png +0 -0
  19. package/bin/nobrainer-tech-flow.mjs +48 -0
  20. package/docs/BOUNDED_RUNNER.md +60 -0
  21. package/docs/CHAT_PLUGINS.md +29 -0
  22. package/docs/COMPATIBILITY.md +371 -0
  23. package/docs/INSTALL.md +626 -0
  24. package/docs/MIGRATION_TO_FLOW.md +117 -0
  25. package/docs/NAMING.md +39 -0
  26. package/docs/PRIVACY.md +9 -0
  27. package/docs/SESSION_RESTART.md +70 -0
  28. package/docs/SKILL_CURATION.md +124 -0
  29. package/docs/TESTING.md +232 -0
  30. package/docs/TRY_IT.md +109 -0
  31. package/docs/releases/v1.0.0.md +81 -0
  32. package/docs/releases/v1.1.0.md +85 -0
  33. package/docs/releases/v1.10.0.md +34 -0
  34. package/docs/releases/v1.11.0-publication-readback.md +25 -0
  35. package/docs/releases/v1.11.0.md +42 -0
  36. package/docs/releases/v1.12.0.md +30 -0
  37. package/docs/releases/v1.13.0.md +46 -0
  38. package/docs/releases/v1.14.0.md +43 -0
  39. package/docs/releases/v1.14.1.md +21 -0
  40. package/docs/releases/v1.2.0.md +87 -0
  41. package/docs/releases/v1.2.1.md +92 -0
  42. package/docs/releases/v1.3.0-publication-readback.md +69 -0
  43. package/docs/releases/v1.3.0.md +66 -0
  44. package/docs/releases/v1.3.1-publication-readback.md +76 -0
  45. package/docs/releases/v1.3.1.md +59 -0
  46. package/docs/releases/v1.4.0-publication-readback.md +81 -0
  47. package/docs/releases/v1.4.0.md +43 -0
  48. package/docs/releases/v1.5.0-publication-readback.md +76 -0
  49. package/docs/releases/v1.5.0.md +54 -0
  50. package/docs/releases/v1.6.0.md +64 -0
  51. package/docs/releases/v1.6.1-publication-readback.md +53 -0
  52. package/docs/releases/v1.6.1.md +82 -0
  53. package/docs/releases/v1.7.0.md +42 -0
  54. package/docs/releases/v1.7.1-publication-readback.md +64 -0
  55. package/docs/releases/v1.7.1.md +49 -0
  56. package/docs/releases/v1.8.0.md +63 -0
  57. package/docs/releases/v1.8.1.md +32 -0
  58. package/docs/releases/v1.9.0.md +33 -0
  59. package/docs/releases/v2.0.0-candidate.md +28 -0
  60. package/docs/releases/v2.0.0.md +53 -0
  61. package/docs/releases/v2.0.1.md +135 -0
  62. package/docs/releases/v2.0.2.md +189 -0
  63. package/docs/releases/v2.1.0.md +64 -0
  64. package/docs/releases/v2.1.1.md +43 -0
  65. package/docs/releases/v2.2.0.md +64 -0
  66. package/docs/releases/v2.2.1.md +11 -0
  67. package/docs/releases/v2.3.0.md +97 -0
  68. package/docs/releases/v2.3.1.md +71 -0
  69. package/docs/releases/v2.3.2.md +242 -0
  70. package/docs/releases/v2.4.0.md +126 -0
  71. package/gemini-extension.json +6 -0
  72. package/hooks/claude-hooks.json +17 -0
  73. package/hooks/hooks-cursor.json +10 -0
  74. package/hooks/run-hook.cmd +36 -0
  75. package/hooks/session-start +38 -0
  76. package/package.json +69 -4
  77. package/plugin.json +51 -0
  78. package/scripts/build_plugin.py +50 -0
  79. package/scripts/check_flow_update.py +18 -0
  80. package/scripts/check_public_commit.py +86 -0
  81. package/scripts/fetch_public_refs.py +69 -0
  82. package/scripts/install.py +600 -0
  83. package/scripts/install.sh +1392 -0
  84. package/scripts/install_guards.py +279 -0
  85. package/scripts/install_personalization.py +527 -0
  86. package/scripts/install_skills.py +951 -0
  87. package/scripts/npm_install.py +85 -0
  88. package/scripts/recommend_flow_setup.py +1522 -0
  89. package/scripts/validate_skills.py +465 -0
  90. package/skills/nobrainer-auto-fine-tune/SKILL.md +79 -0
  91. package/skills/nobrainer-auto-fine-tune/references/capacity-audit.md +49 -0
  92. package/skills/nobrainer-autoimprove/SKILL.md +212 -0
  93. package/skills/nobrainer-autoimprove/scripts/count_words.py +22 -0
  94. package/skills/nobrainer-browser/SKILL.md +234 -0
  95. package/skills/nobrainer-browser/references/cdp-profile-restart.md +93 -0
  96. package/skills/nobrainer-build/SKILL.md +173 -0
  97. package/skills/nobrainer-codex-context/SKILL.md +111 -0
  98. package/skills/nobrainer-codex-context/scripts/codex_context.py +175 -0
  99. package/skills/nobrainer-decide/SKILL.md +198 -0
  100. package/skills/nobrainer-dispatcher/SKILL.md +256 -0
  101. package/skills/nobrainer-dispatcher/agents/openai.yaml +4 -0
  102. package/skills/nobrainer-rca/SKILL.md +163 -0
  103. package/skills/nobrainer-research/SKILL.md +131 -0
  104. package/skills/nobrainer-review/SKILL.md +195 -0
  105. package/skills/nobrainer-security/SKILL.md +166 -0
  106. package/skills/nobrainer-sessions/SKILL.md +223 -0
  107. package/skills/nobrainer-sessions/references/evidence-receipt.md +55 -0
  108. package/skills/nobrainer-sessions/references/protocol.md +337 -0
  109. package/skills/nobrainer-sessions/references/session-restart.md +255 -0
  110. package/skills/nobrainer-sessions/scripts/evidence_receipt.py +373 -0
  111. package/skills/nobrainer-sessions/scripts/restart_gate.py +140 -0
  112. package/skills/nobrainer-sessions/scripts/run_bounded.py +390 -0
  113. package/skills/nobrainer-sessions/scripts/session_title.py +43 -0
  114. package/skills/nobrainer-skill-doctor/SKILL.md +149 -0
  115. package/skills/nobrainer-skill-doctor/references/astra.md +19 -0
  116. package/skills/nobrainer-skill-doctor/scripts/audit.py +100 -0
  117. package/skills/nobrainer-skill-doctor/scripts/context_candidates.py +133 -0
  118. package/skills/nobrainer-spec-driven-development/SKILL.md +132 -0
  119. package/skills/nobrainer-spec-driven-development/references/spec-template.md +114 -0
  120. package/skills/nobrainer-team/SKILL.md +165 -0
  121. package/skills/nobrainer-team/references/team-plan.md +64 -0
  122. package/skills/nobrainer-tech-flow/SKILL.md +239 -0
  123. package/skills/nobrainer-tech-flow/VERSION +1 -0
  124. package/skills/nobrainer-tech-flow/references/autopilot.md +72 -0
  125. package/skills/nobrainer-tech-flow/references/codex-routing.md +21 -0
  126. package/skills/nobrainer-tech-flow/references/communication.md +108 -0
  127. package/skills/nobrainer-tech-flow/references/correction-hooks.md +110 -0
  128. package/skills/nobrainer-tech-flow/references/daily-update.md +28 -0
  129. package/skills/nobrainer-tech-flow/references/delivery.md +243 -0
  130. package/skills/nobrainer-tech-flow/references/idea-to-delivery.md +82 -0
  131. package/skills/nobrainer-tech-flow/references/long-run-state.md +209 -0
  132. package/skills/nobrainer-tech-flow/references/model-routing.md +83 -0
  133. package/skills/nobrainer-tech-flow/references/optional-decisions.md +83 -0
  134. package/skills/nobrainer-tech-flow/references/project-start.md +22 -0
  135. package/skills/nobrainer-tech-flow/references/routing.md +125 -0
  136. package/skills/nobrainer-tech-flow/references/setup.md +180 -0
  137. package/skills/nobrainer-tech-flow/references/worktrees.md +138 -0
  138. package/skills/nobrainer-tech-flow/scripts/check_flow_update.py +298 -0
  139. package/skills/nobrainer-tech-flow/scripts/cleanup_worktree.py +327 -0
  140. package/skills/nobrainer-tech-flow/scripts/decision_config.py +107 -0
  141. package/skills/nobrainer-tech-flow/scripts/flow_guard.py +252 -0
  142. package/skills/nobrainer-tech-flow/scripts/typed_decisions.py +210 -0
  143. package/skills/nobrainer-wiki/SKILL.md +164 -0
  144. package/skills/nobrainer-wiki/references/setup.md +88 -0
  145. package/skills/nobrainer-writing/SKILL.md +272 -0
  146. package/skills/nobrainer-writing/agents/openai.yaml +4 -0
  147. package/skills/nobrainer-writing/references/brief-artifacts.md +357 -0
  148. package/skills/nobrainer-writing/references/plain-technical-english.md +76 -0
  149. package/skills/nobrainer-writing/references/research.md +86 -0
@@ -0,0 +1,117 @@
1
+ # Move to nobrainer-tech-flow
2
+
3
+ Version **1.7.1** introduced an earlier display spelling.
4
+ The current display name is **nobrainer-tech-flow**; the repository,
5
+ public package/plugin identity and entry skill are `nobrainer-tech-flow`.
6
+ **From task to done.** Tell it what you need. nobrainer-tech-flow clarifies the goal,
7
+ does the work, and checks the result.
8
+
9
+ The canonical public repository identity is
10
+ [`nobrainer-tech/nobrainer-tech-flow`](https://github.com/nobrainer-tech/nobrainer-tech-flow)
11
+ and the product website is [nobrainer.tech/flow](https://nobrainer.tech/flow/).
12
+ The earlier 1.7.1 rename changed display/source routing. The 2.0.0
13
+ upgrade also changes the entry skill and public package/plugin identities.
14
+ Done still means the agreed criteria are met and the result is checked; missing
15
+ access or an unresolved decision can require an explicit unblock action.
16
+
17
+ ## Existing installation identities
18
+
19
+ The table below records the previous package identity for migration. Existing
20
+ registrations must be updated deliberately; a second package next to the old
21
+ one can cause duplicate routing.
22
+
23
+ | Surface | Previous identifier and migration |
24
+ |---|---|
25
+ | Existing package and Claude Code, Codex, Cursor, Kimi, Gemini and portable plugin IDs | `nobrainer-tech-skills` -> `nobrainer-tech-flow` after exact client readback |
26
+ | New public repository/package channel | `nobrainer-tech-flow` |
27
+ | Claude Code marketplace name | `nobrainer-tech` |
28
+ | Codex marketplace name | `nobrainer-tech-skills-dev` -> `nobrainer-tech` in 2.4.0 |
29
+ | OpenCode package entry prefix | `nobrainer-tech-skills@git+` -> `nobrainer-tech-flow@git+` at a reviewed immutable ref |
30
+ | OpenCode adapter module | `.opencode/plugins/nobrainer-tech-skills.js` |
31
+ | Pi extension module | `.pi/extensions/nobrainer-tech-skills.js` |
32
+ | Shared bootstrap marker | `NOBRAINER_BOOTSTRAP_V1` |
33
+ | Technical entrypoint and compatibility aliases | `$nobrainer-ultra` -> `$nobrainer-tech-flow`; old triggers are recognized only for migration |
34
+
35
+ If you added the Codex marketplace under its old name, remove it and add the
36
+ repository again; otherwise the old and new plugin stay enabled side by side:
37
+
38
+ ```sh
39
+ codex plugin remove nobrainer-tech-flow@nobrainer-tech-skills-dev
40
+ codex plugin marketplace remove nobrainer-tech-skills-dev
41
+ codex plugin marketplace add nobrainer-tech/nobrainer-tech-flow # or your reviewed checkout path
42
+ codex plugin add nobrainer-tech-flow@nobrainer-tech
43
+ ```
44
+
45
+ The previous skill directory list is historical. The reviewed migration renames
46
+ the entry skill and adds the calibration skill; do not overwrite a foreign
47
+ installed target to force the migration.
48
+
49
+ ```text
50
+ nobrainer-ultra
51
+ nobrainer-team
52
+ nobrainer-dispatcher
53
+ nobrainer-research
54
+ nobrainer-writing
55
+ nobrainer-build
56
+ nobrainer-security
57
+ nobrainer-sessions
58
+ nobrainer-spec-driven-development
59
+ nobrainer-wiki
60
+ nobrainer-browser
61
+ nobrainer-autoimprove
62
+ nobrainer-decide
63
+ nobrainer-rca
64
+ nobrainer-review
65
+ ```
66
+
67
+ These are frozen predecessor identities. Do not rewrite their old release
68
+ records. Current public installation has eighteen skills, including
69
+ `nobrainer-tech-flow` and `nobrainer-auto-fine-tune`.
70
+
71
+ ## Update the source in place
72
+
73
+ Use the client's supported upgrade mechanism. In OpenCode, change the old
74
+ package prefix to `nobrainer-tech-flow@git+` and use an immutable reviewed
75
+ commit pin. In plugin hosts, inspect the installed old ID and the new
76
+ registration before retiring anything; a new ID can coexist with the old
77
+ one and cause duplicate routing. Do not delete an unverified foreign target.
78
+
79
+ Existing local checkouts can keep their directory names. Installed symlinks may
80
+ point into that directory, so moving it is unnecessary. After confirming that
81
+ `origin` is this project's remote, its URL can be updated in place:
82
+
83
+ ```bash
84
+ git remote set-url origin https://github.com/nobrainer-tech/nobrainer-tech-flow.git
85
+ ```
86
+
87
+ The [current installation examples](INSTALL.md) require an exact reviewed
88
+ commit, validation and installer dry-run. `install_skills.py --migrate-legacy`
89
+ handles only a verified old symlink owned by the same checkout; a copied or
90
+ foreign old installation needs separate exact readback and a scoped migration.
91
+ The old path is never deleted merely because the new skill was installed.
92
+
93
+ The Reddit integration was retired from Flow. `install_skills.py`, its Python/npm
94
+ callers and `install.sh` preserve foreign `nobrainer-reddit` files, directories
95
+ and symlinks without blocking installation. The skill helper and shell installer
96
+ print `PRESERVED_FOREIGN`. Exact old links owned by this checkout still block
97
+ until migrated with `install_skills.py --migrate-legacy`. Foreign renamed aliases
98
+ such as `nb-flow` and unresolved legacy names still block installation to prevent
99
+ trigger conflicts.
100
+
101
+ After an update, read back the source commit and package identity, restart the
102
+ client and confirm that `nobrainer-tech-flow` loads once. A version change or an
103
+ installed file alone does not establish runtime compatibility.
104
+
105
+ ## Old links and evidence
106
+
107
+ The previous repository name is `nobrainer-tech/nobrainer-tech-skills` and the
108
+ previous website route is `/skills/`. Their redirects, including corresponding
109
+ deep links under `/flow/`, are separate publication checks. Do not remove an old
110
+ installation or rewrite historical evidence to compensate for a missing redirect.
111
+
112
+ Tagged releases, dated reviews, frozen evaluation payloads and their source hashes
113
+ retain the original names and links as provenance. This rename adds no model
114
+ performance, token-savings or cross-client runtime claim. See the
115
+ [1.7.1 release record](releases/v1.7.1.md) for the local verification boundary;
116
+ repository rename, website redirects and client update readback must be verified
117
+ in their own systems.
package/docs/NAMING.md ADDED
@@ -0,0 +1,39 @@
1
+ # nobrainer-tech-flow naming
2
+
3
+ This map separates the public product language from compatibility and source
4
+ identifiers. It is the canonical naming reference for maintained copy.
5
+
6
+ | Class | Use | Rule |
7
+ | --- | --- | --- |
8
+ | Product | nobrainer-tech-flow | Use this exact name in user-facing prose, status, headings and display copy. |
9
+ | Public repository/package channel | `nobrainer-tech-flow` | Use in repository links, new checkout paths and public source URLs. |
10
+ | Workflow skills | `nobrainer-build`, `nobrainer-research`, `nobrainer-review`, etc. | Name the specific skill when it explains which part of the workflow is doing the work. Preserve its exact lowercase kebab-case name and inline-code formatting. |
11
+ | Assistant conversation label | nobrainer-tech-flow | Do not open with a ritual entry announcement; mention the product or a specific skill only when it helps explain an action, constraint or result. |
12
+ | X hashtag | `#NoBrainerTechFlow` | Use this punctuation-free form when a real hashtag is useful. A hyphen ends an X hashtag, so never publish `#nobrainer-tech-flow` as the tag. |
13
+ | Legacy display name | Former display spellings | Preserve only in historical release evidence and compatibility metadata. Do not use it as the current product name in new prose. |
14
+ | Technical entry skill | `nobrainer-tech-flow` | Use for the skill directory, frontmatter name, installer target and the Codex entrypoint: `$nobrainer-tech-flow:nobrainer-tech-flow` where Codex lists the module under the plugin name, `$nobrainer-tech-flow` where it lists it plainly. |
15
+ | Retired entry name | `nobrainer-ultra` | Recognize only in migration notes for existing installations. Never direct a new user to invoke it. |
16
+ | Active phrases | `NBFlow`, `NBF`, `nobrainer-tech-flow` | Use in natural-language requests. Exact skill loading is the name the client lists for the module (in Codex `$nobrainer-tech-flow:nobrainer-tech-flow` or `$nobrainer-tech-flow`) when the client supports it; do not create alias directories. |
17
+ | Retired aliases | `nb-ultra`, `nb-flow`, `nb-workflow` | Preserve only in migration records for older installations. |
18
+ | Public package/plugin identity | `nobrainer-tech-flow` | Use in new package manifests, plugin IDs and installation examples. |
19
+ | Legacy package identity | `nobrainer-tech-skills` | Preserve only in migration guidance and old adapter module paths; update existing client registrations explicitly. |
20
+ | Historical evidence | Prior product/package forms | Keep in dated releases, evaluations, hashes and frozen fixtures when changing them would rewrite provenance. |
21
+
22
+ ## Propagation plan
23
+
24
+ The canonical source is updated first. Existing repository copies are then
25
+ handled through the reviewed synchronization workflow after the source change
26
+ is approved:
27
+
28
+ 1. inventory current consumer instruction files before propagation;
29
+ 2. classify each occurrence as maintained public text, technical identifier or
30
+ historical evidence;
31
+ 3. update only maintained public text and preserve managed blocks, local rules,
32
+ paths, aliases and technical identifiers;
33
+ 4. preview exact diffs and require per-repository dirty-state readback;
34
+ 5. apply through canonical synchronization, then run each repository's nearest
35
+ validator and record any owner-gated or conflicting checkout.
36
+
37
+ This PR changes the canonical source. Install and personalize clients only
38
+ after the owner reviews it; keep live client directories and caches untouched
39
+ until the exact reviewed release is available.
@@ -0,0 +1,9 @@
1
+ # Privacy for the nobrainer-tech-flow plugin
2
+
3
+ nobrainer-tech-flow distributes MIT-licensed skills, reference documents and local helpers. The package has no publisher-operated backend, telemetry or account requirement. Installing this plugin does not transmit your conversation, files or credentials to NoBrainer Tech.
4
+
5
+ Your AI client processes your task and may use its own tools under its permissions and privacy settings. Requested research can contact external sources. The optional release checker reads public GitHub release metadata; GitHub receives the ordinary network request. Optional Jev and Laya decision profiles remain off until you enable them with the required data and cost authority.
6
+
7
+ The npm installer writes local release files and managed client configuration only with an explicit --apply flag. Review the preview before applying. Its undo preserves unrelated files. Release files retained for stable installation are documented in INSTALL.md.
8
+
9
+ For questions or source issues, use https://github.com/nobrainer-tech/nobrainer-tech-flow/issues. Do not include private task data or credentials in public issues. The selected AI client's own terms and privacy policy govern that client's processing.
@@ -0,0 +1,70 @@
1
+ # Adaptive session restart
2
+
3
+ Automatic Flow startup care has shipped since v1.10.0 on top of the v1.8.1
4
+ restart protocol.
5
+
6
+ Invoke nobrainer-tech-flow with resumable, long or delegated work. Flow runs startup
7
+ naming and health assessment without a separate restart command; the quick path
8
+ skips it. Flow entry enables observation only: restarting MAIN or archiving needs
9
+ separately recorded owner consent. It preserves an existing `off` policy and obeys
10
+ stricter host consent rules. Installation or incidental skill loading alone authorizes no mutation.
11
+ Explicit automatic-restart consent remains valid for later rotations in scope;
12
+ archival needs its own recorded authorization. Ordinary delegation uses native
13
+ subagents; creating a separate visible conversation requires an explicit owner
14
+ request or an explicitly authorized MAIN restart.
15
+
16
+ On entry, supported clients name the session `<task title> | started DD-MM` using
17
+ its actual creation timestamp and owner/task timezone (recorded UTC fallback).
18
+ Resume preserves that date; a successor receives its own creation date. Missing
19
+ metadata is unavailable, never replaced with today's date. Supported mutations
20
+ are read back. Session IDs, goal identity and checkpoint digest remain authoritative.
21
+
22
+ Flow assesses available context measurements and the complete next startup,
23
+ including required skills, metadata, tools, checkpoint and necessary re-reads.
24
+ It records measured versus estimated inputs and keeps missing values unknown.
25
+ The agent performs the check at entry, after compaction and accepted milestones;
26
+ there is no new daemon or timer-only model call.
27
+
28
+ Health and economic benefit are independent reasons to rotate. A current pressure
29
+ signal or at least 70% observed context occupancy, together with a complete fresh
30
+ startup at most 80% of current input, qualifies the health path. Those are policy
31
+ heuristics, not measured optima. Remaining work, progress since the last restart,
32
+ verified checkpoint and safe native ownership transfer are still required.
33
+ Two compactions and optional daily age of 24 hours trigger assessment only.
34
+ A small post-compaction context or equally large startup can make continuing wiser.
35
+
36
+ Routine care stays quiet. Report one successful continuation or an actionable
37
+ capability failure. After takeover, compare observed startup and missing-context
38
+ rework with the estimate in the same task state.
39
+
40
+ The core is the [Sessions protocol](../skills/nobrainer-sessions/references/session-restart.md),
41
+ usable as instructions in any capable client. An optional deterministic helper
42
+ can be invoked by hooks. There is no universal hook event or universal archive
43
+ API: adapters must verify capabilities and map their actual lifecycle events.
44
+ A client without safe native transport prepares a manual continuation packet.
45
+
46
+ For the independent economic path, the helper calculates a conservative raw token proxy over at most three future
47
+ calls. Its defaults are heuristics, not an optimum or a billing forecast. Current
48
+ input, fresh startup and restart overhead can be observations or explicitly
49
+ labelled estimates. Missing metrics remain unknown. Large fixed instructions,
50
+ cache reuse and necessary re-reads may make restarting more expensive.
51
+
52
+ Quality is protected by checking the handoff before transfer, not by assuming
53
+ fresh sessions are smarter. Do not restart if acceptance, decisions or required
54
+ evidence cannot be reconstructed reliably. Do not archive the old session after
55
+ mere creation or a read-only ACK. Verify takeover first; archive failure never
56
+ returns implementation ownership to the old session.
57
+
58
+ ## Proof and remaining limits
59
+
60
+ The shipped helper is tested with real CLI invocations and deterministic failure
61
+ cases. It only chooses actions from supplied observations. It does not collect
62
+ usage, authenticate an ACK, implement a lock, run a model, create sessions or
63
+ archive them. Native transport requires separate adapter runtime evidence.
64
+ No all-client automation, token-saving percentage or quality improvement has
65
+ been measured for this feature.
66
+
67
+ No new permanent module, scheduler, background service or global hook is added.
68
+ Existing `nobrainer-sessions`, `session-handoff` and manual recovery stay available.
69
+ Disable further rotation with policy `off`; a committed transfer never permits
70
+ both old and new sessions to resume writing.
@@ -0,0 +1,124 @@
1
+ # Skill curation
2
+
3
+ The active product is deliberately small enough to understand and broad enough
4
+ to run a non-trivial project from intent to verified outcome. A skill belongs in
5
+ the permanent suite only when it owns a recurring cross-project boundary that
6
+ cannot live clearly inside another owner.
7
+
8
+ ## Admission test
9
+
10
+ A permanent skill must pass every condition:
11
+
12
+ 1. It has a distinct trigger and observable result.
13
+ 2. It is useful across projects without private paths or accounts; any client-specific capability has an explicit compatibility boundary.
14
+ 3. Loading it only when triggered saves more context and risk than embedding its
15
+ full protocol in Flow.
16
+ 4. Its behavior is not already owned by another active skill or a maintained
17
+ project/native capability.
18
+ 5. Its failure, stop, owner-gate and rollback behavior can be tested.
19
+ 6. It has a pressure scenario showing value and a non-trigger case preventing
20
+ overuse.
21
+
22
+ Popularity, file size and prior existence are not admission criteria.
23
+
24
+ ## Active eighteen
25
+
26
+ | Skill | Distinct owner |
27
+ |---|---|
28
+ | `nobrainer-tech-flow` | One request through brief requirements, concise progress, guarded execution, audit, recovery and learning. |
29
+ | `nobrainer-team` | Capability selection and bounded native assignments, installed capability inventory and safe temporary specialist discovery. |
30
+ | `nobrainer-dispatcher` | Ready-set calculation, dependency-aware bounded batches, backpressure and audited result routing. |
31
+ | `nobrainer-research` | Bounded current external research and source-quality/freshness control. |
32
+ | `nobrainer-writing` | High-signal drafting, compression, voice and prose integrity across human-facing text artifacts. |
33
+ | `nobrainer-build` | Implementation, engineering principles, anti-slop, test blast radius and simplification. |
34
+ | `nobrainer-security` | Threat model, security review, supply-chain inspection and security release evidence. |
35
+ | `nobrainer-sessions` | Exact visible session identity, transport, writer ownership, handoff, receive-audit and recovery. |
36
+ | `nobrainer-spec-driven-development` | Durable behavior contract and acceptance ledger when risk/dependencies justify it. |
37
+ | `nobrainer-wiki` | Setup, targeted retrieval, sourced capture and deterministic maintenance of durable knowledge. |
38
+ | `nobrainer-browser` | Rendered UI, bounded CDP profile restart, approved browser-session attach, browser tests and trace evidence. |
39
+ | `nobrainer-autoimprove` | Measured artifact improvement with baseline, holdout, budget and keep-or-revert. |
40
+ | `nobrainer-auto-fine-tune` | Calibrates native worker routes against verified host capability, quality, latency and cost evidence while MAIN retains the owner's model. |
41
+ | `nobrainer-decide` | One consequential decision after alternatives, scoring and adversarial attack. |
42
+ | `nobrainer-rca` | Read-only causal diagnosis of an observed failure. |
43
+ | `nobrainer-review` | Final acceptance/bug/release evidence gate and verified actionable findings. |
44
+ | `nobrainer-codex-context` | Project-local Codex instruction discovery, byte-budget audit, safe context-block setup and runtime readback. |
45
+ | `nobrainer-skill-doctor` | Cross-project audit of skills, project instructions and task prompts, with coverage, overlap and minimal portfolio repair planning. |
46
+
47
+ ## Boundaries that stay embedded
48
+
49
+ Do not create separate permanent skills for:
50
+
51
+ - planning, autopilot, general NoBrainer setup or correction capture: the Flow entry skill owns the lifecycle; Codex-specific project-context setup belongs to `nobrainer-codex-context`;
52
+ - visible goal/TODO progress: Flow owns one canonical plan and its compact view;
53
+ do not add a separate goal, todo or progress skill;
54
+ - KISS, DRY, SOLID, YAGNI, simplification or test safety: Build owns them;
55
+ - brand-specific voice facts belong in a project guide or wiki; Writing owns the
56
+ portable prose method and can consume an authentic supplied voice sample;
57
+ - generic code review, bug finding or release ceremony: Review owns the close
58
+ gate, while Security owns only material trust-boundary risk;
59
+ - human continuation snapshots: Sessions mode `handoff` owns them;
60
+ - a local skill catalogue: Team builds a metadata-only capability index;
61
+ - wiki add/get/tidy wrappers: Wiki exposes explicit modes;
62
+ - personal model presets, accounts or repository-specific configuration: keep
63
+ them in project/private instructions. A named host integration must justify
64
+ its recurring boundary and state its compatibility limits.
65
+
66
+ ## Dynamic specialist policy
67
+
68
+ Team resolves a capability gap in this order:
69
+
70
+ 1. curated NoBrainer skill;
71
+ 2. already installed and inspected specialist;
72
+ 3. maintained project/API/CLI/native capability;
73
+ 4. bounded current research;
74
+ 5. temporary external skill discovered for the exact missing capability.
75
+
76
+ External instructions are untrusted. Search rank does not authorize install,
77
+ scripts, credentials, network access or writes. Review immutable source/ref,
78
+ license, permissions, trigger overlap, persistence and rollback. Persistent or
79
+ global installation requires an owner gate and evidence that repeated use earns
80
+ the added trigger/context surface.
81
+
82
+ ## Retirement test
83
+
84
+ A skill can be removed only after:
85
+
86
+ - its unique behavior is intentionally preserved or explicitly rejected;
87
+ - inbound references and aliases are migrated;
88
+ - the replacement is installed and discovered in a clean session;
89
+ - representative old invocations route to the replacement;
90
+ - rollback points to an exact reviewed ref;
91
+ - no private operational contract is confused with a portable semantic
92
+ duplicate.
93
+
94
+ Same name or broad topic is not proof of duplication. Until the above gates
95
+ pass, classify candidates as `COVERED_NOT_RETIRED`, `PROJECT_SPECIFIC`,
96
+ `UNIQUE_VALUE`, `OBSOLETE_WITH_EVIDENCE` or `UNKNOWN`.
97
+
98
+ `nobrainer-fast-audit` is currently `UNKNOWN`, not a migration alias. Its exact
99
+ contract and callers must be audited before choosing Review, Security or another
100
+ owner. Keep an existing private installation unchanged until that audit and a
101
+ clean-session parity check pass; the public installer must report it as a normal
102
+ conflict rather than delete or silently remap it.
103
+
104
+ `nobrainer-reddit` is `RETIRED`: the
105
+ [portable-workflow curation](https://github.com/nobrainer-tech/nobrainer-tech-flow/commit/955de2a5cba72f86a9941a15c6ad9aa6b42c76d4)
106
+ removed the Reddit CLI as a client/account integration; no active skill owns its
107
+ functionality or trigger. `install_skills.py` and `install.sh` preserve foreign
108
+ targets at that name with `PRESERVED_FOREIGN`. Only exact old links from this
109
+ checkout remain migration candidates. Renamed/absorbed aliases retain blocking
110
+ conflict checks.
111
+
112
+ ## Change control
113
+
114
+ Any addition, merge or retirement updates together:
115
+
116
+ - `skills/`, aliases and installer migrations;
117
+ - validator and behavioral tests;
118
+ - Flow routing and setup instructions;
119
+ - README, compatibility and release notes;
120
+ - clean-session trigger/readback evidence.
121
+
122
+ Prefer strengthening an existing owner over creating a new noun. Do not keep an
123
+ empty alias skill for compatibility; aliases belong in descriptions and
124
+ migration maps.
@@ -0,0 +1,232 @@
1
+ # Testing and evaluation
2
+
3
+ The repository uses four evidence layers. A green lower layer never proves a
4
+ higher one.
5
+
6
+ ## 1. Structure and public safety
7
+
8
+ - portable frontmatter, directory/name identity and exact active inventory;
9
+ - relative companion links and retired-name exclusion;
10
+ - public-clean text, manifest parsing and version consistency;
11
+ - installer conflict refusal, foreign retired-name preservation, exact legacy
12
+ migration, idempotence, readback, race-safe atomic restore and
13
+ preserved migration/rollback recovery claims;
14
+ - secret scanning before publication.
15
+
16
+ Run:
17
+
18
+ ```bash
19
+ python3 scripts/validate_skills.py
20
+ python3 scripts/validate_skills.py --suite
21
+ ```
22
+
23
+ ## 2. Deterministic behavior contracts
24
+
25
+ Unit tests pressure the routing, model-policy and safety invariants that can be
26
+ checked without an LLM: Flow states, bounded-turn `SESSION_HEALTH_GATE`,
27
+ checkpoint/end-turn decisions, separate `RUNTIME_RELEASE`, session identity and
28
+ lease gates, SDD boundaries, trigger ownership, browser routing, adapter
29
+ registration and installer races.
30
+ Adapter tests execute every bootstrap mechanism that can run locally: the Claude
31
+ and Cursor SessionStart JSON shapes, OpenCode injection/deduplication (including
32
+ a first message without a text part), and Pi discovery plus per-request
33
+ injection. They also parse the portable Agent
34
+ Plugin, Gemini and Kimi manifests, reject invented Devin/Hermes adapters and
35
+ enforce the exact eighteen-skill inventory, correction hooks and workflow
36
+ diagram contract.
37
+
38
+ Static delegation contract checks cover ready-unit dispatch, the compact native
39
+ packet, completion-driven refill and uncertain-send safeguards in the
40
+ [canonical delegation contract](../skills/nobrainer-tech-flow/references/delivery.md#coordinated-team-execution).
41
+ These source checks do not prove native worker launches, accepted runtime output,
42
+ or any speed, token or quality gain. Those require a recorded client run.
43
+
44
+ ```bash
45
+ python3 -m unittest discover -s tests -v
46
+ ```
47
+
48
+ ### Session-lifetime smoke
49
+
50
+ [`tests/test_session_lifecycle.py`](../tests/test_session_lifecycle.py) is a
51
+ deterministic, model-free protocol smoke. It covers the nominal clean-session
52
+ trace, each health-gate event, configurable warning/hard limits, unknown and
53
+ unsupported signals with safe bounded continuation, strict-budget refusal, checkpoint plus `END_TURN` without authorized rotation,
54
+ `task_complete` with a live controlled worker followed by explicit release, and
55
+ empty-ready-set handling: wait for running work, audit reports, finish accepted
56
+ work, or surface a real owner decision. It also
57
+ proves that resume reads the durable Markdown goal instead of stale summary
58
+ text, and that host clear requires capability, no active writer and positive
59
+ readback; otherwise the contract ends the turn or requires manual action. It does
60
+ not prove that Codex, Claude Code,
61
+ OpenCode or another host exposes those signals; that requires the clean-session
62
+ readback below.
63
+
64
+ GitHub Actions runs these deterministic layers on Linux and macOS, and the whole
65
+ suite once more on Python 3.13 (a symlink-loop check that relied on an exception
66
+ Python 3.13 no longer raises went unnoticed on 3.11). It checks
67
+ Python, Node and shell syntax plus deterministic adapter contracts, and runs a
68
+ checksum-pinned Gitleaks tree scan on Linux. A Windows job runs the structure
69
+ validators, the adapter tests (including the LF pins for the hook scripts and the
70
+ bootstrap), [`tests/test_windows_smoke.py`](../tests/test_windows_smoke.py):
71
+ the hook wrapper under Git Bash, a copy-mode install, personalization and the UTC
72
+ session title, and both one-command installers,
73
+ [`tests/test_one_command_installer.py`](../tests/test_one_command_installer.py)
74
+ and [`tests/test_shell_installer.py`](../tests/test_shell_installer.py) (the shell
75
+ one under Git Bash), previewing, installing, repeating and undoing on that runner.
76
+ CI sets `NOBRAINER_REQUIRE_SYMLINKS=1`, so a runner that cannot create links fails
77
+ those tests instead of skipping them. It does not run the whole suite on Windows:
78
+ some historical evidence tests compare text byte for byte and assume LF checkouts.
79
+ CI does not claim a client UI or model followed a skill.
80
+
81
+ The one-command installer tests run the real scripts against a private home:
82
+ preview writes nothing, apply links every skill and writes one block without any
83
+ standing authorization, a second apply changes nothing, undo puts the instruction
84
+ file back byte for byte (and keeps edits made outside the block since), a foreign
85
+ canonical target is refused before any write, and the variables and `--home`
86
+ select the same place the helpers do. The shell installer's tests also run it in
87
+ every POSIX shell found (dash, bash in POSIX mode, busybox sh, zsh emulating sh), with no Python on
88
+ its `PATH`, and check that its block is byte for byte the Python helper's, that
89
+ either installer undoes what the other did with the same bytes, and that a
90
+ tampered setup record is refused. Both installers preserve foreign targets at
91
+ retired names through preview, apply, repeat and undo, while exact old links,
92
+ renamed aliases and unresolved legacy names still block. Shell tests compare
93
+ exact-link classification with Python for absolute, relative, chained and looping
94
+ links in every available shell. They also check that a second undo is a no-op
95
+ that writes nothing, that undo removes the empty folders the setup created and no
96
+ others, that a repeat apply says `UP TO DATE` without a restart hint, and that
97
+ `install.sh` replaces a block of an earlier version while every byte around it
98
+ stays. In the 2.0.2 measurement they caught 30 of 34
99
+ mutants of `install.sh`; the [2.0.2 record](releases/v2.0.2.md) says why the
100
+ other four were not caught.
101
+
102
+ ## 3. Forward behavior evaluation
103
+
104
+ Historical v1.6 runtime receipts bind the frozen source archive, not a changing
105
+ checkout. The test rejects missing, duplicate or altered archived entries and
106
+ continues checking the original case and output hashes. A later instruction
107
+ review is source-contract evidence unless fresh model runs are recorded for its
108
+ exact bytes; it cannot upgrade the release's runtime proof.
109
+
110
+ Behavior-shaping changes need a frozen scenario set, an unchanged baseline and
111
+ an independent judge. Keep development cases separate from final holdout cases;
112
+ do not tune against a failed holdout. Record accepted findings, null results,
113
+ digest, rollback and any model/harness substitutions.
114
+
115
+ Before baseline scoring, self-test the complete evaluator with known-good and
116
+ known-bad controls plus a deceptive control when the metric can be gamed.
117
+ Candidate writes must not reach the rubric, cases, score extractor or acceptance
118
+ harness. Bind each score to target/evaluator/case identities and raw evidence;
119
+ changed receipt fields require re-baselining. Predeclare equal repetitions for
120
+ stochastic comparisons and require at least three paired runs for a borderline
121
+ promotion claim.
122
+
123
+ The [v1.6.1 evidence](releases/v1.6.1.md) records fresh response simulations
124
+ and actual artifact execution, including failed behavioral gates. No measured
125
+ model-quality promotion is accepted. Artifact integrity and score arithmetic
126
+ are checked independently of those behavioral verdicts.
127
+
128
+ The v1.6 probes and their source bindings are in
129
+ [`releases/v1.6.0.md`](releases/v1.6.0.md). Source-only contract tests and
130
+ one behavioral trial are not a comparative benchmark. Earlier changed-control records are
131
+ [`evals/v1.3.0-harness-clarity-2026-08-30.md`](evals/v1.3.0-harness-clarity-2026-08-30.md),
132
+ [`evals/dispatcher-routing-v1.2.0-2026-08-28.md`](evals/dispatcher-routing-v1.2.0-2026-08-28.md)
133
+ and
134
+ [`evals/writing-density-v1.2.0-2026-08-28.md`](evals/writing-density-v1.2.0-2026-08-28.md).
135
+ The broader v1.1 routing baseline remains in
136
+ [`evals/core-routing-v1.1.0-2026-08-28.md`](evals/core-routing-v1.1.0-2026-08-28.md).
137
+ Do not mix scores across changed inventories, prompts or rubrics.
138
+
139
+ ## 4. Client runtime acceptance
140
+
141
+ A client becomes runtime-verified only after a clean-session transcript proves
142
+ discovery and correct first actions. Follow
143
+ [`COMPATIBILITY.md`](COMPATIBILITY.md). Marketplace publication, production
144
+ behavior and buyer usefulness each require their own readback.
145
+
146
+ For a long-running probe, read back `SESSION_HEALTH_GATE` at `START`,
147
+ `AFTER_COMPACTION`, `MATERIAL_TRANSITION` and `BEFORE_CLOSEOUT`, including the
148
+ host policy and actual signal values. Read back `RUNTIME_RELEASE` separately;
149
+ `task_complete` is not evidence that task-owned browser, tool or subprocess
150
+ workers ended. A missing capability is `UNKNOWN` or `UNSUPPORTED`, lowers the
151
+ runtime proof, and must not be reported as a clean-runtime pass. Missing optional telemetry
152
+ does not block safe artifact delivery; missing enforcement of an explicitly
153
+ required hard budget blocks only work that depends on that guarantee.
154
+ Native goals are optional and require the host tool's authorization; a Markdown
155
+ goal is sufficient. Before a host clear, persist and read back `GOAL_FILE`, verify no task-owned
156
+ writer remains, record `CLEAR_MODE`, then prove clear completion. Start a fresh
157
+ turn by reading the same goal file and reconciling repository, checkout, state
158
+ and next safe action; transcript text alone is not recovery evidence.
159
+
160
+ For Codex, test explicit invocation with the name the client lists for the module
161
+ (`$nobrainer-tech-flow:nobrainer-tech-flow` when it lists modules under the plugin
162
+ name, `$nobrainer-tech-flow` when it lists them plainly; the other form adds no
163
+ module text) and test plain aliases separately as implicit-routing controls. Bind
164
+ the transcript to the exact installed skill hash and disable same-name user copies
165
+ in an isolated probe; two skills with the same name are not merged. An alias
166
+ failure must not be reported as a source-isolated behavior result.
167
+
168
+ Model-policy tests prove the portable `STANDARD`, `EXTENDED` and `ROUTED`
169
+ contract, including the no-silent-switch rule. They do not prove that a client
170
+ actually selects a provider model. That requires a clean-session readback of
171
+ requested versus actual model, effort, budget and escalation behavior.
172
+
173
+ ## Release gate
174
+
175
+ A releasable commit requires:
176
+
177
+ - all deterministic checks green on the exact commit;
178
+ - no unresolved P0/P1 review finding;
179
+ - a public-clean and secret scan;
180
+ - a recorded behavior holdout for changed workflow controls;
181
+ - a review-failure scenario proving the route returns to Build with invalidated
182
+ evidence;
183
+ - a public-surface coherence check: every affected README, doc, template and
184
+ diagram is updated and read back, or `NOT_NEEDED` is recorded with a reason;
185
+ flow changes refresh both the SVG and README Mermaid chart;
186
+ - honest compatibility labels;
187
+ - model names and marketing remain workflow-positioning claims unless direct
188
+ runtime evidence exists;
189
+ - a rollback path;
190
+ - owner approval for merge and publication.
191
+
192
+ Scan the exact staged candidate with:
193
+
194
+ ```bash
195
+ gitleaks git --pre-commit --staged --redact --no-banner --ignore-gitleaks-allow
196
+ ```
197
+
198
+ A full-history finding is a separate history-remediation decision. Investigate
199
+ it explicitly; do not hide it behind a broad allowlist or treat it as proof that
200
+ the staged candidate introduced a secret.
201
+
202
+ ## Session restart
203
+
204
+ `tests/test_restart_gate.py` invokes the shipped helper rather than a test-only
205
+ copy. It covers startup-cost payback, unknown economics, repeated restart without
206
+ progress, consent, unknown writers, stale checkpoints/ACKs, uncertain transport,
207
+ unsupported transfer and archive/takeover ordering. These are decision-level
208
+ tests; no real session is created or archived by the helper.
209
+
210
+ Native-adapter acceptance additionally requires an actual fresh target, visible
211
+ read-only ACK, authoritative conditional transfer, target takeover and exact old
212
+ session archive readback. Include a competing trigger and interrupted create.
213
+ Measure accepted work and total input/output/compaction/recovery usage before
214
+ and after; deterministic decisions do not establish token or quality gains.
215
+
216
+
217
+ ## 2.1.0 idea intake and plain technical English
218
+
219
+ The [2.1.0 record](releases/v2.1.0.md) separates instruction review, bounded
220
+ same-session writing exercises, repository tests and public release readback.
221
+ The baseline already followed an explicitly requested SDD/end-to-end path;
222
+ this release does not claim a measured behavioral gain from making it explicit.
223
+ A formal ASD-STE100 audit, clean-session client discovery and comparative model
224
+ cost/speed tests remain outside this evidence.
225
+
226
+
227
+ ## 2.2.0 presentation and closeout
228
+
229
+ The [2.2.0 record](releases/v2.2.0.md) binds fresh Codex/Claude print runs to
230
+ the exact communication reference and retains synthetic prompts and responses.
231
+ These are explicit-source behavior slices. Host-executed artifact checks do not
232
+ prove automatic discovery or autonomous whole-task execution in either client.