Skip to content

Commit 9ed855e

Browse files
authored
Refine L3-L5 feature lab instructions and commands
Clarified the descriptions for L3, L4, and L5 slots, and improved instructions for importing packs. Updated commands to reflect the correct paths and added details for verification and troubleshooting.
1 parent 767c677 commit 9ed855e

1 file changed

Lines changed: 21 additions & 39 deletions

File tree

progression/L3-L5-feature-labs.md

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ Three slots, three changes to your own factory, each one verified. This page ser
3535

3636
| Slot | You may build |
3737
| --- | --- |
38-
| **L3** | One of the six options below. Nothing else. |
38+
| **L3** | One of the six options below. |
3939
| **L4** | An option you have not used yet, **or** a feature of your own from the map. |
4040
| **L5** | Same as L4: an option you have not used yet, or a feature of your own. |
4141

42-
L3 is constrained on purpose. Each option is a worked, tested capability with a page explaining what problem it solves, so the first slot buys you a working extension and a model to copy. The two later slots are where the factory becomes yours.
42+
L3 is intended to give you a sense of the scope of possible features and changes you can introduce within a single pack, beyond the base factory. The two later slots allow you to explore other capabilities relevant to your capabilities map.
4343

44-
**Every option installs on the base factory alone.** None requires another, none has to be done in order, and you never remove one to add the next. Pick on the basis of which problem you actually have.
44+
**Every option installs on the base factory alone.** None requires another, none has to be done in order, and you don't need to remove one to add the next. Pick on the basis of which problem you actually have.
4545

4646
## The six options
4747

@@ -54,34 +54,24 @@ L3 is constrained on purpose. Each option is a worked, tested capability with a
5454
| [Strengthen the review system](../hardening/04-strengthen-review-system.md) | One model is one point of view, and it is confidently wrong sometimes | `multi-vendor-rig` |
5555
| [Self-improvement loop](../hardening/05-self-improvement-loop.md) | The factory produces evidence about itself and nobody reads it | none — it is a loop, not a pack |
5656

57-
If your rank-1 row said "install option X", this is where you find X. If it did not, L3 is still an option slot: pick the one whose problem statement is closest to a row on your map.
58-
5957
## How each lab runs
6058

6159
Participant-led, no shared end state. The instructor circulates; say which layer you are working in when they reach you, because the failure modes differ per layer and pairing works best within one.
6260

63-
A slot is enough to build one change properly. It is not enough for two. The ranking you did in L2 is what makes that survivable.
64-
6561
## Paths this page uses
6662

67-
Every command below reads four path variables, and a fresh Day 2 shell usually holds only the first of them.
63+
Every command below reads two path variables:
6864

6965
| Variable | Points at | Set by |
7066
| --- | --- | --- |
7167
| `SFI_PATH` | your workspace directory | [W2](./W2-cloud-box-and-preflight.md) on your laptop, [W3 step 3](./W3-run-your-factory.md#3-open-a-shell-on-the-box) on the box. Both append it to a shell rc, so it survives |
72-
| `FACTORY_PATH` | the city, `factory1` | `bootstrap/bootstrap.sh`, which the taught path never runs |
73-
| `ARTIFACTS_PATH` | this repo's `artifacts/` directory | the same script, so it is missing for the same reason |
7468
| `MY_RIG_PATH` | your own rig | [L1 step 1](./L1-plan-your-factory.md#1-register-your-repo-as-a-rig), as a plain `export` that a new shell forgets |
7569

76-
Set the other three now and the rest of the page runs. They are all derived from `SFI_PATH`, so nothing here depends on how you got to Day 2.
77-
7870
**Copy and paste**
7971

8072
```bash
81-
export FACTORY_PATH="$SFI_PATH/factory1"
82-
export ARTIFACTS_PATH="$SFI_PATH/sf-tutorial/artifacts"
8373
export MY_RIG_PATH="$SFI_PATH/<your-rig-name>"
84-
cd "$FACTORY_PATH" && gc rig list && ls "$MY_RIG_PATH"
74+
cd "$SFI_PATH/factory1" && gc rig list && ls "$MY_RIG_PATH"
8575
```
8676

8777
**Expected output**
@@ -101,34 +91,36 @@ If `gc rig list` comes back without your rig, or the `ls` cannot find the direct
10191

10292
```bash
10393
cd "$MY_RIG_PATH"
104-
nano docs/current/capability-map.md
94+
cat docs/current/capability-map.md
10595
```
10696

107-
Re-rank if the morning changed your mind, and commit the re-rank before you build. A map with a stale ranking is a map you will stop trusting.
108-
109-
Then commit to one row out loud, to yourself or to whoever you are pairing with, in this shape:
97+
Commit to one row out loud, to yourself or to whoever you are pairing with, in this shape:
11098

11199
> I am changing the **\<pack | agent | formula | order\>** layer so that **\<the factory does X\>**, and I will know it worked when **\<the verification from the map's own column\>**.
112100
113-
If you cannot fill that sentence in, the row is not ready and the next one probably is.
101+
If you cannot fill that sentence in, the row is not ready for you to pursue proper implementation.
114102

115103
### 2. Build it
116104

105+
#### Option A: Import from local path
106+
117107
**If you picked an option**, its page carries the install and the walkthrough. Every option is a single import onto the base factory, from the copy of this repo already on your box:
118108

119109
```bash
120110
cd "$FACTORY_PATH"
121-
gc import add --rig <your-rig-name> "$ARTIFACTS_PATH/packs/<the-option-pack>"
111+
gc import add --rig <your-rig-name> "$SFI_PATH/sf-tutorial/artifacts/packs/<the-option-pack>"
122112
gc reload
123113
gc import list --rig <your-rig-name>
124114
```
125115

126-
**Or install the same pack straight from its repository.** `gc import add` takes a GitHub URL wherever it takes a directory, so a pack you have not cloned installs in one command. This is the path you will use after the workshop, when the pack you want belongs to a colleague or to a project you only ever read. The five options that ship as a pack are all published, so you can run this now against your own rig:
116+
#### Option B: Import from remote GitHub URL
117+
118+
**Or install the same pack straight from its repository.** `gc import add` takes a GitHub URL wherever it takes a directory, so a pack you have not cloned installs in one command. The options that ship as a pack are all published, so you can run this now against your own rig:
127119

128120
**Copy and paste**
129121

130122
```bash
131-
cd "$FACTORY_PATH"
123+
cd "$SFI_PATH/factory1"
132124
gc import add --rig <your-rig-name> https://github.com/actual-software/sf-tutorial/tree/main/artifacts/packs/domain-reviewers-rig
133125
gc import install
134126
gc reload
@@ -143,17 +135,13 @@ a count of the remote imports fetched
143135
your new import, its URL, and the same commit sha twice
144136
```
145137

146-
Swap the last path segment for the pack named in [the six options](#the-six-options). The self-improvement loop is a loop rather than a pack, so it is the one option this command cannot install. Four things about that command are worth carrying home, because they are what make a URL install behave differently from a directory one:
138+
Swap the last path segment for the pack named in [the six options](#the-six-options). Four things about that command are worth carrying home:
147139

148140
- **The URL is the one GitHub's address bar shows you.** Browse to the pack's directory in any repo and copy what you see: `https://github.com/<org>/<repo>/tree/<ref>/<path-to-the-pack>`. The `<ref>` is a branch, a tag or a commit.
149-
- **`gc import install` is the extra step.** A directory import is read where it sits; a remote one has to be fetched first, and the agents do not exist until it has been. Skipping it is the single most common way this path appears to do nothing.
141+
- **`gc import install` is the extra step.** A directory import is read where it sits; a remote one has to be fetched first. Skipping it is the single most common way this path fails.
150142
- **The import is pinned the moment you add it.** `gc import list` prints the resolved commit, and the pack stays on that commit until you move it, so a change upstream cannot rewrite your factory overnight. Pass `--version sha:<commit>` to pick a different one, or a constraint like `--version '^1.2.0'` on a repo that tags releases.
151143
- **The binding name comes from the last path segment.** That is `domain-reviewers-rig` above, and it is the name `gc import list` and `gc import remove` want. Use `--name <name>` when two packs would otherwise collide.
152144

153-
Two pages go further when you need them. [W7](./W7-sharing-your-factory.md#a-git-repository) covers the other side of this, how a pack you wrote gets a URL of its own, and [the `gc import add` troubleshooting page](../troubleshooting/gc-import-add.md) carries the full table of source locations, including the local-path cases that behave differently inside a git worktree.
154-
155-
Then follow that page's Try It against your own rig rather than `ascii-art`.
156-
157145
**If you are building your own**, where you work depends on the layer, and each has a worked example in the repo to copy the shape from.
158146

159147
**Agent layer.** You are changing what an agent knows or how it judges. The files are a prompt template and an `agent.toml` under a pack's `agents/<name>/`. Most agent-layer changes are prompt edits, and the highest-value edit is almost always giving a reviewer a real document to cite rather than more adjectives.
@@ -165,7 +153,7 @@ Then follow that page's Try It against your own rig rather than `ascii-art`.
165153
Whichever layer, reload and check before you test:
166154

167155
```bash
168-
cd "$FACTORY_PATH"
156+
cd "$SFI_PATH/factory1"
169157
gc reload
170158
gc doctor
171159
```
@@ -179,7 +167,7 @@ Run the verification you wrote in the map's own column, not a different one that
179167
```bash
180168
cd "$MY_RIG_PATH"
181169
bd create --title "<a bead that exercises the change>" --type task --priority 2
182-
cd "$FACTORY_PATH"
170+
cd "$SFI_PATH/factory1"
183171
gc sling --rig <your-rig-name> polecat <the-new-bead-id>
184172
watch -n 5 'cd '"$MY_RIG_PATH"' && bd show <the-new-bead-id> --json | jq -r ".[0] | \"\(.status) \(.assignee)\""'
185173
```
@@ -189,7 +177,7 @@ The important part is the negative case. **A gate you have only seen pass is a g
189177
```bash
190178
cd "$MY_RIG_PATH"
191179
bd create --title "<a bead your change should reject or catch>" --type task --priority 3
192-
cd "$FACTORY_PATH"
180+
cd "$SFI_PATH/factory1"
193181
gc sling --rig <your-rig-name> polecat <that-bead-id>
194182
cd "$MY_RIG_PATH"
195183
bd show <that-bead-id> --json | jq -r '.[0] | .status, (.metadata.blocker_reason // "no blocker recorded")'
@@ -226,7 +214,7 @@ Across the three slots: at least one shipped option installed and working in you
226214
## Verification
227215

228216
```bash
229-
cd "$FACTORY_PATH"
217+
cd "$SFI_PATH/factory1"
230218
gc import list --rig <your-rig-name>
231219
gc doctor
232220
cd "$MY_RIG_PATH"
@@ -243,12 +231,6 @@ your commits from this slot
243231
the bead you deliberately made fail, still blocked with a reason
244232
```
245233

246-
## Ceiling
247-
248-
Make what you built survive someone else. Write the three sentences explaining it into your rig's docs, so a colleague reading the file in a month knows why it exists.
249-
250-
That is also most of the work for [W7](./W7-sharing-your-factory.md) already done.
251-
252234
## Troubleshooting
253235

254236
- **The option's page refers to agents you do not have.** Each option page assumes the base factory plus that option. If it names an agent from a different option, you found a bug worth reporting; the options are meant to be independent.

0 commit comments

Comments
 (0)