feat: add fail-closed stack update protocol - #99
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b0769cc7c8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| {"name":"a0p-instancing","path":"a0p-instancing/SKILL.md","kind":"procedural","description":"Methodology for instancing agents in a0-betatest (the a0p research instrument), whose model diverges from canonical a0. Load this when adding or changing an AgentInstance / CharacterSheet CRUD path, a per-instance native ZFAE weight bank or its training/distillation loop, a ZFAE inference mode, a sentinel evaluation or pending-override gate, a per-agent safetensors checkpoint, or volatile sub-context memory — anywhere under a0-betatest `backend/`. Use it before writing code that creates, addresses, trains, runs, governs, or persists an a0p agent, so the code follows a0p's per-user CRUD + native-ZFAE + sentinel model instead of a0's spawn/fork/merge model. For canonical a0 and its mirror a0ucns, use `agent-instantiation` instead — a0p does NOT have `sub_agent_spawn`, a spawn executor, or `InstanceMerge`."}, | ||
| {"name":"plain-lens","path":"plain-lens/SKILL.md","kind":"procedural","description":"Building a plain-language, multi-lens companion view of dense canonical text — an easier on-ramp that does not replace or talk down to the source. Load this when you are asked to make an informationally dense document (canon, spec, articles, legal/normative text) easier to approach for newcomers; when building an \"explain it through the lens of X\" selector (domain, audience, or role); when designing progressive-disclosure or layered ELI-not-stupid reading UX; when a dynamic, data-driven site must keep its existing static page as a graceful fallback; or when you need an EDCM-style two-speaker tension reading between a body text and its footnotes/caveats. Use this when the risk is either drowning readers in density or insulting them with oversimplification."}, | ||
| {"name":"thought-lens","path":"thought-lens/SKILL.md","kind":"procedural","description":"Translate raw, context-heavy, recursive, fragmentary, coined, or private-language thought into audience-legible language without changing the underlying claim. Load this when a user says people do not understand what they mean; asks to make a thought understandable to strangers, the public, a specific audience, or a platform; supplies dense notes rather than finished prose; needs jargon or coined terms introduced only after their ordinary-language meaning lands; or wants multiple audience/surface renderings from one thought. Do not load merely to polish finished prose or to simplify an already-stable canonical document; use ordinary editing for the former and plain-lens for the latter."}, | ||
| {"name":"thought-lens","path":"thought-lens/SKILL.md","kind":"procedural","description":"Translate raw, context-heavy, recursive, fragmentary, coined, or private-language thought into audience-legible language without changing the underlying claim. Load this when a user says people do not understand what they mean; asks to make a thought understandable to strangers, the public, a specific audience, or a platform; supplies dense notes rather than finished prose; needs jargon or coined terms introduced only after their ordinary meaning lands; or wants multiple audience/surface renderings from one thought. Do not load merely to polish finished prose or to simplify an already-stable canonical document; use ordinary editing for the former and plain-lens for the latter."}, |
There was a problem hiding this comment.
Keep the thought-lens description synchronized
This changes only the indexed thought-lens description from “ordinary-language meaning” to “ordinary meaning,” while its canonical thought-lens/SKILL.md frontmatter remains unchanged. The exact-equality assertion in test_index_descriptions_match_canonical_frontmatter and the CI drift checker therefore fail on every run; restore the canonical text here or update both authoritative surfaces together.
AGENTS.md reference: AGENTS.md:L66-L67
Useful? React with 👍 / 👎.
| {"name":"epac-selection-display","path":"epac-selection-display/SKILL.md","kind":"procedural","description":"Evidence-bound EPAC target selection and display for WebMCP handoffs and other human-facing surfaces. Load this when choosing an EPAC element, molecule, construction receipt, comparison result, or available visualization to present; when preparing a receipt-backed EPAC display packet; when exposing the EPAC workflow as a selectable WebMCP skill; or when a requested EPAC display would require missing or invented geometry so the request can be refused or downgraded to verified source-backed output. Do not load to select EPAC or a UCNS candidate as canon, or for unrelated WebMCP catalogue changes."}, | ||
| {"name":"the-interdependency","path":"the-interdependency/SKILL.md","kind":"procedural","description":"Protocol and workflow for all tasks involving The Interdependency organization, its repositories, The Interdependent Way projects, EDCMBONE transcript analysis, code building, research, GitHub maintenance and updates. Load this whenever the task or context touches The-Interdependency assets, or on phrases like \"assemble edcmbone transcripts for analysis\", \"write code that...\", or any GitHub/research/build work on org projects."}, | ||
| {"name":"interdependent-work-graph","path":"interdependent-work-graph/SKILL.md","kind":"procedural","description":"Cross-repository coordination for The Interdependency. Load this when a task spans, consumes, compares, publishes to, or can change the contract between two or more repositories; when an agent is about to choose one repo as its workspace for a stack-level problem; when exact producer, evidence-source, skill, semantic, mathematical, or measurement identities must travel together; or when creating a shared stack manifest, multi-repo handoff, coordinated release, or cross-repo validation plan."}, | ||
| {"name":"stack-update","path":"stack-update/SKILL.md","kind":"procedural","depends_on":["the-interdependency","interdependent-work-graph"],"description":"Fail-closed update protocol for The-Interdependency/stack. Load this when a stack change adds, moves, extracts, graduates, renames, removes, or changes the authority, relation, source identity, or placement of a participant, research workspace, libs pin, BASE record, stack manifest entry, or architecture description; when stack-manifest.json, STACK_MANIFEST.md, README.md, or research BASE.json files may drift from one another; or when validating that a structural stack change is complete before commit or merge."}, |
There was a problem hiding this comment.
Drop depends_on from the procedural skill entry
Because stack-update is declared as procedural, the existing test_kind_is_known_and_dependencies_match_kind contract rejects the presence of any depends_on field, so the repository's unit-test CI fails unconditionally. The companion skills are already specified in the new skill's prose; omit this metadata field unless the index schema and its tests are deliberately revised.
Useful? React with 👍 / 👎.
| {"name":"epac-selection-display","path":"epac-selection-display/SKILL.md","kind":"procedural","description":"Evidence-bound EPAC target selection and display for WebMCP handoffs and other human-facing surfaces. Load this when choosing an EPAC element, molecule, construction receipt, comparison result, or available visualization to present; when preparing a receipt-backed EPAC display packet; when exposing the EPAC workflow as a selectable WebMCP skill; or when a requested EPAC display would require missing or invented geometry so the request can be refused or downgraded to verified source-backed output. Do not load to select EPAC or a UCNS candidate as canon, or for unrelated WebMCP catalogue changes."}, | ||
| {"name":"the-interdependency","path":"the-interdependency/SKILL.md","kind":"procedural","description":"Protocol and workflow for all tasks involving The Interdependency organization, its repositories, The Interdependent Way projects, EDCMBONE transcript analysis, code building, research, GitHub maintenance and updates. Load this whenever the task or context touches The-Interdependency assets, or on phrases like \"assemble edcmbone transcripts for analysis\", \"write code that...\", or any GitHub/research/build work on org projects."}, | ||
| {"name":"interdependent-work-graph","path":"interdependent-work-graph/SKILL.md","kind":"procedural","description":"Cross-repository coordination for The Interdependency. Load this when a task spans, consumes, compares, publishes to, or can change the contract between two or more repositories; when an agent is about to choose one repo as its workspace for a stack-level problem; when exact producer, evidence-source, skill, semantic, mathematical, or measurement identities must travel together; or when creating a shared stack manifest, multi-repo handoff, coordinated release, or cross-repo validation plan."}, | ||
| {"name":"stack-update","path":"stack-update/SKILL.md","kind":"procedural","depends_on":["the-interdependency","interdependent-work-graph"],"description":"Fail-closed update protocol for The-Interdependency/stack. Load this when a stack change adds, moves, extracts, graduates, renames, removes, or changes the authority, relation, source identity, or placement of a participant, research workspace, libs pin, BASE record, stack manifest entry, or architecture description; when stack-manifest.json, STACK_MANIFEST.md, README.md, or research BASE.json files may drift from one another; or when validating that a structural stack change is complete before commit or merge."}, |
There was a problem hiding this comment.
Generate the Codex adapter for stack-update
Registering this skill without committing skills/stack-update/SKILL.md leaves it absent from the Codex plugin discovery tree. python tools/build_codex_plugin_skills.py --check reports missing: skills/stack-update/SKILL.md, and both that explicit CI step and test_codex_plugin_adapters_match_every_canonical_skill fail; generate and commit the adapter with the index change.
AGENTS.md reference: AGENTS.md:L69-L75
Useful? React with 👍 / 👎.
| {"name":"epac-selection-display","path":"epac-selection-display/SKILL.md","kind":"procedural","description":"Evidence-bound EPAC target selection and display for WebMCP handoffs and other human-facing surfaces. Load this when choosing an EPAC element, molecule, construction receipt, comparison result, or available visualization to present; when preparing a receipt-backed EPAC display packet; when exposing the EPAC workflow as a selectable WebMCP skill; or when a requested EPAC display would require missing or invented geometry so the request can be refused or downgraded to verified source-backed output. Do not load to select EPAC or a UCNS candidate as canon, or for unrelated WebMCP catalogue changes."}, | ||
| {"name":"the-interdependency","path":"the-interdependency/SKILL.md","kind":"procedural","description":"Protocol and workflow for all tasks involving The Interdependency organization, its repositories, The Interdependent Way projects, EDCMBONE transcript analysis, code building, research, GitHub maintenance and updates. Load this whenever the task or context touches The-Interdependency assets, or on phrases like \"assemble edcmbone transcripts for analysis\", \"write code that...\", or any GitHub/research/build work on org projects."}, | ||
| {"name":"interdependent-work-graph","path":"interdependent-work-graph/SKILL.md","kind":"procedural","description":"Cross-repository coordination for The Interdependency. Load this when a task spans, consumes, compares, publishes to, or can change the contract between two or more repositories; when an agent is about to choose one repo as its workspace for a stack-level problem; when exact producer, evidence-source, skill, semantic, mathematical, or measurement identities must travel together; or when creating a shared stack manifest, multi-repo handoff, coordinated release, or cross-repo validation plan."}, | ||
| {"name":"stack-update","path":"stack-update/SKILL.md","kind":"procedural","depends_on":["the-interdependency","interdependent-work-graph"],"description":"Fail-closed update protocol for The-Interdependency/stack. Load this when a stack change adds, moves, extracts, graduates, renames, removes, or changes the authority, relation, source identity, or placement of a participant, research workspace, libs pin, BASE record, stack manifest entry, or architecture description; when stack-manifest.json, STACK_MANIFEST.md, README.md, or research BASE.json files may drift from one another; or when validating that a structural stack change is complete before commit or merge."}, |
There was a problem hiding this comment.
Add stack-update to every required catalog
Adding this index entry without updating README.md, ORG_DISTRIBUTION.md, AGENTS.md, and CLAUDE.md leaves the repository's declared catalogs inconsistent. The checked python tools/check_skill_lib_drift.py --warnings-fail command reports two errors and two warnings for these omissions, while the unit suite separately fails because the README lacks the skill link, so the new skill and its catalog updates need to land together.
AGENTS.md reference: AGENTS.md:L79-L87
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ae5203371d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| {"name":"llms-build","path":"llms-build/SKILL.md","kind":"metadata-block","depends_on":["msdmd"],"description":"Self-declaring LLM instructions file (llms.txt) built on msdmd. Modules or central files declare LLMS blocks with project overview, key definitions, architecture summary, and agent usage rules. A runner aggregates them into a standardized root llms.txt and surfaces drift/gaps. Load this when creating, updating, or maintaining llms.txt for any repo consumed by LLMs or agents."}, | ||
| {"name":"char-compress","path":"char-compress/SKILL.md","kind":"procedural","description":"Character-based context compression for agent handoff and skill writing, owned as a skill-lib procedure rather than current UCNS mathematics. Use this when compressing a long thread, document, repo audit, canon handoff, or agent working-memory state; when a context window is filling and operative facts must survive; when writing a SKILL.md that should be flesh-dense and bone-sparse; or when checking whether a compression deleted negation, order, quantifier, operator, named object, value, decision, or unresolved hmmm. Historical bone/flesh and text-stack terminology is local compression notation, not a UCNS theorem/status transfer, EDCM constructor, or edcmbone metric implementation."}, | ||
| {"name":"visitor-intro","path":"visitor-intro/SKILL.md","kind":"procedural","description":"Onboarding tour for visitors arriving at any The-Interdependency repo. Load this when an unfamiliar user asks \"what is this?\", \"what is The Interdependency?\", \"how do these repos fit together?\", \"where do I start?\", or otherwise signals they are new to the org. Gives the agent a consistent, repo-aware way to orient a newcomer without inventing facts."}, | ||
| {"name":"visitor-intro","path":"visitor-intro/SKILL.md","kind":"procedural","description":"Onboarding tour for visitors arriving at any The-Interdependency repo. Load this when an unfamiliar user asks \"what is this?\", \"what is The Interdependency?\", \"how do these repos fit together?\", \"where do I start?\", or otherwise signals they are new to the org. Gives the agent a consistent, repo-aware way to orient a newcomer without inventing org-level facts."}, |
There was a problem hiding this comment.
Restore the canonical visitor-intro description
The changed index entry appends org-level, while visitor-intro/SKILL.md still ends with “without inventing facts.” Because the repository asserts exact equality between indexed and canonical frontmatter descriptions, both python -m unittest discover -s tests and the drift gate fail on every run. Unlike the earlier thought-lens report, fresh evidence in this reviewed tree shows the mismatch now affects visitor-intro; restore the canonical text here or update both authoritative surfaces together.
AGENTS.md reference: AGENTS.md:L65-L67
Useful? React with 👍 / 👎.
| 2. Load `project-incubation-graduation` when extraction, release, reconsumption, | ||
| graduation, or implementation-authority transition is involved. |
There was a problem hiding this comment.
Restrict the graduation companion to incubated candidates
When a stack change transfers implementation authority for something that was not an emergent candidate—for example, a repository split done only for permissions or team organization—this clause still requires project-incubation-graduation, even though that skill's non-trigger explicitly excludes such splits in project-incubation-graduation/SKILL.md lines 35–41. Its qualification, release, and reconsumption lifecycle would consequently misclassify or block a structural transfer it does not govern; limit this companion requirement to components born in a forge and actually undergoing graduation.
AGENTS.md reference: AGENTS.md:L163-L163
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 00a7347012
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| 10. **Commit the transaction.** The structural mutation and its required projections | ||
| belong in one coherent PR/merge sequence. If a necessary authority is unavailable, | ||
| preserve the boundary as `hmmm`; do not guess it into consistency. |
There was a problem hiding this comment.
Keep validation-only runs read-only
When the skill is activated by its explicit validation trigger rather than a request to perform the update, this unconditional final step still directs the agent to commit structural mutations and projection changes. Because the workflow has no assessment-versus-execution authorization gate, a request such as “validate whether this stack change is complete” can result in unauthorized edits or commits; define a read-only validation path and require explicit mutation and commit authorization before entering this step.
AGENTS.md reference: AGENTS.md:L171-L171
Useful? React with 👍 / 👎.
| 5. **Remove superseded claims.** A newly separated owner requires the prior owner to | ||
| stop claiming that responsibility in every stack-level authority projection. | ||
| Do not merely add the new owner alongside stale text. |
There was a problem hiding this comment.
Defer old-owner removal until graduation completes
For an incubated component that has only been extracted or released, this step removes the forge's authority claim too early. The required companion contract in project-incubation-graduation/SKILL.md keeps the candidate owned by the forge until reconsumption and the authorized graduation transition complete; removing the prior claim at initial separation leaves the stack projections with a false authority assignment or no current owner. Gate this removal on completed graduation rather than separation alone.
AGENTS.md reference: AGENTS.md:L163-L163
Useful? React with 👍 / 👎.
Adds
stack-update, a procedural skill for structural changes toThe-Interdependency/stack.It specializes
interdependent-work-graphand makes participant, authority, relation, lifecycle, placement, manifest, and BASE changes one fail-closed transaction. The skill requires deterministic work-graph digest validation plus stack-side consistency enforcement before merge.Distribution is complete in this PR: canonical
stack-update/SKILL.md,skills.json, README, ORG distribution, AGENTS/CLAUDE guidance, and the generated Codex adapter are synchronized.First regression target: English Gonol separation must remove stale EDCM text-construction authority while preserving explicit source identities and non-transfer boundaries.
Validation: hygiene PASS; full
skill-lib-ciPASS, including unit, drift, compliance, and generated-adapter gates.hmmm: stack becomes an active vendoring consumer after the paired stack PR lands with an exact source-commit receipt.