ahead-pi 0.2.0 → 0.2.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.
Files changed (40) hide show
  1. package/README.md +13 -3
  2. package/generated/product-change/ai-audit.md +6 -3
  3. package/generated/product-change/ai-review.md +6 -3
  4. package/generated/product-change/decision.md +6 -3
  5. package/generated/product-change/define.md +6 -3
  6. package/generated/product-change/deploy.md +6 -3
  7. package/generated/product-change/human-review.md +6 -3
  8. package/generated/product-change/implement.md +11 -4
  9. package/generated/product-change/manifest.json +2 -2
  10. package/generated/product-change/options.md +6 -3
  11. package/generated/product-change/outcome.md +6 -3
  12. package/generated/product-change/plan.md +6 -3
  13. package/generated/product-change/questions.md +6 -3
  14. package/generated/product-change/research.md +6 -3
  15. package/generated/product-change/verify.md +6 -3
  16. package/generated/reference/CONSTITUTION.md +43 -0
  17. package/generated/reference/docs/acceptable-ai-use.md +217 -0
  18. package/generated/reference/docs/design/debugging-and-operations.md +119 -0
  19. package/generated/reference/docs/design/executable-workflows.md +110 -0
  20. package/generated/reference/docs/design/process-taxonomy.md +144 -0
  21. package/generated/reference/docs/engineering-practice.md +163 -0
  22. package/generated/reference/docs/evidence/evidence-standard.md +123 -0
  23. package/generated/reference/docs/evidence/research-map.md +98 -0
  24. package/generated/reference/docs/rationale.md +210 -0
  25. package/generated/reference/docs/references/pragmatic-programmer-page-index.md +113 -0
  26. package/generated/reference/docs/references/submitted-engineering-notes.md +306 -0
  27. package/generated/reference/docs/releasing-pi.md +89 -0
  28. package/generated/reference/docs/workflows/README.md +142 -0
  29. package/generated/reference/docs/workflows/corrective-debugging.md +203 -0
  30. package/generated/reference/docs/workflows/decision.md +149 -0
  31. package/generated/reference/docs/workflows/internal-improvement.md +207 -0
  32. package/generated/reference/docs/workflows/investigation.md +159 -0
  33. package/generated/reference/docs/workflows/operational-stabilization.md +185 -0
  34. package/generated/reference/docs/workflows/product-change.md +205 -0
  35. package/generated/reference/index.json +180 -0
  36. package/package.json +4 -2
  37. package/src/guidance.ts +6 -4
  38. package/src/index.ts +128 -0
  39. package/src/reference-viewer.ts +71 -0
  40. package/src/reference.ts +56 -0
@@ -0,0 +1,113 @@
1
+ # *The Pragmatic Programmer* Page Index
2
+
3
+ Status: submitted source notes
4
+
5
+ ## Edition and use
6
+
7
+ This index preserves the page-level provenance from the original AHEAD engineering-practice notes for:
8
+
9
+ > David Thomas and Andrew Hunt, *The Pragmatic Programmer: Your Journey to Mastery*, 20th Anniversary Edition, ISBN 9780135957059.
10
+
11
+ Page numbers are edition-specific and may not match an ebook or another printing. The titles and locators below are the submitter's reading notes, retained so AHEAD's distilled guidance remains traceable. They are not presented as scientific evidence; the [research map](../evidence/research-map.md) separately records empirical support.
12
+
13
+ Two submitted locators look like transcription errors but are intentionally preserved pending a check against the physical edition:
14
+
15
+ - tips 1 and 2 use `xlx`, which is not standard Roman-numeral notation;
16
+ - tip 40 uses p. 15, although it occurs between notes for pp. 151 and 156.
17
+
18
+ ## Tip locators
19
+
20
+ | No. | Submitted tip title | Page |
21
+ |---:|---|---:|
22
+ | 1 | Care About Your Craft | xlx |
23
+ | 2 | Think! About Your Work | xlx |
24
+ | 3 | Provide Options, Don't Make Lame Excuses | 3 |
25
+ | 4 | Don't Live With Broken Windows | 5 |
26
+ | 5 | Be a Catalyst for Change | 8 |
27
+ | 6 | Remember the Big Picture | 8 |
28
+ | 7 | Make Quality a Requirements Issue | 11 |
29
+ | 8 | Invest Regularly in Your Knowledge Portfolio | 14 |
30
+ | 9 | Critically Analyze What You Read and Hear | 16 |
31
+ | 10 | It's Both What You Say and the Way You Say It | 21 |
32
+ | 11 | DRY—Don't Repeat Yourself | 27 |
33
+ | 12 | Make It Easy to Reuse | 33 |
34
+ | 13 | Eliminate Effects Between Unrelated Things | 35 |
35
+ | 14 | There Are No Final Decisions | 46 |
36
+ | 15 | Use Tracer Bullets to Find the Target | 49 |
37
+ | 16 | Prototype to Learn | 54 |
38
+ | 17 | Program Close to the Problem Domain | 58 |
39
+ | 18 | Estimate to Avoid Surprises | 64 |
40
+ | 19 | Iterate the Schedule with the Code | 69 |
41
+ | 20 | Keep Knowledge in Plain Text | 74 |
42
+ | 21 | Use the Power of Command Shells | 80 |
43
+ | 22 | Use a Single Editor Well | 85 |
44
+ | 23 | Always Use Source Code Control | 88 |
45
+ | 24 | Fix the Problem, Not the Blame | 91 |
46
+ | 25 | Don't Panic When Debugging | 91 |
47
+ | 26 | “select” Isn't Broken | 96 |
48
+ | 27 | Don't Assume It—Prove It | 97 |
49
+ | 28 | Learn a Text Manipulation Language | 100 |
50
+ | 29 | Write Code That Writes Code | 103 |
51
+ | 30 | You Can't Write Perfect Software | 107 |
52
+ | 31 | Design with Contracts | 111 |
53
+ | 32 | Crash Early | 120 |
54
+ | 33 | Use Assertions to Prevent the Impossible | 122 |
55
+ | 34 | Use Exceptions for Exceptional Problems | 127 |
56
+ | 35 | Finish What You Start | 129 |
57
+ | 36 | Minimize Coupling Between Modules | 140 |
58
+ | 37 | Configure, Don't Integrate | 144 |
59
+ | 38 | Put Abstractions in Code, Details in Metadata | 145 |
60
+ | 39 | Analyze Workflow to Improve Concurrency | 151 |
61
+ | 40 | Design Using Services | 15 |
62
+ | 41 | Always Design for Concurrency | 156 |
63
+ | 42 | Separate Views from Model | 161 |
64
+ | 43 | Use Blackboards to Coordinate Workflow | 169 |
65
+ | 44 | Don't Program by Coincidence | 175 |
66
+ | 45 | Estimate the Order of Your Algorithms | 181 |
67
+ | 46 | Test Your Estimates | 182 |
68
+ | 47 | Refactor Early, Refactor Often | 186 |
69
+ | 48 | Design to Test | 192 |
70
+ | 49 | Test Your Software, or Your Users Will | 197 |
71
+ | 50 | Don't Use Wizard Code You Don't Understand | 199 |
72
+ | 51 | Don't Gather Requirements—Dig for Them | 202 |
73
+ | 52 | Work with a User to Think Like a User | 204 |
74
+ | 53 | Abstractions Live Longer than Details | 209 |
75
+ | 54 | Use a Project Glossary | 210 |
76
+ | 55 | Don't Think Outside the Box—Find the Box | 213 |
77
+ | 56 | Start When You're Ready | 215 |
78
+ | 57 | Some Things Are Better Done than Described | 218 |
79
+ | 58 | Don't Be a Slave to Formal Methods | 220 |
80
+ | 59 | Costly Tools Don't Produce Better Designs | 222 |
81
+ | 60 | Organize Team Around Functionality | 227 |
82
+ | 61 | Don't Use Manual Procedures | 231 |
83
+ | 62 | Test Early. Test Often. Test Automatically. | 237 |
84
+ | 63 | Coding Ain't Done 'Til All the Tests Run | 238 |
85
+ | 64 | Use Saboteurs to Test Your Testing | 244 |
86
+ | 65 | Test State Coverage, Not Code Coverage | 245 |
87
+ | 66 | Find Bugs Once | 247 |
88
+ | 67 | English Is Just a Programming Language | 248 |
89
+ | 68 | Build Documentation In, Don't Bolt It On | 249 |
90
+ | 69 | Gently Exceed Your Users' Expectations | 255 |
91
+ | 70 | Sign Your Work | 258 |
92
+
93
+ ## Checklist locators
94
+
95
+ | Submitted checklist | Page |
96
+ |---|---:|
97
+ | The Wisdom Acrostic | 20 |
98
+ | How to Maintain Orthogonality | 34 |
99
+ | Things to Prototype | 53 |
100
+ | Architectural Questions | 55 |
101
+ | Debugging Checklist | 98 |
102
+ | Law of Demeter for Functions | 141 |
103
+ | How to Program Deliberately | 172 |
104
+ | When to Refactor | 185 |
105
+ | Cutting the Gordian Knot | 212 |
106
+
107
+ The submitted “Aspects of Testing” checklist did not include a page locator, so this index does not invent one.
108
+
109
+ The complete submitted checklist bodies and the additional post-Pragmatic tips and practices are retained in the [submitted engineering notes](submitted-engineering-notes.md).
110
+
111
+ ## Maintenance rule
112
+
113
+ When AHEAD guidance derived from these notes is reorganized or condensed, retain the page-level reference either at the point of use or through a link to this index. If a locator is corrected against the referenced print edition, record the correction in the commit rather than silently replacing the submitted value.
@@ -0,0 +1,306 @@
1
+ # Submitted Engineering Notes
2
+
3
+ Status: submitted source notes
4
+
5
+ ## Purpose and provenance
6
+
7
+ This document preserves submitted engineering tips, checklists, and practices that are intentionally condensed in the [AHEAD Engineering Practice](../engineering-practice.md) guide. It is a source record, not a claim that every item is an experimentally validated rule.
8
+
9
+ Tips 1–70 and their submitted page locators from *The Pragmatic Programmer* are retained in the [edition-specific page index](pragmatic-programmer-page-index.md). Their accompanying submitted meanings are retained below, followed by the additional tips and the full submitted checklist and practice content. The submitted language-learning list is intentionally omitted.
10
+
11
+ ## *The Pragmatic Programmer* tip notes
12
+
13
+ The page index is authoritative for the submitted locators. These concise notes preserve the submitted meaning associated with each title.
14
+
15
+ | No. | Submitted meaning |
16
+ |---:|---|
17
+ | 1 | Care about doing software development well. |
18
+ | 2 | Turn off autopilot; continually critique and appraise the work. |
19
+ | 3 | Offer viable options instead of excuses or an unsupported claim that something cannot be done. |
20
+ | 4 | Correct bad designs, wrong decisions, and poor code when they are found. |
21
+ | 5 | Catalyze change by showing people a possible future and helping them participate in creating it. |
22
+ | 6 | Keep checking the larger context rather than becoming trapped in implementation detail. |
23
+ | 7 | Involve users in deciding the quality the project actually requires. |
24
+ | 8 | Make continuous learning a regular investment. |
25
+ | 9 | Critically evaluate vendor claims, media, received wisdom, and dogma in the context of the actual project. |
26
+ | 10 | Effective communication depends on both the idea and how it is expressed. |
27
+ | 11 | Give each piece of knowledge one unambiguous, authoritative representation, while avoiding premature abstraction; use the rule of three as a judgment prompt rather than dogma. |
28
+ | 12 | Create an environment in which reuse is easy. |
29
+ | 13 | Design self-contained, independent components with a single well-defined purpose. |
30
+ | 14 | Treat decisions as revisable and plan for change. |
31
+ | 15 | Use tracer implementations to test direction and progressively find the target. |
32
+ | 16 | Treat prototypes as learning artifacts whose value lies in lessons rather than retained code. |
33
+ | 17 | Design and code using the language of the problem domain and its users. |
34
+ | 18 | Estimate before starting so potential problems become visible early. |
35
+ | 19 | Refine schedules with the experience gained during implementation. |
36
+ | 20 | Preserve knowledge in plain text so it remains portable, inspectable, testable, and debuggable. |
37
+ | 21 | Use command shells when graphical interfaces do not provide enough leverage. |
38
+ | 22 | Learn one configurable, extensible, programmable editor deeply enough that it becomes an extension of the hand. |
39
+ | 23 | Always use source control so work and decisions can be recovered and revisited. |
40
+ | 24 | Focus on fixing the problem rather than assigning blame. |
41
+ | 25 | Do not panic while debugging; stop and think about plausible causes. |
42
+ | 26 | Bugs are more often in the application than in foundational tools, but likelihood is not proof. |
43
+ | 27 | Test assumptions in the real environment with realistic data and boundary conditions. |
44
+ | 28 | Learn a text-manipulation language so repetitive text work can be automated. |
45
+ | 29 | Use code generation to improve consistency and reduce duplicated mechanics. |
46
+ | 30 | Perfect software is impossible; protect code and users from inevitable errors. |
47
+ | 31 | Use contracts to state and verify what code promises and requires. |
48
+ | 32 | Fail early when continuing would cause more damage or hide the real fault. |
49
+ | 33 | Use assertions to validate assumptions and prevent impossible states from proceeding unnoticed. |
50
+ | 34 | Reserve exceptions for exceptional conditions so control flow remains readable and maintainable. |
51
+ | 35 | Where possible, make the code that acquires a resource responsible for releasing it. |
52
+ | 36 | Minimize coupling and follow the principle of least knowledge. |
53
+ | 37 | Express technology choices as configuration rather than baking them into unrelated implementation. |
54
+ | 38 | Put general abstractions in code and variable details in metadata. |
55
+ | 39 | Analyze user workflows to find genuine opportunities for concurrency. |
56
+ | 40 | Design around independent, concurrent services behind consistent interfaces. |
57
+ | 41 | Designing for concurrency can produce cleaner interfaces with fewer timing assumptions. |
58
+ | 42 | Separate models from views where useful; this principle is broader than the MVC pattern. |
59
+ | 43 | Use blackboards to coordinate facts and agents while preserving their independence and isolation. |
60
+ | 44 | Do not rely on accidental behavior or confuse coincidence with deliberate design. |
61
+ | 45 | Estimate algorithmic order before implementation to understand likely scaling behavior. |
62
+ | 46 | Mathematical estimates are incomplete; measure behavior in the target environment. |
63
+ | 47 | Refactor early and repeatedly when the system needs it, addressing the underlying problem rather than its surface arrangement. |
64
+ | 48 | Think about testing before implementation so the design is observable and testable; this does not mandate or reject test-driven development. |
65
+ | 49 | Test aggressively rather than relying on users to discover defects. |
66
+ | 50 | Do not incorporate generated or wizard-produced code that the engineer does not understand. |
67
+ | 51 | Discover requirements beneath assumptions, misconceptions, and organizational pressures rather than merely collecting surface statements. |
68
+ | 52 | Work with users to understand how the system will actually be used. |
69
+ | 53 | Invest in stable abstractions rather than transient implementation details. |
70
+ | 54 | Maintain one authoritative glossary for project-specific vocabulary. |
71
+ | 55 | When a problem appears impossible, identify the real constraints and question whether the assumed method or task is necessary. |
72
+ | 56 | Respect accumulated experience and unresolved doubts when deciding whether the work is ready to begin. |
73
+ | 57 | Avoid an endless specification spiral; some understanding emerges only by doing the work. |
74
+ | 58 | Evaluate formal methods in the context of the team's practices and capabilities rather than following them blindly. |
75
+ | 59 | Expensive tools and vendor prestige do not guarantee better designs; judge tools on their merits. |
76
+ | 60 | Organize teams around delivered functionality instead of isolating design, coding, testing, and data work. |
77
+ | 61 | Replace repeatable manual procedures with inspectable automation that executes consistently. |
78
+ | 62 | Run automated tests early and frequently, preferably with every build. |
79
+ | 63 | Coding is not complete until all required tests run. |
80
+ | 64 | Deliberately introduce defects in an isolated copy to verify that tests can detect them. |
81
+ | 65 | Test significant program states, not only executed lines. |
82
+ | 66 | Preserve a reliable automated regression check after a human discovers a defect. |
83
+ | 67 | Treat documentation like code by applying authoritative sources, metadata, separation of model and view, and generation where useful. |
84
+ | 68 | Keep documentation close to the system so it is less likely to become incorrect or stale. |
85
+ | 69 | Understand user expectations and then exceed them gently rather than surprising users with unrequested complexity. |
86
+ | 70 | Take accountable pride in the work and be willing to sign it. |
87
+
88
+ ## Additional tips
89
+
90
+ ### 71. Create simple solutions, not easy ones
91
+
92
+ Take time to find the simplest solution. The easy solution may use a familiar tool or pattern, but familiarity can conceal complexity and deprive the engineer of learning.
93
+
94
+ Source: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
95
+
96
+ ### 72. KISS — Keep It Simple, Stupid
97
+
98
+ Simplicity is the ultimate sophistication. Simpler solutions are generally easier to understand, maintain, and extend.
99
+
100
+ Source: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
101
+
102
+ ### 73. The Locality of Behavior principle
103
+
104
+ The behavior of a unit of code should be as obvious as possible from that unit. Separation of concerns may favor splitting behavior into separate pieces, while locality of behavior may favor keeping the tasks for a feature or component together. Some designs can satisfy both; others require an explicit tradeoff.
105
+
106
+ No external source locator was included with this submitted note.
107
+
108
+ ### 74. Judge tools by the artifacts they produce
109
+
110
+ Do not choose a language, library, framework, or pattern only because it is pleasant or familiar to use. Judge it by the long-lived software it helps create: reliability, changeability, debuggability, and the incidental complexity it leaves behind.
111
+
112
+ Source: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
113
+
114
+ ### 75. Avoid complecting independent concerns
115
+
116
+ Complexity comes from braiding together things that could be reasoned about independently. Watch for value tied to time, function tied to state, policy tied to mechanism, meaning tied to order, and implementation details leaking across boundaries.
117
+
118
+ Source: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
119
+
120
+ ### 76. Isolate state
121
+
122
+ State ties value to time. Keep mutable state explicit, minimal, and behind interfaces that let the rest of the system work with stable values when possible.
123
+
124
+ Source: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
125
+
126
+ ### 77. Prefer values, data, and functions
127
+
128
+ Prefer immutable values, plain data, functions, queues, set operations, declarative queries, and explicit rules where they fit. These can create simpler artifacts than objects, mutable variables, inheritance, loops, object-relational mapping, and scattered conditionals.
129
+
130
+ Source: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
131
+
132
+ ### 78. Modular does not automatically mean simple
133
+
134
+ Separate files, classes, modules, or services can still be deeply entangled. The real test is whether each part needs to know only stable abstractions rather than the hidden details or assumptions of other parts.
135
+
136
+ Source: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
137
+
138
+ ### 79. Tests are guardrails, not steering
139
+
140
+ Tests and type checkers help catch mistakes, but they do not replace design clarity or reasoning. A production defect already passed the checks that existed, so the program must remain simple enough to understand.
141
+
142
+ Source: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
143
+
144
+ ## Submitted checklists
145
+
146
+ ### The Wisdom Acrostic
147
+
148
+ - **W**hat do you want them to learn?
149
+ - What is their **I**nterest in what you have to say?
150
+ - How **S**ophisticated are they?
151
+ - How much **D**etail do they want?
152
+ - Whom do you want to **O**wn the information?
153
+ - How can you **M**otivate them to listen?
154
+
155
+ Submitted locator: *The Pragmatic Programmer*, p. 20.
156
+
157
+ ### How to maintain orthogonality
158
+
159
+ - Design independent, well-defined components.
160
+ - Keep code decoupled.
161
+ - Avoid global data.
162
+ - Refactor similar functions.
163
+
164
+ Submitted locator: *The Pragmatic Programmer*, p. 34.
165
+
166
+ ### Things to prototype
167
+
168
+ - Architecture.
169
+ - New functionality in an existing system.
170
+ - The structure or contents of external data.
171
+ - Third-party tools or components.
172
+ - Performance issues.
173
+ - User-interface design.
174
+
175
+ The submitted note emphasizes that prototype code is intended to be thrown away and may be fully vibe coded under the AHEAD disposable-prototype policy.
176
+
177
+ Submitted locator: *The Pragmatic Programmer*, p. 53.
178
+
179
+ ### Architectural questions
180
+
181
+ - Are responsibilities well defined?
182
+ - Are collaborations well defined?
183
+ - Is coupling minimized?
184
+ - Can potential duplication be identified?
185
+ - Are interface definitions and constraints acceptable?
186
+ - Can modules access the data they need when they need it?
187
+
188
+ Submitted locator: *The Pragmatic Programmer*, p. 55.
189
+
190
+ ### Simplicity and complecting review
191
+
192
+ - Is this design simple, or only easy because it is familiar?
193
+ - What concepts are tied together that could vary independently?
194
+ - What incidental complexity are we accepting from the selected tools, libraries, frameworks, or patterns?
195
+ - Can this part be understood without loading the rest of the system into your head?
196
+ - Is state explicit, minimized, and isolated?
197
+ - Are policies and rules gathered somewhere clear, or scattered through unrelated code paths?
198
+ - Are we choosing this approach for authoring convenience or for the quality of the artifact it creates?
199
+ - Do tests support our reasoning, or are we depending on them to compensate for unclear design?
200
+
201
+ Source: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
202
+
203
+ ### Abstraction questions
204
+
205
+ - What is the operation or capability?
206
+ - Who owns the data or entity?
207
+ - How is the implementation separated from the interface?
208
+ - When does this happen, and is timing unnecessarily coupled to the caller?
209
+ - Where does this run, and is location unnecessarily coupled to the caller?
210
+ - Why does this rule or policy exist, and can it be represented declaratively?
211
+
212
+ Source: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
213
+
214
+ ### Debugging checklist
215
+
216
+ - Is the reported problem a direct result of the underlying defect, or merely a symptom?
217
+ - Is the defect really in the compiler, operating system, or another platform component—or is it in the application? Treat likelihood as a starting point and prove the conclusion.
218
+ - If you explained the problem in detail to a coworker, what would you say? Rubber-duck debugging can help make the model explicit.
219
+ - If the suspect code passes its unit tests, are the tests complete enough? What happens with different data?
220
+ - Do the conditions that caused this defect exist elsewhere in the system?
221
+
222
+ Submitted locator: *The Pragmatic Programmer*, p. 98. The submitted note also references [Rubber Duck Debugging](https://rubberduckdebugging.com/).
223
+
224
+ ### Law of Demeter for functions
225
+
226
+ An object's method should call only methods belonging to:
227
+
228
+ - itself;
229
+ - parameters passed to it;
230
+ - objects it creates;
231
+ - its component objects.
232
+
233
+ Submitted locator: *The Pragmatic Programmer*, p. 141.
234
+
235
+ ### How to program deliberately
236
+
237
+ - Stay aware of what you are doing.
238
+ - Do not code blindfolded.
239
+ - Proceed from a plan.
240
+ - Rely only on reliable things.
241
+ - Document assumptions.
242
+ - Test assumptions as well as code.
243
+ - Prioritize effort.
244
+ - Do not be a slave to history.
245
+
246
+ Submitted locator: *The Pragmatic Programmer*, p. 172.
247
+
248
+ ### When to refactor
249
+
250
+ - A violation of the DRY principle is discovered.
251
+ - Things could be made more orthogonal.
252
+ - Knowledge improves.
253
+ - Requirements evolve.
254
+ - Performance needs improvement.
255
+
256
+ Submitted locator: *The Pragmatic Programmer*, p. 185.
257
+
258
+ ### Cutting the Gordian knot
259
+
260
+ When a problem appears impossible, ask:
261
+
262
+ - Is there an easier way?
263
+ - Am I solving the right problem?
264
+ - Why is this a problem?
265
+ - What makes it hard?
266
+ - Must it be done this way?
267
+ - Must it be done at all?
268
+
269
+ Submitted locator: *The Pragmatic Programmer*, p. 212.
270
+
271
+ ### Aspects of testing
272
+
273
+ - Unit testing.
274
+ - Integration testing.
275
+ - Validation and verification.
276
+ - Resource exhaustion, errors, and recovery.
277
+ - Performance testing.
278
+ - Usability testing.
279
+ - Testing the tests themselves.
280
+
281
+ No page locator was included with this submitted checklist.
282
+
283
+ ## Submitted practices
284
+
285
+ ### Simplicity pass before implementation
286
+
287
+ - Before building a long-lived feature, separate concerns that do not need to be tied together.
288
+ - Prefer more small, straight, independent pieces over fewer pieces tied into a knot.
289
+ - Name the parts representing problem complexity and those representing incidental complexity.
290
+
291
+ ### Complexity ledger
292
+
293
+ - For meaningful design decisions, record the benefit, byproducts, what the choice ties together, and why the tradeoff is acceptable.
294
+ - Revisit the ledger when the system becomes difficult to change or debug.
295
+
296
+ ### Quarantine state
297
+
298
+ - Make mutable state rare, named, easy to find, and surrounded by a simpler interface.
299
+ - Do not pass mutable references through the system when a stable value will do.
300
+
301
+ ### Disentangle during refactoring
302
+
303
+ - Trace what is tied together, identify the separate concerns, and separate one concern at a time.
304
+ - Refactoring should reduce what a reader must hold in mind rather than merely moving code into different files.
305
+
306
+ Source for these submitted practices: Rich Hickey, [*Simple Made Easy*](https://www.youtube.com/watch?v=SxdOUGdseq4), Strange Loop 2011.
@@ -0,0 +1,89 @@
1
+ # Releasing the Pi Extension
2
+
3
+ Status: publishing path v0.1
4
+
5
+ ## Contract
6
+
7
+ - npm package: `ahead-pi`
8
+ - package source: `integrations/pi`
9
+ - release workflow: `.github/workflows/publish-pi.yml`
10
+ - release tag: `pi-v<package-version>`
11
+ - stable npm dist-tag: `latest`
12
+ - prerelease npm dist-tag: `next`
13
+ - registry: `https://registry.npmjs.org`
14
+
15
+ The package name was unclaimed when this path was created. Availability is not ownership until the first version is published.
16
+
17
+ ## Human release gate
18
+
19
+ Publishing is triggered only by publishing a GitHub Release whose tag starts with `pi-v`. The workflow rejects a tag that does not exactly match `integrations/pi/package.json`, rejects a release commit that is not contained in `main`, rebuilds from source, runs the complete test and packed-install smoke suite, and then publishes with npm provenance.
20
+
21
+ The job uses the GitHub `npm` environment. Configure that environment with a required reviewer if releases need an explicit second confirmation.
22
+
23
+ AHEAD is released under the MIT License. The repository license file and each published package must declare the same license.
24
+
25
+ ## Prepare a version
26
+
27
+ From `integrations/pi`:
28
+
29
+ ```sh
30
+ npm version --no-git-tag-version <version>
31
+ npm test
32
+ node ./scripts/check-release.mjs pi-v<version>
33
+ ```
34
+
35
+ Commit the version change, merge it to `main`, and confirm CI. Do not create the release from an unmerged commit.
36
+
37
+ ## Bootstrap the first npm release
38
+
39
+ This machine was not authenticated to npm when the workflow was created, and npm trusted publishing is configured from an existing package's settings. The first publication therefore needs a short-lived bootstrap credential:
40
+
41
+ 1. Create or select an npm account with 2FA enabled.
42
+ 2. Create a granular npm access token that can publish the new public package and is permitted to bypass 2FA for automation.
43
+ 3. Store it as `NPM_TOKEN` in the GitHub `npm` environment. Do not put it in repository files, shell history, workflow logs, or release notes.
44
+ 4. On GitHub, create and publish a release with tag `pi-v0.1.0` at the corresponding `main` commit.
45
+ 5. Verify the workflow, npm package page, provenance, and a clean `pi -e npm:ahead-pi@0.1.0` install.
46
+
47
+ The workflow has `id-token: write` and publishes with `--provenance`. Before trusted publishing exists, npm uses the bootstrap token and GitHub OIDC supplies the provenance attestation.
48
+
49
+ ## Move to tokenless trusted publishing
50
+
51
+ The `ahead-pi` package uses this trusted publisher:
52
+
53
+ | npm field | Value |
54
+ |---|---|
55
+ | Provider | GitHub Actions |
56
+ | Organization or user | `Kade-Powell` |
57
+ | Repository | `ahead` |
58
+ | Workflow filename | `publish-pi.yml` |
59
+ | Environment | `npm` |
60
+ | Allowed action | `npm publish` |
61
+
62
+ The GitHub `npm` environment must not contain an `NPM_TOKEN` secret. npm publishing access requires 2FA, disallows bypass-2FA tokens, and keeps the trusted publisher. Each release verifies tokenless OIDC authentication and automatic provenance.
63
+
64
+ ## Publish and verify
65
+
66
+ 1. Publish a GitHub Release with tag `pi-v<version>` at the version commit.
67
+ 2. Watch the `Publish Pi extension` workflow.
68
+ 3. Confirm `npm view ahead-pi@<version> version` returns the release.
69
+ 4. Confirm the package page links to this repository and shows provenance.
70
+ 5. Test the registry artifact:
71
+
72
+ ```sh
73
+ pi -e npm:ahead-pi@<version>
74
+ ```
75
+
76
+ 6. For stable releases, confirm `npm view ahead-pi dist-tags.latest`; for prereleases, confirm `dist-tags.next`.
77
+
78
+ ## Failure and rollback
79
+
80
+ An npm version is immutable. Do not reuse a version after any publish attempt.
81
+
82
+ - If validation fails before `npm publish`, fix the source, increment the version if a registry publish may have occurred, and publish a new GitHub Release.
83
+ - If publication succeeds but post-publish verification fails, do not rerun the same version blindly. Inspect the registry first.
84
+ - Correct a bad release with a new patch version. Use npm deprecation for a discoverable warning; reserve unpublishing for the narrow cases allowed by npm policy.
85
+ - Moving a dist-tag is a human release decision and does not alter the immutable tarball.
86
+
87
+ ## Why npm and OIDC
88
+
89
+ Pi natively installs `npm:ahead-pi`, pinned npm versions, Git sources, and local paths. npm provides the simplest cross-machine install path. GitHub-hosted OIDC avoids a long-lived release secret after bootstrap, and npm provenance links the public tarball to this repository and workflow. Neither provenance nor a passing workflow proves the package is safe; they make origin and build history auditable.
@@ -0,0 +1,142 @@
1
+ # AHEAD Pilot Workflows
2
+
3
+ Status: pilot v0.1
4
+
5
+ ## Purpose
6
+
7
+ These six minimal workflow profiles are meant to be used on real engineering work before AHEAD builds a workflow engine, editor extension, or CI enforcement. They are deliberately small. The pilot should reveal which phases, gates, and records improve reasoning and which create process burden.
8
+
9
+ The profiles are:
10
+
11
+ 1. [Product change](product-change.md)
12
+ 2. [Corrective debugging](corrective-debugging.md)
13
+ 3. [Operational stabilization](operational-stabilization.md)
14
+ 4. [Decision](decision.md)
15
+ 5. [Investigation](investigation.md)
16
+ 6. [Internal improvement](internal-improvement.md)
17
+
18
+ Choose the flow by its dominant outcome, not by the issue label. Incident, emergency, security, regulatory, and other concerns are overlays or modifiers.
19
+
20
+ ## Rule hierarchy
21
+
22
+ The pilot applies rules in this order:
23
+
24
+ 1. [AHEAD Constitution](../../CONSTITUTION.md)
25
+ 2. [Acceptable AI Use](../acceptable-ai-use.md)
26
+ 3. The selected workflow profile and applicable overlays
27
+ 4. Organization and repository guidance, which may narrow but not broaden AI authority
28
+
29
+ Phase permission is not a waiver of higher-level policy. When rules appear to conflict, apply the more protective rule and record the ambiguity for correction.
30
+
31
+ ## Shared pilot contract
32
+
33
+ Every pilot run has:
34
+
35
+ - one accountable human owner;
36
+ - a stated outcome or question;
37
+ - a selected workflow and relevant modifiers;
38
+ - a human-originated initial understanding before AI expansion;
39
+ - links to material evidence rather than unsupported summaries;
40
+ - visible facts, inferences, unknowns, decisions, and accepted risks;
41
+ - recorded AI contributions when they materially influence the work;
42
+ - human authorization for consequential actions;
43
+ - independent human review where a lasting change is produced;
44
+ - outcome evidence and a human closure decision.
45
+
46
+ Phases may loop or reopen. A workflow is not invalid merely because learning changes an earlier decision or plan. The record should make the change visible.
47
+
48
+ ## Common human gates
49
+
50
+ | Gate | Required when | Minimum evidence |
51
+ |---|---|---|
52
+ | Framing accepted | Every run | Human-owned outcome, question, failure, or invariant |
53
+ | Decision accepted | A course or intervention is selected | Chosen option, rationale, tradeoffs, unknowns, and accountable human |
54
+ | Plan accepted | Before a lasting implementation | Human first-pass plan plus accepted AI challenges or additions |
55
+ | Action authorized | Before a consequential, risky, destructive, or production action | Actor, purpose, scope, blast radius, rollback or containment, and authorization |
56
+ | Independent human review accepted | Before accepting a lasting engineering change | Review of the current changeset and material evidence by a person other than the implementer; both implementer and reviewer understand their responsibilities |
57
+ | Outcome accepted | Before closure | Verification against the original outcome plus remaining uncertainty and follow-ups |
58
+
59
+ Emergency policy may defer nonessential documentation and, where explicitly allowed, independent review needed to restore service. It does not remove authorization or accountability, and any deferred review gate remains open until a named human completes it after stabilization. Deferred reasoning is reconstructed after stabilization.
60
+
61
+ ## Minimal run record
62
+
63
+ For the pilot, keep one Markdown file per run. A team can place it in `.ahead/runs/<id>.md`, an issue, or another durable system as long as links and revision history remain available.
64
+
65
+ ```yaml
66
+ id: AHEAD-YYYY-NNNN
67
+ title: Short description
68
+ workflow: product-change | corrective-debugging | operational-stabilization | decision | investigation | internal-improvement
69
+ owner: human identity
70
+ status: active | blocked | complete | abandoned
71
+ modifiers:
72
+ urgency: normal | expedited | incident | emergency
73
+ assurance: standard | security | regulated | safety-critical
74
+ environment: local | test | staging | production | external
75
+ links: []
76
+ ```
77
+
78
+ The body records only the sections required by the selected flow. Evidence may remain in its native system and be linked rather than copied.
79
+
80
+ ## Shared human–AI rhythm
81
+
82
+ Diagram language is normative for the pilot:
83
+
84
+ - `HUMAN` or `ENGINEER` means the person owns the reasoning, decision, action, or artifact.
85
+ - `AI — ASSIST` means AI may research, organize, propose, explain, generate bounded material, or challenge; it does not own or approve the phase.
86
+ - `AI REVIEW` is an additional review and never satisfies a human-review gate.
87
+ - Every decision, test selection, risk acceptance, consequential-action authorization, final review, and outcome gate is human.
88
+ - All diagram permissions remain bounded by the rule hierarchy above. Humans lead and remain accountable; AI assists.
89
+
90
+ ```text
91
+ ┌──────────────────────────────────────────────┐
92
+ │ HUMAN FRAMES THE WORK │
93
+ │ • Outcome, question, failure, or invariant │
94
+ │ • Initial understanding │
95
+ └──────────────────────┬───────────────────────┘
96
+
97
+ ┌──────────────────────────────────────────────┐
98
+ │ AI — ASSISTS, AMPLIFIES, AND CHALLENGES │
99
+ │ • Research • alternatives • hypotheses │
100
+ │ • Gaps • contradictions • risks │
101
+ └──────────────────────┬───────────────────────┘
102
+
103
+ ┌──────────────────────────────────────────────┐
104
+ │ HUMAN UNDERSTANDS AND DECIDES │
105
+ │ • Evaluate evidence • accept tradeoffs │
106
+ │ • Resolve or accept important unknowns │
107
+ └──────────────────────┬───────────────────────┘
108
+
109
+ ┌──────────────────────────────────────────────┐
110
+ │ HUMAN PLANS OR AUTHORIZES ACTION │
111
+ └──────────────────────┬───────────────────────┘
112
+
113
+ ┌──────────────────────────────────────────────┐
114
+ │ ENGINEER ACTS WITH BOUNDED AI ASSISTANCE │
115
+ └──────────────────────┬───────────────────────┘
116
+
117
+ ┌──────────────────────────────────────────────┐
118
+ │ AI REVIEW / ANALYSIS │
119
+ └──────────────────────┬───────────────────────┘
120
+
121
+ ┌──────────────────────────────────────────────┐
122
+ │ HUMAN REVIEWS AND ACCEPTS THE OUTCOME │
123
+ └──────────────────────┬───────────────────────┘
124
+
125
+ RECORD EVIDENCE AND LEARNING
126
+
127
+ Questions remain ───────────────↺ AI assistance
128
+ Outcome not accepted ───────────↺ Work / investigation
129
+ ```
130
+
131
+ ## Pilot feedback
132
+
133
+ For each completed run, record:
134
+
135
+ - which phase or gate prevented a mistake or improved understanding;
136
+ - which required record was unused or burdensome;
137
+ - where the team could not agree on routing or completion;
138
+ - where AI helped, anchored, distracted, or weakened learning;
139
+ - what was reconstructed after the fact;
140
+ - what the eventual engine should enforce, warn about, or leave to judgment.
141
+
142
+ These profiles are AHEAD design hypotheses. Using them is how AHEAD will learn whether the six-flow taxonomy and its gates deserve stronger enforcement.