Skip to content

Commit 96d97cf

Browse files
committed
docs: replace remaining Portfolio with Umbrella
1 parent a24778b commit 96d97cf

File tree

1 file changed

+11
-126
lines changed

1 file changed

+11
-126
lines changed

jekyll/_posts/2025-11-29-vibe-coding-cloud-protocol.md

Lines changed: 11 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -198,20 +198,20 @@ The names barely change—mostly `shipfail` → `preangel`—but the Project mov
198198

199199
A naming convention is useless if you have to look it up every time. It needs to be intuitive. Here is the **Ship.Fail Protocol**.
200200

201-
### Rule #1: The Portfolio
201+
### Rule #1: The Umbrella
202202

203-
I have exactly three Portfolios (contexts). No more, no less.
203+
I have exactly three Umbrellas (contexts). No more, no less.
204204

205-
* `pf-preangel` (Real products making money)
206-
* `pf-shipfail` (Hackathons, MVPs, crazy ideas)
207-
* `pf-tobemigrated` (The "Box of Shame" for old stuff)
205+
* `umb-preangel` (Real products making money)
206+
* `umb-shipfail` (Hackathons, MVPs, crazy ideas)
207+
* `umb-tobemigrated` (The "Box of Shame" for old stuff)
208208

209209
### Rule #2: The Project
210210

211211
Projects are the atomic unit in my head. They are named explicitly:
212212

213213
```text
214-
prj-<portfolio>-<project>
214+
prj-<umbrella>-<project>
215215
```
216216

217217
Examples:
@@ -238,7 +238,7 @@ How this plays out in practice:
238238
This is where the magic happens. The Resource Group name encodes the entire lineage of the resource.
239239

240240
```text
241-
rg-<portfolio>-<project>-<stage>-<component?>
241+
rg-<umbrella>-<project>-<stage>-<component?>
242242
```
243243

244244
Examples:
@@ -249,7 +249,7 @@ Examples:
249249
Under Ship.Fail, this is also how Projects show up structurally:
250250

251251
* `rg-shipfail-remic-dev-web`, `rg-shipfail-remic-dev-api`, `rg-shipfail-remic-prod-web`, ...
252-
* All of them live inside the **same Ship.Fail lab subscription**, but their names and tags still encode Portfolio, Project, Stage, and Component.
252+
* All of them live inside the **same Ship.Fail lab subscription**, but their names and tags still encode Umbrella, Project, Stage, and Component.
253253

254254
**The "3-Second Rule":** If I can't tell you exactly what a Resource Group contains and who pays for it within 3 seconds of reading the name, **it is a bad name.**
255255

@@ -258,7 +258,7 @@ Under Ship.Fail, this is also how Projects show up structurally:
258258
I use type‑first naming. Start with the resource type abbreviation, then echo the hierarchy.
259259

260260
```text
261-
<shorttype>-<portfolio>-<project>-<stage>-<component?>
261+
<shorttype>-<umbrella>-<project>-<stage>-<component?>
262262
```
263263

264264
Examples:
@@ -291,7 +291,7 @@ Three months later, I have *no idea* what either of those are.
291291
Resource Group: rg-shipfail-remic-dev-web
292292
Storage Account: st-shipfail-remic-dev-web
293293
Tags:
294-
Portfolio = ShipFail
294+
Umbrella = ShipFail
295295
Project = ReMic
296296
Stage = dev
297297
Component = web
@@ -300,7 +300,7 @@ Tags:
300300
Now the same pair of resources tells me, at a glance:
301301

302302
* this is part of the **ReMic** Project,
303-
* under the **Ship.Fail** portfolio,
303+
* under the **Ship.Fail** umbrella,
304304
* in the **dev** stage,
305305
* in the **web** component.
306306

@@ -396,126 +396,11 @@ In practice, “graduation” often means **redeploying infrastructure using IaC
396396

397397
The mental model is the same. The only changes are:
398398

399-
* `Portfolio` value: from `ShipFail``PreAngel`.
400-
* Physical level where the Project lives: from Resource Group family inside a shared subscription → its own subscription.
401-
402399
* `Umbrella` value: from `ShipFail``PreAngel`.
403400
* Physical level where the Project lives: from Resource Group family inside a shared subscription → its own subscription.
404401

405402
That’s how graduation works in this protocol.
406403

407-
---
408-
409-
## 4. The Naming Playbook: Rules for the Road
410-
411-
A naming convention is useless if you have to look it up every time. It needs to be intuitive. Here is the **Ship.Fail Protocol**.
412-
413-
### Rule #1: The Umbrella
414-
415-
I have exactly three Umbrellas (contexts). No more, no less.
416-
417-
* `umb-preangel` (Real products making money)
418-
* `umb-shipfail` (Hackathons, MVPs, crazy ideas)
419-
* `umb-tobemigrated` (The "Box of Shame" for old stuff)
420-
421-
### Rule #2: The Project
422-
423-
Projects are the atomic unit in my head. They are named explicitly:
424-
425-
```text
426-
prj-<umbrella>-<project>
427-
```
428-
429-
Examples:
430-
431-
* `prj-preangel-zixia`
432-
* `prj-shipfail-thoth`
433-
* `prj-shipfail-remic`
434-
435-
How this plays out in practice:
436-
437-
* In **PreAngel**, `prj-preangel-zixia` is both:
438-
439-
* the conceptual Project name, and
440-
* the name I give to its dedicated Azure (subscription).
441-
* In **Ship.Fail**, `prj-shipfail-remic` is still the conceptual Project name, but:
442-
443-
* all Ship.Fail Projects share a single lab Azure (subscription), and
444-
* the Project is implemented as a **family of Resource Groups and tags** with the `shipfail-remic` pattern.
445-
446-
**Why this works:** When I see `prj-shipfail-thoth`, I know instantly: *This is an experiment (Ship.Fail) called Thoth.* Whether it currently lives as its own subscription (PreAngel style) or as Resource Groups inside the lab subscription (Ship.Fail style) is an implementation detail I can always look up—but the name and tags tell the story.
447-
448-
### Rule #3: The Resource Group (The Backbone)
449-
450-
This is where the magic happens. The Resource Group name encodes the entire lineage of the resource.
451-
452-
```text
453-
rg-<umbrella>-<project>-<stage>-<component?>
454-
```
455-
456-
Examples:
457-
458-
* `rg-shipfail-remic-dev-web`
459-
* `rg-preangel-zixia-prod-data`
460-
461-
Under Ship.Fail, this is also how Projects show up structurally:
462-
463-
* `rg-shipfail-remic-dev-web`, `rg-shipfail-remic-dev-api`, `rg-shipfail-remic-prod-web`, ...
464-
* All of them live inside the **same Ship.Fail lab subscription**, but their names and tags still encode Umbrella, Project, Stage, and Component.
465-
466-
**The "3-Second Rule":** If I can't tell you exactly what a Resource Group contains and who pays for it within 3 seconds of reading the name, **it is a bad name.**
467-
468-
### Rule #4: The Resource (Type-First)
469-
470-
I use type‑first naming. Start with the resource type abbreviation, then echo the hierarchy.
471-
472-
```text
473-
<shorttype>-<umbrella>-<project>-<stage>-<component?>
474-
```
475-
476-
Examples:
477-
478-
* `vm-shipfail-remic-dev-web` (A VM)
479-
* `st-shipfail-thoth-dev-data` (A Storage Account)
480-
* `fn-preangel-zixia-prod-web` (A Function App)
481-
* `db-preangel-zixia-prod-api` (A Database)
482-
483-
Type-first gives me a nice property when I sort by name:
484-
485-
* all `vm-*` resources group together,
486-
* all `db-*` resources group together,
487-
* and my eyes can skim quickly.
488-
489-
### A Before → After Rename Example
490-
491-
Here’s how this looks in practice on a messy real-world example.
492-
493-
**Before:**
494-
495-
* Resource Group: `Default-Web-WestUS`
496-
* Storage Account: `mystorage123`
497-
498-
Three months later, I have *no idea* what either of those are.
499-
500-
**After:**
501-
502-
```text
503-
Resource Group: rg-shipfail-remic-dev-web
504-
Storage Account: st-shipfail-remic-dev-web
505-
Tags:
506-
Umbrella = ShipFail
507-
Project = ReMic
508-
Stage = dev
509-
Component = web
510-
```
511-
512-
Now the same pair of resources tells me, at a glance:
513-
514-
* this is part of the **ReMic** Project,
515-
* under the **Ship.Fail** umbrella,
516-
* in the **dev** stage,
517-
* in the **web** component.
518-
519404
### 6.3 Zixia as a PreAngel Project (Always Production-First)
520405

521406
The **PreAngel** umbrella is where my “serious” products live. Zixia is one of them.

0 commit comments

Comments
 (0)