Skip to content

DOJ-6530: install piber-narrative-architect, reconcile counts, bump to 1.2.0 - #37

Open
lapc506 wants to merge 1 commit into
chore/drop-hormozi-slide-attributionfrom
andres/doj-6530-piber-install
Open

DOJ-6530: install piber-narrative-architect, reconcile counts, bump to 1.2.0#37
lapc506 wants to merge 1 commit into
chore/drop-hormozi-slide-attributionfrom
andres/doj-6530-piber-install

Conversation

@lapc506

@lapc506 lapc506 commented Aug 2, 2026

Copy link
Copy Markdown
Collaborator

Installs piber-narrative-architect — the Cannes Lions case-board structure (Problem, Insight, Big Idea, Execution, Results) used as a general argument spine — as a skill plus its 1:1 command, reconciles the inventory counts, and bumps to 1.2.0.

Stacked on #36. Base is chore/drop-hormozi-slide-attribution, not main, because both touch README.md. Review #36 first; this diff shows only the 19 files below once it merges.

The version is 1.2.0, and the interesting part is why it is not 2.0.0

Adding a skill and a command is a feature, so it is not a patch. The question worth answering is the other direction: #36 renames a public skill, slide-designslides-generate, and a rename of a published identifier is normally MAJOR.

It is not MAJOR here, and that is measured rather than assumed. The Base + Overlay protocol binds by command, not by skill directory. dojo-academy is the one real consumer, and its overlay declares:

# dojo-academy: skills/slide-design/SKILL.md
overlay_target:
  - slides-generate      # <- already the command name
  - slides-preview
  - write-video-script
overlay_priority: 50

So nothing downstream resolves the string slide-design as an IDT contract. dojo-academy has a skill of its own by that name, and it is untouched — it binds to slides-generate the command, which has been called that all along. The rename changes an invocation label with no consumer, which is MINOR.

Stated as the negative result too, because it is the one that would have been expensive: git grep -l 'slide-design' origin/main in dojo-academy returns 7 files, and every one of them is dojo-academy naming its own skill.

Counts, measured not incremented

ls commands/*.md | grep -vc '/_'     ->  34   (36 files, 2 are _private pipeline docs)
find skills -name SKILL.md | wc -l   ->  21
ls agents/*.md | wc -l               ->  20

Updated in all four places: ## Commands (34), ## Skills (21), the ### v1 (current release) summary line, and marketplace.json.

Two count defects surfaced by doing this

marketplace.json was describing v1.0.0. Its plugin description claimed "12 skills … 7 agents". The real numbers are 21 and 20 — the field was never touched when v1.1.0 tripled the inventory. A stale count in a marketplace listing is the one place a user reads before installing.

slides-generate was filed under "Reference skills (sin comando)". True when it was slide-design; false the moment #36 renamed it, since it then shares its name with /slides-generate. Moved to the authoring table. Totals unchanged either way (17 + 4 = 16 + 5 = 21), which is exactly why this kind of drift survives a count check.

Gate invocations now resolve

The skill ships piber_gate.py, a mechanical check for the five nodes, their order, and the house lexical rules. Every documented invocation read:

python3 scripts/piber_gate.py board.md

That path resolves from the skill directory and from nowhere else — including the repo root, which is where a reader tries it first, and where the repo's other two scripts genuinely live. Rewritten to ${CLAUDE_PLUGIN_ROOT}/skills/piber-narrative-architect/scripts/piber_gate.py, matching how validate_workbook.py and gemini-translate.sh are already referenced. The one relative path left alone is in evaluations/README.md, whose whole procedure runs from inside the skill directory.

Verification

python3 scripts/ci/check_json_schemas.py       # 4 file(s) valid
python3 scripts/ci/check_frontmatter.py        # 75 file(s) valid, 2 skipped
python3 scripts/ci/check_agent_references.py   # 20 agent(s) indexed, all resolve

cd skills/piber-narrative-architect
python3 scripts/piber_gate.py assets/case-board-skeleton.md
# GATE OPEN. 0 hard failures, 0 warning(s).

That last one is the control that matters: the skeleton is the artifact the skill tells Claude to fill in, so a skeleton failing its own gate would teach the wrong shape.

Closes DOJ-6530
Part of DOJ-6525

Created by Claude Code on behalf of @lapc506

…mp to 1.2.0

Adds the PIBER narrative skill (Problem, Insight, Big Idea, Execution,
Results) with its 1:1 command and its mechanical gate. Reused as authored
and validated, not re-derived.

Count reconciliation, measured rather than incremented:
  commands 33 -> 34, skills 20 -> 21, agents 20 (unchanged)

Two count defects fixed while reconciling:

- `marketplace.json` still described "12 skills, 7 agents". That is the
  v1.0.0 inventory; it was never updated through v1.1.0. Real counts are
  21 and 20.
- `slides-generate` was listed under "Reference skills (sin comando)".
  After the rename in the parent PR it shares a name with its command, so
  it backs one. Moved to the authoring table; totals unchanged.

Gate invocations now resolve. They read `scripts/piber_gate.py`, which
resolves from the skill directory and from nowhere else — including the
repo root, where a reader would try it first. Rewritten to
`${CLAUDE_PLUGIN_ROOT}/skills/piber-narrative-architect/scripts/`, the
convention the other two scripts in this repo already use.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@dojo-code-reviewer dojo-code-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Approved

Approved — 0 blockers, 1 P3. Confidence: 4.80/5.00. NITs: 1 (shown).

Walkthrough

Summary Walkthrough

This PR installs the piber-narrative-architect skill and its corresponding /piber-narrative-architect command, which implements the PIBER narrative framework for building, compressing, and auditing persuasive arguments. It also reconciles codebase asset counts in both the README and marketplace manifests, and bumps the package version to 1.2.0.

Areas Reviewed

I performed a comprehensive review of the following surfaces:

  1. Manifest and Metadata Files: .claude-plugin/marketplace.json and .claude-plugin/plugin.json to verify the semantic version bump (to 1.2.0) and the accuracy of the updated plugin description and asset counts.
  2. Main Documentation: README.md and commands/piber-narrative-architect.md to ensure proper command documentation, Spanish translation accuracy, and correct count reconciliation.
  3. PIBER Framework Reference Material: skills/piber-narrative-architect/ directory contents, including SKILL.md, CHANGELOG.md, and all reference/example files.
  4. Mechanical Gate Script: skills/piber-narrative-architect/scripts/piber_gate.py to verify the parsing logic, masking routines, lexical checks, word counts, and error reporting mechanisms.

Safety Rationale

The added skill, command, and reference files are entirely self-contained, and the Python linter script operates independently, ensuring zero risk of regressions or side effects on existing workflows.

Approved — 0 blockers, 1 P3.

🔵 P3 — Minor

  • skills/piber-narrative-architect/scripts/piber_gate.py:238 — 🔵 P3 (minor) — Inconsistency between the sentence count limit and the failure message. The SKILL.md rules dictate that an Insight must be exactly one sentence ('One sentence.'). However, the check len(sents) > 2 allows up to two sentences without a failure, but raises a failure with the message 'One sentence. Choose.' If the rule is strictly one sentence, change the condition to len(sents) > 1. If two sentences are allowed as indicated in CHANGELOG.md ('over two sentences'), adjust the error message to specify that a maximum of two sentences are permitted.

[pass 1]

⚪ P4 — Nitpicks

  • skills/piber-narrative-architect/scripts/piber_gate.py:56 — [NIT] ⚪ P4 (nit) — Accented Spanish stopwords are not filtered by the STOPWORDS set. Since content_words() extracts lowercase accented characters via '[a-záéíóúñü]', accented stopwords like 'más', 'cómo', 'qué', 'quién', 'cuál' will bypass STOPWORDS filtration. Consider adding these accented forms to the set.

[pass 1]


Total findings: 1 business context, 1 nit (2 total)

"la apuesta",
"we would be wrong",
"would prove us wrong",
"nos equivocamos si",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NIT] ⚪ P4 (nit) — Accented Spanish stopwords are not filtered by the STOPWORDS set. Since content_words() extracts lowercase accented characters via '[a-záéíóúñü]', accented stopwords like 'más', 'cómo', 'qué', 'quién', 'cuál' will bypass STOPWORDS filtration. Consider adding these accented forms to the set.

[pass 1]

rep.warning(
"Rendered artifact still carries all five node labels as headings. "
"Outside a case board, the beats stay and the labels go."
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 P3 (minor) — Inconsistency between the sentence count limit and the failure message. The SKILL.md rules dictate that an Insight must be exactly one sentence ('One sentence.'). However, the check len(sents) > 2 allows up to two sentences without a failure, but raises a failure with the message 'One sentence. Choose.' If the rule is strictly one sentence, change the condition to len(sents) > 1. If two sentences are allowed as indicated in CHANGELOG.md ('over two sentences'), adjust the error message to specify that a maximum of two sentences are permitted.

[pass 1]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant