Project-Template/START-HERE-Existing-Project.md

143 lines
7.2 KiB
Markdown
Raw Permalink Normal View History

docs: two start-here documents, one per kind of adoption Two kinds of project arrive at this template and neither had a document written for it. A new repository needs a first act. An existing one -- which is most of them, since eight were surveyed and one had adopted anything -- needs a merge, with documents and conventions already in place that must survive it. What existed was README's "Adopting it": seven steps aimed at a person reading top to bottom, silent about existing projects, and opening with the one form that destroys work: cp -r Projects/Template/docs <your-project>/docs cp -r overwrites. scaffold.sh exists precisely because that is unsafe, and its header argues the case at length: a clobbered document is work nothing notices is gone, silent when it happens and silent afterwards. An existing project following step 1 literally replaced its own architecture notes with placeholders. The instruction and the tool disagreed and the instruction was the dangerous one. Both documents hold one prompt each, written to be handed to an agent whole, and both open by putting it in PLAN MODE with nothing changed until the plan is approved. Each plan must name what will be created, what kept, what deleted, which scripts the project adopts -- and what will be left undone, by name. That last is the one that gets skipped: an adoption quietly missing the webhook or half the status headers looks identical to a complete one from outside. The existing-project prompt is the harder half. Its spine is survey, reconcile, destroy nothing: the survey IS the plan phase and is entirely read-only; the scaffold's "kept" list is the merge worklist; existing prose is the project's own knowledge and the template supplies shape, not content; and any markdown backlog moves into the tracker and is deleted in the same commit, because two records of what is open is the failure the whole convention exists to prevent. Verified rather than asserted, since the whole document rests on it: a scratch project with three written documents, scaffolded into, reported 16 created and 3 kept, and all three pre-existing files were byte-identical afterwards with their prose intact. README's section becomes a pointer to the two, since three descriptions of adoption in one repository is the two-records failure with an extra copy, and the sentence about the Command Center's generated prompt now says which is the source rather than leaving a reader to pick. Also corrected: README's `Governs: Projects/Template/**` was true when this was a folder inside Projects/ and matched nothing once it became a repository root. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 00:07:28 -05:00
# Existing Project — Start Here
```
Status: Current
Owner: _null
Last reviewed: 2026-08-18
Governs: how a project that already has documents and a tracker merges this template in
Review trigger: Any change to scaffold.sh's never-overwrite behaviour; any change
to the tracker conventions, the labels, or the status header fields
```
There are two of these documents. This one is for a repository that **already has
work in it** — documents, a tracker, conventions of its own, however partial. If
the repository is empty, use [Brand New Project — Start
Here](START-HERE-New-Project.md), which is a shorter and easier job.
The difference is not cosmetic. Adopting into an existing project is a **merge**,
and the failure it must not commit is destroying writing that nothing would
notice was gone: no test fails for an architecture note that used to say more,
there is no build to break, and if the file was never committed there is not even
a diff to read. It is silent when it happens and silent afterwards.
Hand the block below to an agent. It is written to be pasted whole.
## The prompt
```text
Merge the project template at <TEMPLATE> into this repository, which already has
work in it.
FIRST: enter plan mode. Survey, and change NOTHING until the plan is approved.
The survey is the plan — every step of it is read-only, and a merge proposed is a
conversation while a merge performed is a diff somebody has to audit.
THE SURVEY. Report what is actually here, changing nothing:
- Which of the template's documents already exist, under any name. A project
with ARCHITECTURE.md has an architecture document; it is not missing one.
- Whether a markdown backlog exists — TODO.md, ROADMAP.md, a batch ledger, a
checklist in the README. Name every file that lists work.
- The tracker: are the four labels present and spelled EXACTLY P0, P1, P2,
release-blocker? Any near-misses like p1 or "P1 - high"? How are milestones
named? How many issues sit outside any milestone?
- Which scripts already exist, and whether they overlap the template's.
- What README.md already claims about how this project works.
Read <TEMPLATE>/docs/DOC_TRUST_MAP.md and <TEMPLATE>/docs/TOOLS.md before
planning, so you know which document is supposed to own which answer.
Your plan must name, separately:
- every file you will CREATE
- every existing file you will KEEP AND RECONCILE — a different risk, listed apart
- anything you will DELETE, and a migrated backlog above all
- which scripts this project will adopt, and which it will not
- what you will deliberately leave undone, by name, and why
feat(plan): six sections every plan must name, and the files an agent reads first WORK_CYCLE.md covered only the end of the cycle. A cycle has two ends, and the same six questions kept having to be asked out loud on every piece of work. They are now mandatory in every plan, each justified by something this household has actually paid for: unified code eight copies of secrets.sh once existed here and five of seven could not detect the most common secret shape -- INCLUDING THE TEMPLATE, so every project scaffolded from it inherited a blind scanner error handling the recurring fault is the silent pass, not the crash logging an append-only log is unbounded by construction blind spots named ones get fixed landmine fixes the trap found while passing is cheapest to fix while passing hardcode little derive it, or justify the constant GUARDS.md was five sections behind the project that has been learning; 11, 12 and 13 are backported, genericised to match the template's style. 13 is the narrow form of the sixth rule, and WORK_CYCLE now cites it -- so backporting it is what makes that citation true rather than a broken reference. Also adds the three files an agent reads BEFORE it reads docs/: CLAUDE.md short, and it POINTS at DOC_TRUST_MAP rather than repeating it -- a second copy of the map is the failure that map exists to prevent. Carries the exit-code table, the commit gates, and two standing instructions: flag what looks wrong even when it is not what you were asked about, and never print a credential -- not from a file, not from a command's output, not from a config subtree "with the secrets filtered out", because that filter has failed before by matching key NAMES while the secret sat inside an object whose name was innocent .claudeignore excludes artifacts and NEVER docs/. The Command Center reads this repository's documents at a commit; a generic ignore file that sweeps "documentation" or "data" starves both the agent and the reconcile, and everything still runs, just blind .claude/settings.json deny rules in the double-slash absolute form. A tilde-style rule looks right in review and silently matches nothing. It closes the Read TOOL only -- a shell reads a file a hundred ways -- so it catches the accidental read, not the determined one scaffold.sh gains a ROOT array for the three, kept apart from DOCS so the H1-plus-status-block check stays meaningful rather than being loosened into a warning that is always wrong (GUARDS.md 5). Verified: scaffold --dry-run into a scratch repo creates 22 files including all three, with no HEADERLESS warning; doc-claims passes with 124 claimed paths, all present. Does not touch docs/architecture/scripts/secrets.sh, which carries someone else's uncommitted improvement.
2026-09-01 21:44:00 -05:00
- the six mandatory sections from <TEMPLATE>/docs/WORK_CYCLE.md: unified code,
error handling, logging, blind spots, rolled-in landmine fixes, and
hardcode-as-little-as-possible. Read them there rather than from this line —
a second copy of a list about not keeping second copies would be its own
punchline
docs: two start-here documents, one per kind of adoption Two kinds of project arrive at this template and neither had a document written for it. A new repository needs a first act. An existing one -- which is most of them, since eight were surveyed and one had adopted anything -- needs a merge, with documents and conventions already in place that must survive it. What existed was README's "Adopting it": seven steps aimed at a person reading top to bottom, silent about existing projects, and opening with the one form that destroys work: cp -r Projects/Template/docs <your-project>/docs cp -r overwrites. scaffold.sh exists precisely because that is unsafe, and its header argues the case at length: a clobbered document is work nothing notices is gone, silent when it happens and silent afterwards. An existing project following step 1 literally replaced its own architecture notes with placeholders. The instruction and the tool disagreed and the instruction was the dangerous one. Both documents hold one prompt each, written to be handed to an agent whole, and both open by putting it in PLAN MODE with nothing changed until the plan is approved. Each plan must name what will be created, what kept, what deleted, which scripts the project adopts -- and what will be left undone, by name. That last is the one that gets skipped: an adoption quietly missing the webhook or half the status headers looks identical to a complete one from outside. The existing-project prompt is the harder half. Its spine is survey, reconcile, destroy nothing: the survey IS the plan phase and is entirely read-only; the scaffold's "kept" list is the merge worklist; existing prose is the project's own knowledge and the template supplies shape, not content; and any markdown backlog moves into the tracker and is deleted in the same commit, because two records of what is open is the failure the whole convention exists to prevent. Verified rather than asserted, since the whole document rests on it: a scratch project with three written documents, scaffolded into, reported 16 created and 3 kept, and all three pre-existing files were byte-identical afterwards with their prose intact. README's section becomes a pointer to the two, since three descriptions of adoption in one repository is the two-records failure with an extra copy, and the sentence about the Command Center's generated prompt now says which is the source rather than leaving a reader to pick. Also corrected: README's `Governs: Projects/Template/**` was true when this was a folder inside Projects/ and matched nothing once it became a repository root. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 00:07:28 -05:00
Once the plan is approved:
1. SCAFFOLD, AND READ WHAT IT KEPT. The scaffold is the merge tool. It fills gaps
and reports every file that already exists as "kept", untouched, always:
SCAFFOLD_TEMPLATE_ROOT=<TEMPLATE> bash <TEMPLATE>/docs/architecture/scripts/scaffold.sh --dry-run --into .
SCAFFOLD_TEMPLATE_ROOT=<TEMPLATE> bash <TEMPLATE>/docs/architecture/scripts/scaffold.sh --into .
NEVER --force ON A PROJECT WITH REAL WRITING IN IT. That flag exists for a
tree scaffolded from a stale template and not yet written into. Here it
overwrites documents nothing will notice were lost.
NEVER `cp -r`. It has no such protection.
The "kept" list IS THE MERGE WORKLIST. Those files are the ones only a person
or a careful agent can reconcile.
2. RECONCILE, DO NOT REPLACE. For each kept document: the existing prose is this
project's own knowledge and the template supplies shape, not content. Add the
status header — Status, Owner, Last reviewed, Governs, Review trigger, and
Fires on where it applies — to what is already written. Move content to the
document the trust map says owns it, and say in your report where each thing
went.
If an existing document says something that contradicts the template's version
of the same document, the EXISTING one is probably right about this project.
Ask rather than overwriting.
3. MIGRATE ANY MARKDOWN BACKLOG INTO THE TRACKER, THEN DELETE THE MARKDOWN. This
is the single most valuable thing this merge does.
A list of open work in markdown beside a tracker holding the same work is two
records that will disagree, and nothing will say which is right. That has
already happened here: a tasks file drifted from the batch ledger and four
documents inherited a wrong batch number from it.
For each item: file an issue with a Verify: line, in a milestone. Then delete
the file IN THE SAME COMMIT as the issues being filed — a migration that
leaves the old copy in place has created the problem it was meant to solve.
Keep any reasoning worth keeping as narrative in docs/history/, which is a
record of then and cannot compete with a record of now.
4. THE LABELS. Rename near-misses rather than adding duplicates — a repository
with both "P1" and "p1" has its defects split across two queries and reports
as not adopted. Exactly: P0, P1, P2, release-blocker.
5. THE MILESTONES. Rename to the word-first form as you touch each one, not in a
sweep: "Batch 07 — Payments", not "0.7 Payments". A leading version token makes
the dashboard show only the version, and a comma in the title breaks the
milestones filter. Do not renumber history to make it tidy.
6. WRITE docs/DOC_TRUST_MAP.md LAST, once everything else is settled, and describe
what is ACTUALLY HERE rather than what the template says should be. Its whole
value is being accurate about the others.
Where this project deliberately keeps a document out of git, declare it there
with an Exempt: line naming the real path. Note that those lines are read by a
checker: outside a code fence, an Exempt: line naming a real document is a live
declaration, not an example.
7. THE REST OF ADOPTION is the same as a new project, and
START-HERE-New-Project.md has it in full: the hooks, check-env.sh,
secrets.sh --tracked, the branding issue rather than invented placeholders,
mapping on the Command Center and registering the webhook, and the first QA
run-state. Do not re-derive them from memory.
FINALLY: report what you merged, where each thing went, and — separately and
explicitly — WHAT YOU DID NOT MERGE AND WHY. A merge that silently drops
something is worse than one that stops and asks, because the second is a question
and the first is a loss nobody will discover.
```
## The three questions this usually raises
- **"This project already has a document that does this job."** Keep it. Add the
header, and record in the trust map that it is the one that owns the subject.
- **"There is a backlog in markdown."** It moves to the tracker and the file goes.
That is the whole point of the convention, and the one step people skip.
- **"Some of the template does not apply."** Then delete it. A document that never
applied is noise; entries marked *(only for a deployed service)* and
*(only where money moves)* are there to be removed by projects they do not fit.