levelup-publish
SkillDev toolsCompile accepted Context Directive Records (CDRs) into team-ai-directives artifacts and create a draft PR. Builds context modules, evals goldensets, and/or skills based on CDR context types.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the levelup-publish skill
What this skill tells your AI
The instructions your AI receives, as published by tikalk/adlc-team-skills in skills/levelup/levelup-publish/SKILL.md and read by ahel’s review.
What this skill does
Compile accepted CDRs into actual artifacts in the team-ai-directives team AI directives and create a draft PR.
It is the implementation phase of the CDR lifecycle:
- Validate accepted CDRs against the signal gate
- Detect cross-CDR conflicts before publishing
- Generate context module files (rules, personas, examples, constitution)
- Generate eval goldenset files (
goldset.md+goldset.json) for eval-type CDRs - Generate skill artifacts (
SKILL.md+.skills-entry.json) - Update
.skills.jsonmanifest - Update
CDR.mdindex in team-ai-directives - Create a branch, commit, and open a draft PR
This skill does not run until CDRs have been accepted via /levelup-clarify.
When to use
- After
/levelup-clarify: Accepted CDRs need to be published - Single skill build: Use
--skill <name|CDR-id>to build one skill - Context modules only: Use
--context-onlyto skip skill generation
When NOT to use
- No accepted CDRs: Run
/levelup-clarifyfirst - Uncommitted changes in team-ai-directives: Clean working tree first
- Discovering patterns: Use
/levelup-initor/levelup-specify - Reviewing CDRs: Use
/levelup-clarify
Process
User Input
$ARGUMENTS
You MUST consider the user input before proceeding (if not empty).
Examples of User Input:
"--ready"— Create ready PR instead of draft"--skip-skills"— Don't include skill CDRs"--context-only"— Only build context modules"--skill CDR-005"— Build only the skill from CDR-005"CDR-001 CDR-003"— Only implement specific CDRs- Empty input: Implement all accepted CDRs as draft PR
Flags
--ready: Create ready PR instead of draft--skip-skills: Skip skill-type CDRs--context-only: Build only context modules (skip all skills)--skill <name|CDR-id>: Build only one skill from a specific accepted skill CDR
Role & Context
You are acting as a Context Publisher — moving accepted CDRs from local drafts to team-ai-directives.
Your role involves:
- Validating that CDRs are accepted and ready
- Creating context module files from CDR content
- Creating skill artifacts from skill-type CDRs
- Managing Git operations (branch, commit, push, PR)
Outline
- Environment Setup (Phase 0): Resolve paths and list accepted CDRs
- Prerequisites Check (Phase 1): Ensure team-ai-directives is configured and clean
- Signal Gate Validation (Phase 2): Filter CDRs without concrete evidence
- Cross-CDR Conflict Check (Phase 3): Detect duplicate targets and rule conflicts
- Branch Preparation (Phase 4): Create branch in team-ai-directives
- Context Module Generation (Phase 5): Build rules/personas/examples/constitution
- Eval Goldenset Generation (Phase 6): Build goldset.md + goldset.json for eval CDRs
- Skill Generation (Phase 7): Build SKILL.md + .skills-entry.json
- log.md Update (Phase 8): Append OKF §9 entries to per-dir log.md
- AGENTS.md Check (Phase 9): Create if missing
- Commit and PR (Phase 10): Publish changes
- Summary (Phase 11): Report results
Execution Steps
Phase 0: Environment Setup
Run:
scripts/bash/setup-levelup-publish.sh
Parse JSON for REPO_ROOT, TEAM_AI_DIRECTIVES, CDR_DRAFTS_DIR, ACCEPTED_CDRS, TD_CONFIGURED, TD_IS_GIT, TD_CLEAN.
If the setup script is unavailable or fails, resolve manually:
REPO_ROOT— walk up from cwd to find.adlc/, orgit rev-parse --show-toplevel, or usepwd.TEAM_AI_DIRECTIVES—TEAM_AI_DIRECTIVESenv var, then.adlc/init-options.json→team_ai_directives, thenREPO_ROOT/team-ai-directives.CDR_DRAFTS_DIR—REPO_ROOT/.adlc/drafts/cdrACCEPTED_CDRS—grep -l '^### Status: \*\*Accepted\*\*' CDR_DRAFTS_DIR/CDR-*.mdand extract IDs.TD_IS_GIT—git -C "$TEAM_AI_DIRECTIVES" rev-parse --is-inside-work-tree(exit 0 = true).TD_CLEAN—git -C "$TEAM_AI_DIRECTIVES" status --porcelain(empty = clean).
If TD_IS_GIT is false, Phase 10 (branch/commit/PR) cannot run. Offer to git init the team AI directives or write files directly without git.
Phase 1: Prerequisites Check
Verify Team Directives configured:
Team AI directives repository not configured.
Run: team-setup
Or set: export TEAM_AI_DIRECTIVES=/path/to/team-ai-directives
Check Working Tree:
If TD_CLEAN is false:
team-ai-directives has uncommitted changes.
Please commit or stash changes before running /levelup-publish.
Check Accepted CDRs:
If ACCEPTED_CDRS is empty:
No accepted CDRs found.
Run /levelup-clarify to accept CDRs first.
Phase 2: Signal Gate Validation
For each accepted CDR, evaluate it against these four criteria:
-
Team-wide applicability: Does this pattern apply to multiple projects/teams, or is it specific to one project? If the CDR's context or evidence only references a single project's internals with no generalizable lesson → SKIP (reason: "project-specific").
-
Evidence quality: Does the CDR reference concrete file paths, commit SHAs, or test cases? If the evidence section is empty or vague ("various files", "general practice") → SKIP (reason: "no evidence").
-
Uniqueness: Does this duplicate an existing directive in team-ai-directives? Check
context_modules/rules/,context_modules/examples/, andCDR.mdfor overlapping content. If it overlaps → SKIP (reason: "duplicate"). -
High value: Is this a genuinely useful pattern, or a nice-to-have minor convenience? If the CDR explicitly states "low value" or "minor convenience", or the pattern is trivial (e.g., "use semicolons") → SKIP (reason: "low value").
Skip CDRs that fail any criterion. Skipped CDRs remain in local drafts.
Report:
## Signal Gate Validation
**Passing**: N | **Skipped**: M
### Skipped CDRs
| CDR | Reason |
|---|---|
| CDR-003 | No evidence |
| CDR-005 | Project-specific |
Phase 3: Cross-CDR Conflict Check
Check for:
- Duplicate Targets: Multiple CDRs targeting the same module path
- Rule Conflicts: Same concern, different implementations
- Unresolved Inconsistencies: CDRs with type "Inconsistency" not marked Resolved
If conflicts found:
Cross-CDR conflicts detected. Resolve via /levelup-clarify before implementing.
Phase 4: Branch Preparation
Create branch in team-ai-directives (skip if TD_IS_GIT=false — git operations are handled in Phase 10):
cd "$TEAM_AI_DIRECTIVES"
git checkout -b "levelup/$(basename "$REPO_ROOT")" main 2>/dev/null || git checkout -b "levelup/$(basename "$REPO_ROOT")"
Phase 5: Context Module Generation
For each accepted non-skill CDR, create/update the target file.
Extracting fields from CDRs: CDRs use single-line field format (### Field: value). Extract values by parsing the line after the ### prefix:
title— from the## CDR-NNN:headingdescription— from### Descriptor:lineid— from## CDR-NNNheading (e.g.,CDR-001)cdr_ref— same asiddomain— from### Domain:line (default:general)context-type— from### Context Type:line (lowercased; default:rule)created— from### Date:line (use today's date if not present)evidence— from### Feature Implementation Evidenceor### Evidencesection body{Content from CDR}— from### Contextsection body- OKF v0.2 fields are derived:
resource= relative path from context type/domain/file,tags= context type,generated.at= ISO 8601 datetime. Ifevidenceentries exist, map each to asources[]entry; if empty, omitsources.
Rules (OKF v0.2 frontmatter):
---
type: Rule
title: {title}
description: {description}
resource: ./context_modules/rules/{domain}/{file}.md
tags: [{context-type}]
generated: { by: agent:levelup-publish, at: {today}T00:00:00Z }
id: {id}
cdr_ref: {cdr_ref}
created: {created}
verified:
- { by: agent:levelup-publish, at: {today}T00:00:00Z }
status: stable
stale_after: 180d
sources:
- id: {evidence-id-or-derived}
resource: {evidence-resource-or-path}
title: {evidence-title}
---
# {Title}
{Content from CDR}
## Source
Contributed from: {project-name}
CDR: {cdr_ref}
After writing the module file, append a row to context_modules/rules/index.md (OKF §8 list format):
* [{Title}](relative-path.md) - {description}
If context_modules/rules/index.md does not exist, create it with a # Rules heading first.
Personas and Examples follow similar templates with appropriate type.
Constitution:
- For Constitution Creation CDRs: create
context_modules/constitution.md - For Constitution Amendment CDRs: append to existing constitution
Phase 6: Eval Goldenset Generation
For each accepted eval-type CDR, generate goldenset files in team-ai-directives/evals/.
Extracting fields from eval CDRs: Parse the CDR's single-line fields:
directive_id— from### Paired Directive CDR:line (e.g.,CDR-001)descriptor— from### Descriptor:linepass_cases— from### Pass Casessection bodyfail_cases— from### Fail Casessection bodyadversarial_cases— from### Adversarial Casessection body
Step 1: Create evals directory
mkdir -p "$TEAM_AI_DIRECTIVES/evals/{directive_id}"
Step 2: Write goldset.md
Write {TEAM_AI_DIRECTIVES}/evals/{directive_id}/goldset.md:
---
type: Eval
title: {title from CDR}
description: {descriptor from CDR}
resource: ./evals/{directive_id}/goldset.md
tags: [eval]
generated: { by: agent:levelup-publish, at: {today}T00:00:00Z }
id: {eval CDR id}
cdr_ref: {eval CDR id}
paired_directive: {directive_id}
created: {date from CDR}
verified:
- { by: agent:levelup-publish, at: {today}T00:00:00Z }
status: stable
stale_after: 180d
---
# Goldset: {Title}
## Directive Under Test
- **CDR**: {directive_id}
- **Path**: {target module of paired directive CDR}
## Pass Cases
{pass cases from CDR — each with scenario, input, output, why-it-passes}
## Fail Cases
{fail cases from CDR — each with scenario, input, output, why-it-fails, correction}
## Adversarial Cases
{adversarial cases from CDR — each with scenario, expected}
Step 3: Write goldset.json
Write {TEAM_AI_DIRECTIVES}/evals/{directive_id}/goldset.json — machine-readable version for grader consumption:
{
"id": "{eval CDR id}",
"paired_directive": "{directive_id}",
"title": "{title}",
"description": "{descriptor}",
"cases": [
{
"id": "PASS-001",
"type": "pass",
"scenario": "...",
"input_context": "...",
"expected_output": "...",
"actual_output": "...",
"reason": "..."
},
{
"id": "FAIL-001",
"type": "fail",
"scenario": "...",
"input_context": "...",
"expected_output": "...",
"actual_output": "...",
"reason": "...",
"correction": "..."
}
]
}
Step 4: Report
Eval goldenset published: evals/{directive_id}/goldset.md
Eval goldenset JSON: evals/{directive_id}/goldset.json
Phase 7: Skill Generation
Skip if --skip-skills or if all skill CDRs excluded.
For skill-type CDRs (or when --skill <name|CDR-id> is specified):
- Generate
skills/{name}/SKILL.md:
---
name: {name}
description: {description from CDR}
disable-model-invocation: true
---
# {name}
## What this skill does
{Summary}
## When to use
- {Trigger 1}
- {Trigger 2}
## Steps
1. {Step 1}
2. {Step 2}
## Example
{Minimal example}
## Verification
{How to verify}
## Related
- CDRs: {cdr_ref}
- Generate
skills/{name}/.skills-entry.json:
{
"name": "{name}",
"description": "{description}",
"version": "1.0.0",
"cdr_ref": "{cdr_ref}"
}
- Register in
.skills.json:
{
"local:./skills/{name}": {
"version": "1.0.0",
"description": "{description}",
"categories": ["..."]
}
}
- Update
AGENTS.mdSkills section with the new skill.
Phase 8: log.md Update (OKF §9)
For each accepted CDR whose module was written in Phase 5, append an entry to the relevant context_modules/<type>/log.md file (OKF §9 date-grouped format, newest first):
## {today}
* **Creation**: Added [{Title}](relative-path.md) — {one-line description}. CDR: {cdr_ref}.
If context_modules/<type>/log.md does not exist, create it with a # {Type} Update Log heading first.
CDR.md is no longer manually updated by publish. It is a derived artifact, auto-generated by /team-repair from the per-directory index.md files. After merging the PR, run /team-repair to regenerate CDR.md.
Phase 9: AGENTS.md Check
If AGENTS.md is missing, create it from a template.
Phase 10: Commit and PR
Verify files created, then follow the git decision tree:
Case A: team-ai-directives IS a git repo (TD_IS_GIT=true)
- Create branch (use
mainif it exists, otherwiseHEAD):
cd "$TEAM_AI_DIRECTIVES"
git checkout -b "levelup/$(basename "$REPO_ROOT")" main 2>/dev/null || git checkout -b "levelup/$(basename "$REPO_ROOT")"
- Commit:
git add -A
git commit -m "Add context modules from $(basename "$REPO_ROOT")
CDRs implemented:
- CDR-001: ...
- CDR-002: ...
"
- Check for a remote:
git remote get-url origin 2>/dev/null
4a. If remote "origin" exists AND gh CLI is available — push and create draft PR:
git push -u origin "levelup/$(basename "$REPO_ROOT")"
gh pr create --draft --title "Add context modules from $(basename "$REPO_ROOT")" --body "..."
4b. If remote "origin" exists but gh is NOT available — push only, tell user to open PR manually:
git push -u origin "levelup/$(basename "$REPO_ROOT")"
Report: "Pushed to origin/levelup/{project-name}. Open a PR manually at your Git host."
4c. If no remote exists — commit locally only. Report: "Committed to local branch levelup/{project-name}. Add a remote (git remote add origin <url>) and push when ready."
Case B: team-ai-directives is NOT a git repo (TD_IS_GIT=false)
Offer the user two options:
git init+ commit — initialize git, create an initial commit with the scaffold, then commit the new context modules:
cd "$TEAM_AI_DIRECTIVES"
git init
git add -A
git commit -m "Initial team-ai-directives scaffold"
git checkout -b "levelup/$(basename "$REPO_ROOT")"
git add -A
git commit -m "Add context modules from $(basename "$REPO_ROOT")"
Then follow steps 3–4 above (remote check).
- Write files only — skip all git operations. Files are written directly to the working tree. Report: "Files written to
{TEAM_AI_DIRECTIVES}. Initialize git and commit when ready."
Phase 11: Summary
## LevelUp Implement Summary
**Project**: {project-name}
**Branch**: levelup/{project-name}
**CDRs Implemented**: N
**CDRs Skipped (Signal Gate)**: M
### Artifacts Created
| Type | Count |
|---|---|
| Rules | N |
| Personas | N |
| Examples | N |
| Skills | N |
| Constitution Changes | N |
| Evals | N |
### PR Details
**URL**: {PR-URL}
**Status**: Draft
### Next Steps
1. Review PR
2. Merge when approved
3. Run `/team-repair` after merge to re-index and validate
Key Rules
Implement Only Accepted CDRs
- Status must be Accepted
- Discovered/Proposed/Rejected CDRs are skipped
Signal Gate
- Strict mode: skip CDRs without concrete evidence
- Skipped CDRs remain in local drafts for refinement
Cross-CDR Validation
- Stop on unresolved conflicts
- Require
/levelup-clarifyto resolve
Memory Engineering
- Published files include YAML frontmatter with OKF v0.2 families:
generated,verified(list),status,stale_after log.mdfiles track per-directory audit trail (OKF §9)CDR.mdis derived by/team-repairfromindex.mdfiles — not manually maintained
Context Modules Before log.md
- CRITICAL: Create ALL context module and skill files before appending to
log.md - Do not write
log.mdentries first and skip the actual modules
Workflow Guidance & Transitions
After /levelup-publish
After PR is merged in team-ai-directives, run /team-repair to:
- Migrate any remaining v0.1 frontmatter to v0.2 (always-on)
- Rebuild per-directory
index.mdandlog.mdfiles - Re-derive
CDR.mdflat table fromindex.mdfiles - Run conflict scanning
- Refresh verification timestamps
Complete CDR Lifecycle
/levelup-init or /levelup-specify
↓
/levelup-clarify
↓
/levelup-publish
↓
PR merged
↓
/team-repair --validate
Next Steps
After implementation, monitor the PR for review. Once merged, run /team-repair to validate the updated team AI directives.
Verification
- All accepted CDRs passed signal gate or were explicitly skipped
- Context module files created in
{TEAM_AI_DIRECTIVES}/context_modules/with OKF v0.2 frontmatter (generated,verifiedlist,status,stale_after) - Per-directory
index.mdentries appended (OKF §8 list format) - Per-directory
log.mdentries appended (OKF §9 date-grouped format) - Eval goldenset files created in
{TEAM_AI_DIRECTIVES}/evals/(for eval-type CDRs) - Skill directories created in
{TEAM_AI_DIRECTIVES}/skills/(unless skipped) .skills.jsonupdated with new skills- Draft PR created with proper description
- team-ai-directives working tree is clean after commit
- After merge: run
/team-repairto regenerate derivedCDR.mdfromindex.mdfiles
Context
$ARGUMENTS
Signals
- GitHub stars
- 133
- Forks
- 1
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
levelup-publish- Source
- github.com/tikalk/adlc-team-skills