alignfirst 0.4.0 → 0.6.0-preview.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/README.md +54 -2
- package/dist/cli.js +2 -1
- package/dist/commands/config.js +15 -4
- package/dist/commands/context.js +23 -3
- package/dist/commands/docmap.js +4 -1
- package/dist/commands/doctor.js +27 -4
- package/dist/commands/guide.js +6 -6
- package/dist/commands/plans.js +18 -15
- package/dist/commands/sync.js +5 -5
- package/dist/commands/ticket.js +22 -19
- package/dist/context.d.ts +2 -0
- package/dist/conventions.js +11 -9
- package/dist/format.d.ts +2 -0
- package/dist/format.js +8 -0
- package/dist/plans/archive.d.ts +8 -2
- package/dist/plans/archive.js +41 -17
- package/dist/plans/catchup.js +12 -10
- package/dist/plans/layout.d.ts +4 -7
- package/dist/plans/layout.js +10 -14
- package/dist/plans/link.d.ts +1 -1
- package/dist/plans/link.js +8 -6
- package/dist/plans/mode.d.ts +3 -1
- package/dist/plans/mode.js +11 -7
- package/dist/plans/ticket.d.ts +7 -4
- package/dist/plans/ticket.js +30 -20
- package/dist/project-config.d.ts +4 -3
- package/dist/project-config.js +7 -9
- package/dist/project-layout.d.ts +30 -0
- package/dist/project-layout.js +174 -0
- package/package.json +3 -3
- package/templates/guide/code-review/correctness-reviewer.md +1 -0
- package/templates/guide/code-review/quality-reviewer.md +1 -0
- package/templates/guide/code-review/reviewer-common.md +2 -0
- package/templates/guide/core.md +1 -1
- package/templates/guide/protocols/aad.md +24 -17
- package/templates/guide/protocols/description.md +8 -8
- package/templates/guide/protocols/merge.md +5 -5
- package/templates/guide/protocols/plan.md +59 -70
- package/templates/guide/protocols/spec.md +44 -37
|
@@ -2,92 +2,85 @@
|
|
|
2
2
|
|
|
3
3
|
## Prerequisites
|
|
4
4
|
|
|
5
|
-
### Determine TICKET_DIR and the Spec File
|
|
6
|
-
|
|
7
5
|
You need:
|
|
8
6
|
|
|
9
7
|
- the TICKET_DIR and ticket directory context — run `{{TICKET_CMD}}` once (`{{CMD}} ticket --side` for a side ticket, when there is no ticket)
|
|
10
8
|
- a **spec file** in the TICKET_DIR
|
|
11
9
|
|
|
12
|
-
|
|
10
|
+
Without a spec file, stop and ask the user.
|
|
13
11
|
|
|
14
12
|
## Phases
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
Read the spec file entirely before starting. Then plan in six phases, in this order:
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
1. **Investigation**: explore the codebase and check the spec against it.
|
|
17
|
+
2. **Analysis**: decide the plan structure, single or multiple, and collect the documentation and skills.
|
|
18
|
+
3. **Plan Design**: design each plan.
|
|
19
|
+
4. **Main Plan Design**: with multiple plans, design the main plan that coordinates them.
|
|
20
|
+
5. **Writing**: write the plan files.
|
|
21
|
+
6. **Review**: reread the plans critically and improve them.
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
2. **Analysis**: Determine the plan structure (single or multiple plans) and identify relevant documentation and skills
|
|
22
|
-
3. **Plan Design**: Design plan(s) based on the analysis - If you discover issues or missing design decisions, STOP AND ASK THE USER
|
|
23
|
-
4. **Main Plan Design**: If multiple plans, design a main plan to coordinate them
|
|
24
|
-
5. **Writing**: Write the plan file(s)
|
|
25
|
-
6. **Review**: Critically review and improve the plan(s)
|
|
23
|
+
One rule holds across all phases: an important design decision the spec leaves open, or a spec that is wrong or contradicts the code, stops the protocol. Ask the user. A plan is executed by an agent that trusts it, often while the user is away.
|
|
26
24
|
|
|
27
25
|
## Phase 1. Investigation
|
|
28
26
|
|
|
29
|
-
|
|
27
|
+
Your context lists the available **documentation** and **skills**. Read every document and skill that applies to any aspect of the task, and the relevant references of each skill. A familiar-looking task tempts you to skip this reading; the project conventions live in these files.
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
Find the relevant source code. Take the time to understand how it works today and what has to change.
|
|
32
30
|
|
|
33
|
-
|
|
31
|
+
The spec is the starting point, and it was written against an earlier state of the code. Verify each statement against the current implementation.
|
|
34
32
|
|
|
35
|
-
For each operation in the spec, search for existing
|
|
33
|
+
For each operation in the spec, search for an existing function that does a similar job.
|
|
36
34
|
|
|
37
35
|
## Phase 2. Analysis
|
|
38
36
|
|
|
39
|
-
Based on your investigation, determine the plan structure:
|
|
40
|
-
|
|
41
37
|
### 2.1 Assess Work Scopes
|
|
42
38
|
|
|
43
|
-
|
|
39
|
+
Prefer a single plan when the work fits one session, especially when it stays within one area.
|
|
44
40
|
|
|
45
|
-
|
|
46
|
-
- **Multiple specialized plans with a main plan**: Split the work when it is complex, based on:
|
|
47
|
-
- **Distinct logical units**: When large enough, separate features or modules within the same stack
|
|
48
|
-
- **Stack boundaries**: Different technologies or specialization areas (if custom agents are defined, their descriptions can help identify these boundaries)
|
|
49
|
-
- Each specialized plan should produce a **coherent deliverable**
|
|
41
|
+
Split complex work into specialized plans, coordinated by a main plan. Split along:
|
|
50
42
|
|
|
51
|
-
|
|
43
|
+
- **Distinct logical units**: separate features or modules, each large enough to stand alone
|
|
44
|
+
- **Stack boundaries**: different technologies or specialization areas. The descriptions of custom agents, when some are defined, help find these boundaries.
|
|
45
|
+
|
|
46
|
+
Each specialized plan produces a coherent deliverable.
|
|
52
47
|
|
|
53
|
-
Identify
|
|
48
|
+
### 2.2 Identify Relevant Documentation and Skills
|
|
54
49
|
|
|
55
|
-
|
|
56
|
-
- For complex skills with reference files, identify specific files that should be loaded
|
|
50
|
+
List the documentation and skills the implementing agent must read and follow. Exclude `alignfirst` from the skills. For a skill with reference files, name the files to load. Omit the list when nothing applies.
|
|
57
51
|
|
|
58
52
|
## Phase 3. Plan Design
|
|
59
53
|
|
|
60
|
-
Design
|
|
54
|
+
Design each plan from the spec. Reuse the parts of the spec that are detailed enough, and add what the spec lacks: implementation details, file paths, a breakdown into steps.
|
|
61
55
|
|
|
62
56
|
### 3.1 Plan Content Guidelines
|
|
63
57
|
|
|
64
|
-
|
|
58
|
+
These guidelines apply to every plan, single or specialized.
|
|
59
|
+
|
|
60
|
+
The plan is a **self-explanatory prompt** for the coding agent. That agent starts from zero: tell it what you discovered.
|
|
65
61
|
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
- List **existing functions to reuse or refactor**. Plan thin wrappers, not re-implementations. Each operation should have one proper place.
|
|
62
|
+
- Give context: how it works today, and how it will work after the task.
|
|
63
|
+
- In a "Prerequisites" section, list the relevant documentation and skills. Do not repeat their content.
|
|
64
|
+
- Give a way to find the **important source files**: file paths, or a function name to search for. Line numbers are fine in a plan.
|
|
65
|
+
- Give **numbered steps**.
|
|
66
|
+
- List the **existing functions to reuse or refactor**. Plan thin wrappers, not re-implementations: each operation has one proper place.
|
|
67
|
+
- Plan a clean break. Unused code is removed. Backward compatibility appears only when the user asked for it.
|
|
68
|
+
- **Tests**: look first for existing tests of the kind you consider. Plan tests only when they fit the project's test setup.
|
|
69
|
+
- Leave out sections that add no actionable information: "Benefits", "Code Style Compliance", "Rationale", and the like.
|
|
75
70
|
|
|
76
71
|
### 3.2 Single Plan Format
|
|
77
72
|
|
|
78
73
|
_Use this when writing a single plan. Skip this section for multiple plans._
|
|
79
74
|
|
|
80
|
-
A single plan has no header with assignment, documentation, or skills
|
|
75
|
+
A single plan has no header with assignment, documentation, or skills. They are listed in the Prerequisites section within the plan body.
|
|
81
76
|
|
|
82
77
|
### 3.3 Specialized Plan Format
|
|
83
78
|
|
|
84
79
|
_Use this when writing multiple plans. Skip this section for a single plan._
|
|
85
80
|
|
|
86
|
-
|
|
81
|
+
**At the top of each specialized plan**, add a header. Include only the fields that have content. One agent can be assigned to several plans, as separate instances.
|
|
87
82
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
_Note: "Custom agent" refers to configured agent profiles in your environment (e.g., custom agents in Copilot, custom subagents in Claude Code). If your environment doesn't support this, ignore the "Assigned to" field._
|
|
83
|
+
_Note: "Custom agent" refers to configured agent profiles in your environment (custom agents in Copilot, custom subagents in Claude Code). Ignore the "Assigned to" field when your environment has none._
|
|
91
84
|
|
|
92
85
|
Example:
|
|
93
86
|
|
|
@@ -101,23 +94,23 @@ Example:
|
|
|
101
94
|
- **Skills**: `skill-a`, `skill-b`
|
|
102
95
|
```
|
|
103
96
|
|
|
104
|
-
**In the context section**, explain what you discovered **
|
|
97
|
+
**In the context section**, explain what you discovered **within this plan's scope**: how it works today and how it will work after the task.
|
|
105
98
|
|
|
106
|
-
**In the numbered steps**, include only
|
|
99
|
+
**In the numbered steps**, include only this plan's work. Each plan is self-contained.
|
|
107
100
|
|
|
108
|
-
**Coordination notes**:
|
|
101
|
+
**Coordination notes**: when this plan depends on another plan, say so explicitly.
|
|
109
102
|
|
|
110
103
|
### 3.4 Add a Final Step to Plans
|
|
111
104
|
|
|
112
|
-
|
|
105
|
+
For every plan, single or specialized, add a final step named "Write a Handover Document" with this content:
|
|
113
106
|
|
|
114
107
|
```markdown
|
|
115
|
-
Write a **handover document
|
|
108
|
+
Write a **handover document** for your teammates. List every file you updated, then summarize the changes very concisely. Keep only what helps a teammate understand what is new; leave out the obvious. When there is nothing to explain, explain nothing. Create its path by replacing the final `.md` in `{PLAN_FILE_PATH}` with `.summary.md`, then write the handover there. Ignore lint errors (formatting issues) in this file. At the end, give the path of this handover file to the user.
|
|
116
109
|
```
|
|
117
110
|
|
|
118
111
|
Note:
|
|
119
112
|
|
|
120
|
-
- This is a regular step,
|
|
113
|
+
- This is a regular step, numbered like the others. A plan with 5 steps gets this one as step 6.
|
|
121
114
|
- Replace "{PLAN_FILE_PATH}" with the complete plan file path, such as `.plans/123/A2-plan-backend.md`. Its handover path is `.plans/123/A2-plan-backend.summary.md`.
|
|
122
115
|
|
|
123
116
|
### 3.5 Common Footer for All Plans
|
|
@@ -129,21 +122,21 @@ Add the following content to the very end of each plan:
|
|
|
129
122
|
|
|
130
123
|
Do not trust this plan blindly. Be sure you understand the codebase and the plan by yourself before applying it.
|
|
131
124
|
|
|
132
|
-
|
|
125
|
+
Do not use external search tools (Context7, web search, documentation fetching) during implementation unless this plan explicitly allows it. Everything needed is in this plan or discoverable in the codebase.
|
|
133
126
|
```
|
|
134
127
|
|
|
135
128
|
## Phase 4. Main Plan Design
|
|
136
129
|
|
|
137
|
-
**Create a main plan only when
|
|
130
|
+
**Create a main plan only when there are several plans. Skip this section otherwise.**
|
|
138
131
|
|
|
139
132
|
### 4.1 Main Plan Guidelines
|
|
140
133
|
|
|
141
|
-
The main plan coordinates the execution of
|
|
134
|
+
The main plan coordinates the execution of the specialized plans. It contains:
|
|
142
135
|
|
|
143
|
-
1. **Reference to the specification**:
|
|
144
|
-
2. **Execution strategy** section:
|
|
145
|
-
3. **Plan assignments** section:
|
|
146
|
-
4. **Main Handover Document** section
|
|
136
|
+
1. **Reference to the specification**: mention the spec file; do not repeat its content.
|
|
137
|
+
2. **Execution strategy** section: parallel or sequential, with the dependencies stated.
|
|
138
|
+
3. **Plan assignments** section: for each specialized plan, the applicable fields only: assignment, documentation, skills, and a brief description.
|
|
139
|
+
4. **Main Handover Document** section.
|
|
147
140
|
|
|
148
141
|
Format example:
|
|
149
142
|
|
|
@@ -177,7 +170,7 @@ Execute these specialized plans:
|
|
|
177
170
|
- `docs/topic-b/doc-3.md`
|
|
178
171
|
- **Description**: [Brief description]
|
|
179
172
|
|
|
180
|
-
|
|
173
|
+
_In the prompt given to the subagent tool, provide the file path of the specialized plan. Do not reproduce its content._
|
|
181
174
|
|
|
182
175
|
### Coordination Notes
|
|
183
176
|
|
|
@@ -185,12 +178,10 @@ _**Important:** In the prompt you give to the subagent tool, do not reproduce th
|
|
|
185
178
|
|
|
186
179
|
## Main Handover Document
|
|
187
180
|
|
|
188
|
-
Write a **main plan handover document**. This document
|
|
181
|
+
Write a **main plan handover document**. This document:
|
|
189
182
|
|
|
190
|
-
1.
|
|
191
|
-
2. For each referenced handover
|
|
192
|
-
- State "Completed" if the plan was executed successfully
|
|
193
|
-
- Detail any issues encountered during execution
|
|
183
|
+
1. References each specialized plan's handover file
|
|
184
|
+
2. For each referenced handover, states "Completed" when the plan was executed successfully, and details any issue encountered otherwise
|
|
194
185
|
|
|
195
186
|
Keep this handover very short. Do not combine or repeat the content of individual handovers. Create its path by replacing the final `.md` in `{PLAN_FILE_PATH}` with `.summary.md`, then write the handover there. Ignore lint errors (formatting issues) in this file.
|
|
196
187
|
|
|
@@ -198,7 +189,7 @@ Keep this handover very short. Do not combine or repeat the content of individua
|
|
|
198
189
|
|
|
199
190
|
Do not trust this plan blindly. Be sure you understand the codebase and all specialized plans before coordinating their execution.
|
|
200
191
|
|
|
201
|
-
|
|
192
|
+
Do not use external search tools (Context7, web search, documentation fetching) during implementation unless these plans explicitly allow it. Everything needed is in these plans or discoverable in the codebase.
|
|
202
193
|
````
|
|
203
194
|
|
|
204
195
|
Note:
|
|
@@ -224,21 +215,19 @@ Continue the current cycle. Request the file names with `{{TICKET_CMD}} --next`,
|
|
|
224
215
|
- Specialized plans: `{TICKET_DIR}{CYCLE_LETTER}{FILE_NUMBER}-plan-{DESCRIPTOR}.md`, e.g. `.plans/123/A3-plan-api.md`, `.plans/123/A4-plan-ui.md`. The descriptor is lowercase and hyphenated and names the work scope or stack area.
|
|
225
216
|
- Handovers: replace the final `.md` with `.summary.md`, e.g. `.plans/123/A3-plan-api.summary.md`. The main plan handover is written after all specialized plans complete.
|
|
226
217
|
|
|
227
|
-
|
|
218
|
+
Ignore Markdown lint errors in the plan files. Fixing them wastes the session.
|
|
228
219
|
|
|
229
220
|
## Phase 6. Review
|
|
230
221
|
|
|
231
|
-
When you think the
|
|
232
|
-
|
|
233
|
-
Repeat the review until you think all plans are solid.
|
|
222
|
+
When you think the plans are complete, read them again with a critical eye and edit them to improve them. Repeat until every plan is solid.
|
|
234
223
|
|
|
235
224
|
**Additional review for multiple plans**:
|
|
236
225
|
|
|
237
226
|
- Each specialized plan is self-contained
|
|
238
227
|
- Each specialized plan header includes only applicable fields (assignment, documentation, skills)
|
|
239
|
-
- The main plan
|
|
240
|
-
- Dependencies between plans are
|
|
228
|
+
- The main plan references all specialized plans with their applicable fields
|
|
229
|
+
- Dependencies between plans are stated
|
|
241
230
|
|
|
242
231
|
---
|
|
243
232
|
|
|
244
|
-
At the end, give the path of the plan file to the user (for a single plan: the plan file; for multiple plans: the main plan file)
|
|
233
|
+
At the end, give the path of the plan file to the user (for a single plan: the plan file; for multiple plans: the main plan file).
|
|
@@ -6,68 +6,75 @@ Run `{{TICKET_CMD}}` once to identify TICKET_DIR and load the ticket directory c
|
|
|
6
6
|
|
|
7
7
|
## Phases
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
A specification is produced in three phases, in this order:
|
|
10
10
|
|
|
11
|
-
1. **Investigation**:
|
|
12
|
-
2. **Discussion**:
|
|
13
|
-
3. **Specification**:
|
|
11
|
+
1. **Investigation**: understand the current implementation and the problem.
|
|
12
|
+
2. **Discussion**: align with the user on the problem and the solution.
|
|
13
|
+
3. **Specification**: write the spec file, once the user has approved.
|
|
14
14
|
|
|
15
|
-
The
|
|
15
|
+
The usual failure is to write the spec right after investigating. The discussion comes first, every time.
|
|
16
16
|
|
|
17
17
|
## Phase 1. Investigation
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Your context lists the available **documentation** and **skills**. Read every document and skill that applies to any aspect of the task, and the relevant references of each skill. A familiar-looking task tempts you to skip this reading; the project conventions live in these files.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
Find the relevant source code. Take the time to understand how it works today and what has to change. Documentation lookup tools are welcome in this phase.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Seek a clean break solution by default. Consider backward compatibility only when the user asks for it.
|
|
24
24
|
|
|
25
25
|
## Phase 2. Discussion
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
Nothing is written in TICKET_DIR before the user agrees.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
- **Current implementation analysis**: Share what you discovered and ask for confirmation or corrections
|
|
31
|
-
- **Multiple solution approaches**: Present several viable alternatives when they exist, explaining trade-offs
|
|
32
|
-
- **Sub-subject identification**: Break down the problem into all relevant sub-components and ensure each is addressed
|
|
33
|
-
- **Design decisions**: Ask for user input on key architectural choices
|
|
34
|
-
- **Edge cases and implications**: Explore potential issues and broader system impacts
|
|
29
|
+
The user is a developer who carries the global vision of the project and decides the choices that matter. You carry the details of the code you just read. The discussion keeps the user aware of what you found and hands them every decision worth taking.
|
|
35
30
|
|
|
36
|
-
|
|
31
|
+
Manage the reader's attention. Open with the task as you understand it and the approach you propose, in two or three sentences. Then write one block per point that deserves a decision. Write for a reader who has not opened the code today: a function, module or mechanism gets a few words of definition the first time you name it.
|
|
37
32
|
|
|
38
|
-
|
|
39
|
-
- Existing patterns and conventions in the codebase
|
|
40
|
-
- User preferences for implementation approaches
|
|
41
|
-
- Any constraints or considerations you might have missed
|
|
33
|
+
A block is a question and a recommendation:
|
|
42
34
|
|
|
43
|
-
|
|
35
|
+
```
|
|
36
|
+
❓ **Q1 - <title>**: <the problem in plain words, what the code does today in the words needed to decide, the options with their consequence>
|
|
37
|
+
|
|
38
|
+
➡️ <your recommendation>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Look for edge cases and impacts on the rest of the system; each one that needs a decision gets its block.
|
|
42
|
+
|
|
43
|
+
A ❓ is open: the user's answer shapes what you build. When the only answers are go or veto, the block shrinks to a single ➡️ line stating your choice. The more obvious the choice, the shorter the line. Leave out the investigation narrative and the list of files you read.
|
|
44
|
+
|
|
45
|
+
Settle on your own what the code can answer. Ask the user what needs their judgement: product behavior, scope, priorities, constraints the code does not show. Every ❓ carries a ➡️, so that "fine with all recommendations" is a valid answer. Ask in rounds: a question whose answer depends on another question still open waits for the next round.
|
|
46
|
+
|
|
47
|
+
When several approaches are viable, present them with their trade-offs. Check that every sub-subject of the task has its block; a sub-subject skipped here is missing from the spec.
|
|
48
|
+
|
|
49
|
+
Do not use your question tool. Ask in plain text: your questions open a real discussion, a multiple-choice widget closes it.
|
|
44
50
|
|
|
45
51
|
## Phase 3. Specification
|
|
46
52
|
|
|
47
53
|
After the user approves your proposal, run `{{TICKET_CMD}} --next spec.md --new-cycle` to start a new cycle. Append FILE_NAME to TICKET_DIR, then immediately write the specification at that path. Do not overwrite an existing file.
|
|
48
54
|
|
|
49
|
-
|
|
55
|
+
Start with the title, a suggested commit message {{COMMIT_RULE}}, then the required documentation and skills. The shorter the commit message, the better. List each doc file individually, never a folder. Exclude `alignfirst` from the skills. Omit a field with nothing to list.
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
# [{TICKET_ID}] Short Title
|
|
50
59
|
|
|
51
|
-
|
|
52
|
-
# [{TICKET_ID}] Short Title
|
|
60
|
+
Suggested commit message: `<commit message>`
|
|
53
61
|
|
|
54
|
-
|
|
62
|
+
Required Documentation:
|
|
55
63
|
|
|
56
|
-
|
|
64
|
+
- `docs/topic-a/doc-1.md`
|
|
65
|
+
- `docs/topic-b/doc-2.md`
|
|
57
66
|
|
|
58
|
-
|
|
59
|
-
|
|
67
|
+
Required skills: `skill-1`, `skill-2`
|
|
68
|
+
```
|
|
60
69
|
|
|
61
|
-
|
|
62
|
-
```
|
|
70
|
+
Content rules:
|
|
63
71
|
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
- Do not include sections like "Benefits", "Code Style Compliance" or anything that adds no new information. Focus on the problem and the solution.
|
|
72
|
+
- The spec covers the full scope of the task. Dropping a part to shrink the spec is a frequent failure; splitting the work is the job of the *plan* protocol. Flag inline a section that should land in its own plan ("candidate for a specialized plan").
|
|
73
|
+
- Spell out every change to a code contract: database schema and migrations, API shapes, critical type definitions. Leave out other code; refer to source files by path or function name.
|
|
74
|
+
- The code may change before the spec is executed. Name functions, never line numbers.
|
|
75
|
+
- Specify a clean break. Unused code is removed. Backward compatibility appears only when the user asked for it.
|
|
76
|
+
- Leave out sections that add no information: "Benefits", "Code Style Compliance", and the like. Problem and solution only.
|
|
70
77
|
|
|
71
|
-
|
|
78
|
+
Ignore Markdown lint errors in the spec file. Fixing them wastes the session.
|
|
72
79
|
|
|
73
80
|
At the end, give the path of the spec file to the user.
|