Codync
A free, open-source 1:1 alternative to Grok Bot and Muse. Message Claude Code, Codex, Cursor and 40+ coding agents as persistent bots from your iPhone, Mac or Linux desktop. Group chats, threads, appr
Simplified epistemic spec repo: every requirement says 'because' and cites the facts or assumptions it rests on. One script checks, traces impact and renders to Markdown/Gherkin.
Developer toolsJavaScript · PythonGitHub @jvanheerikhuizeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Specs for agentic software development that are honest about what they know.
Most specs mix verified truths with guesswork and never say which is which. Here, every requirement says because and names the facts or assumptions it rests on. What nobody can answer yet is written down as an open question, so the gap is visible instead of guessed. A check makes sure that no requirement is more certain than its grounds.
Facts → requirements → specs.
This is the simplified version of the original engine, which is kept in the target_state branch. It keeps the same principles with 5 record types instead of 10 and one script instead of a toolchain.
Each picture adds one idea to the one before.
Facts → requirements → specs. A requirement holds only if the facts it rests on hold, and a spec holds only if its requirements hold. A spec is therefore never more certain than the least certain thing underneath it, and an unanswered question is less certain than any assumption, because there is not even a guess to test. Everything else in this repo (the because links, the open questions, the provisional/broken statuses, the impact trace) follows from this.
It is an axiom, so it is stated here to be checked, not taken on faith:
FCT and ASM here.flowchart LR
ASM["Assumption (ASM)"] -->|"validated, promoted to"| FCT["Fact (FCT)"]
FCT -->|"because"| REQ["Requirement (REQ)"]
ASM -.->|"because (provisional)"| REQ
QST["Open question (QST)"] -.->|"blocks (provisional)"| REQ
FCT -->|"answers"| QST
ASM -.->|"answers"| QST
REQ -->|"grouped into"| SPC["Spec (SPC)"]
SPC -->|"render"| OUT["Markdown / Gherkin / ..."]
| Record | Means | Statuses |
|---|---|---|
ASM Assumption | Something we believe but have not proven, with a plan to validate it | open → validated (promoted to a fact) or invalidated |
FCT Fact | Something we know, with evidence | active, deprecated |
QST Question | A gap with no candidate answer yet. It blocks requirements or specs until it is answered_by a fact or assumption | open → answered |
REQ Requirement | What the system MUST/SHOULD do, because of facts/assumptions, with Given/When/Then acceptance | provisional, active, broken |
SPC Spec | A group of requirements, either the walking skeleton or a feature on top of it | draft, active |
provisional. If that assumption is refuted, the requirement is broken. Only requirements resting on facts can be active.provisional, and rendered specs list it next to the requirement, so an implementing agent asks instead of guessing.records/, with a stable ID and links in YAML front matter. This gives clean diffs, no merge conflicts, and files agents can read easily.skeleton spec delivers the end-to-end core, and feature specs depends_on it. When a fact changes, impact lists the specs to rebuild in that order.pip install -r requirements.txt
python tools/spec.py check --strict # links, epistemic gates, open questions, spec DAG
python tools/spec.py impact FCT-0001 # what to revisit when FCT-0001 changes
python tools/spec.py render --tier skeleton # write dist/SPC-*.md
python tools/spec.py render --format gherkin # write dist/SPC-*.feature
python tools/spec.py index # write site/data/index.json for the workspace
python -m unittest discover -s tests # one test per acceptance scenario
Example output:
18 records · 0 errors · 0 warnings
SPC-0001 [skeleton] 100% ready Record graph and epistemic check
SPC-0002 [feature ] 0% ready Rendering and guardrails
https://jvanheerikhuize.github.io/asdlc-meta-specs/ is a small static site in site/ (one HTML page, one script, no build step). It is rebuilt and deployed on every push to main.
Local preview: python tools/spec.py index && python -m http.server -d site 8000.
To enable Pages on a fork: Settings → Pages → Source: GitHub Actions.
Copy a record of the same type, take the next free ID, name the file <ID>-<slug>.md, and run check.
---
id: REQ-0008
title: Short, behavioural title
status: provisional # open assumption in `because` → provisional
because: [FCT-0001, ASM-0002]
---
## Statement
The system MUST ...
## Acceptance
- Given ...
- When ...
- Then ...
To validate an assumption: add a FCT with evidence and promoted_from: ASM-xxxx, then set the assumption to status: validated with promoted_to: FCT-xxxx. The check then asks dependent requirements to cite the fact instead, after which they can become active.
To ask a question: add a QST with status: open and blocks: [REQ-xxxx]. Everything it blocks stays provisional (requirements) or draft (specs) until it is answered. To answer it, record the answer as a fact or an assumption, set the question to status: answered with answered_by: <that ID>, and add the answer to the because of each requirement it blocked. The workspace lists these edits for you.
The records in records/ are the spec for this repository. The skeleton (SPC-0001) is fully grounded in facts and active. The feature spec (SPC-0002) is still draft, because its requirements rest on three open assumptions and one open question (QST-0002: which formats do the agent tools we target actually read?). That is the point: the spec shows where its own knowledge stops.
records/ all records, one file each (ASM, FCT, QST, REQ, SPC)
tools/spec.py check · impact · render · index
site/ the Pages workspace (index.html, app.js, styles.css)
docs/concepts/ the six pictures above
ROADMAP.md from this starting point to the target state
tests/ one test per acceptance scenario
This repository is the starting point. The full original engine is kept in the target_state branch, and ROADMAP.md explains how to grow towards it: one evidence-backed step at a time.