Replace Olofofo with Pepeye and simplify skill workflows - #24
Conversation
- Add provider-neutral playbooks, proof, pause, pickup, and learning - Retire Olofofo and update portfolio, routing, and ADRs - Strengthen skill validation, PR synchronization, and HTML portability
…w-learning # Conflicts: # skills/engineering/ko-skill/SKILL.md
There was a problem hiding this comment.
🤖 Alátùńwò AI review · 📄 Diff-only
Reviewed from the pull request diff only (no surrounding files).
This PR replaces Olofofo with the Pepeye lifecycle-controller skill, adds Seda Sigidi, and updates related workflow guidance.
- Blocker: Pepeye's default lifecycle-ledger path permits path traversal through an unconstrained task ID.
|
|
||
| State writes require separate authority. Explicit invocation, baseline activation, or task mutation authority does not imply lifecycle-state authority. | ||
|
|
||
| Use a user-approved destination. When the user requests the QP default, use `~/.qp/pepeye/tasks/<task-id>.md`, where `<task-id>` is a stable, non-secret task identifier. Create no global index, queue, daemon, or scheduler. |
There was a problem hiding this comment.
BLOCKER — Path traversal in the default ledger location. <task-id> is only described as “stable” and “non-secret”, so a value such as ../../some-file can escape ~/.qp/pepeye/tasks/ and cause an authorized lifecycle-state write to overwrite an unintended user file. Generate the ID internally as a safe slug/UUID, or reject absolute paths, separators, ./.. segments, and resolve-and-verify that the final path remains beneath the tasks directory before writing.
| @@ -0,0 +1,3 @@ | |||
| interface: | |||
| display_name: "Pepeye" | |||
| short_description: "Drive a portable task lifecycle through QP skills" | |||
There was a problem hiding this comment.
P1 — enforce the explicit-activation boundary. pepeye says it activates only through explicit invocation or an authorized project/global baseline, but this metadata does not disable implicit invocation. Because Pepeye becomes the sticky task-wide controller once selected, add policy.allow_implicit_invocation: false here (as seda-pr does). An authorized baseline can still explicitly invoke it.
|
|
||
| ## 1. Activate sticky mode | ||
|
|
||
| Activate on explicit invocation or through an authorized project or global instruction baseline. Once active, remain the task-wide controller until the task is `complete`, the user opts out, or the task reaches a verified `paused` state. |
There was a problem hiding this comment.
P1 — sticky-mode exit conditions disagree with the terminal-state contract. This says control remains active only until complete, user opt-out, or paused, while section 8 also defines unresolved and stopped as terminal states and says to stop controlling after the terminal state is recorded. A refused authority/safety stop can therefore be terminal and still not satisfy this activation rule. Define sticky mode as lasting until any terminal state (complete | paused | unresolved | stopped) is recorded, and mirror that in the portable activation payload.
|
|
||
| ```markdown | ||
| <!-- qp:pepeye:start --> | ||
| Use `pepeye` as the task-wide lifecycle controller when it is available. Let it select a QP-native playbook, direct exact-current leaf owners through phase checkpoints, converge proof, support safe pause or pickup, and run the final learning pass. Keep Pepeye active until the task completes, the user opts out, or it records a safe pause. Specialists retain their outcomes, procedures, safety rules, and authority gates. Use only context and capabilities the host already exposes; do not require a provider-specific mode, model, transcript path, agent API, hook, daemon, adapter, scheduler, or shared runtime. Explicit invocation remains the fallback when automatic activation is unavailable. |
There was a problem hiding this comment.
P1 — keep portable activation consistent with Pepeye's full terminal-state model. This payload repeats the narrower complete / opt-out / safe pause exit rule, omitting terminal unresolved and stopped. Please align this with the four terminal states so a safety stop, refused authority, or unresolved dependency cannot leave the controller notionally active.
| # Fẹ̀mí Sínú Sigidi | ||
|
|
||
| Give one AI agent a durable soul: identity, values, boundaries, and voice grounded in evidence about its human. Own discovery, authoring, integration, and proof for one loaded configuration; the caller owns tool choice, credentials, installation, activation, publication, and any Git or provider operation. | ||
|
|
There was a problem hiding this comment.
P1 — naming-only requests currently imply a configuration mutation. The description routes requests such as “name my agent” here and excludes installation/activation, but the workflow owns integration into a loaded config, applies a minimal diff, and reads back the changed file. For an auto-loaded config, that write is installation/activation-bearing. Please split the contract into a non-mutating name/draft path and an explicit integrate path requiring target read/write authority, or keep integration with a separate owning installer.
| @@ -0,0 +1,120 @@ | |||
| # Soul Template | |||
|
|
|||
| Fill this template with evidence about one human and the agent that serves him. Every trait needs one source: his words, observed behavior, or his confirmation. Never invent traits to fill gaps. | |||
There was a problem hiding this comment.
P2 — do not infer the human's gender. The template repeatedly hard-codes him, he, and his, despite requiring every durable trait to be evidence-grounded. Use neutral the human / they / their, or collect pronouns explicitly before using them.
| "qp-skills": patch | ||
| --- | ||
|
|
||
| Remove duplicate workflow representations and reference-owned procedure from `atona`, `atunwo`, `ayewo-igba-ise`, `pepeye`, and `seda-sigidi` without changing their outcomes, authority, state, proof, or reporting contracts. |
There was a problem hiding this comment.
P2 — release metadata mischaracterizes seda-sigidi. This changeset describes seda-sigidi only as behavior-preserving workflow compression, but this PR introduces it as a new public skill. Add it to the major changeset or create a dedicated changeset that announces the new capability and its authority boundary.
- Remove explicit-invocation requirements from PR workflow guidance - Enable implicit invocation for seda-pr and wo-pr
There was a problem hiding this comment.
🤖 Alátùńwò AI review · 📄 Diff-only
Reviewed from the pull request diff only (no surrounding files).
This PR replaces Olofofo with Pepeye, adds Seda Sigidi, compresses several skill workflows, and expands HTML artifact localization.
- Blocker: implicit Wò PR activation can turn a passive monitoring request into unauthorized branch/provider writes.
- Warning: carousel template interpolation mishandles literal
$sequences in localized or supplied labels. - Verification was limited to the supplied diff because the workspace contained no repository checkout or tests.
| short_description: "Keep PRs and MRs ready through CI and feedback" | ||
| policy: | ||
| allow_implicit_invocation: false | ||
| allow_implicit_invocation: true |
There was a problem hiding this comment.
BLOCKER — Implicit activation breaks the mutation-authority boundary. wo-pr matches passive requests such as “monitor,” “watch,” or “keep an eye on,” but its workflow may fix code, commit, push, and perform provider writes by default. With implicit invocation enabled, a read-only monitoring request can therefore trigger mutations without the user explicitly selecting that workflow. Keep allow_implicit_invocation: false, or introduce an implicit read-only mode that requires explicit authorization before every branch or provider mutation.
| const interactiveSelector = "a, button, input, select, textarea, summary, [contenteditable='true']"; | ||
|
|
||
| const format = (template, values) => Object.entries(values).reduce( | ||
| (text, [key, value]) => text.replaceAll(`{${key}}`, value), |
There was a problem hiding this comment.
WARN — Template interpolation does not preserve replacement values literally. Passing value as the string replacement makes replaceAll interpret $&, $` , $', and similar replacement patterns. An item label such as R&D $& will produce an incorrect live announcement instead of its literal accessible name. Use a replacement callback, for example text.replaceAll({${key}}, () => String(value)), and add coverage for labels containing $ replacement sequences.
Summary
This branch updates the Quantipixels (QP) skills portfolio and replaces the retired Olofofo workflow with Pepeye.
Why
The portfolio needs one provider-neutral lifecycle owner, clearer specialist boundaries, and shorter skill instructions that retain authority, state, proof, recovery, and reporting contracts. The Olofofo replacement also removes stale activation and cross-session workflow surfaces.
Verification
python3 -m unittest discover -s skills/engineering/seda-pr/scripts -p 'test_*.py'— 20 tests passed.python3 -m unittest discover -s skills/engineering/wo-pr/scripts -p 'test_*.py'— 35 tests passed.npx changeset statuspassed with the existing release metadata.git diff --checkpassed.Review focus
The base-to-head diff against
oricontains 37 files with 613 insertions and 420 deletions. No issue-closing effect is intended.Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.