diff --git a/STANDARDS.md b/STANDARDS.md index d34ebb1..fdbcfc4 100644 --- a/STANDARDS.md +++ b/STANDARDS.md @@ -192,13 +192,18 @@ first impression, not last word. Treat it accordingly. ASCII diagram of the data flow / architecture is a satisfying substitute. A wall of text is not. - **One quick example**, 5–15 lines, that a reader can run right - after install. Don't catalogue every variant. + after install. Don't catalogue every variant. *(Not applicable to + research lines — see + [`project-type/RESEARCH-LINE.md`](project-type/RESEARCH-LINE.md) §2; + they carry `## Run it` plus a captured trace instead.)* - **Capability bullets**, not API tables. README lists *what you can do*; `docs/API.md` lists *every public symbol*. - **Deflect to `docs/`** for depth — API reference, recipes, migration, architecture. Each link gets a one-line description. - **Family table** (sibling Codechu packages) so visitors find the - ecosystem. + ecosystem. *(Not applicable to research lines — they are not + published to a registry; name the sibling relationship in a sentence + and link the repository.)* - **License + credits** at the bottom. **Explicit prohibitions in README:** @@ -226,8 +231,34 @@ assets/ By v0.1.0 the README must not be text-only. Either inline a Mermaid block or reference an `assets/` file. The per-project-type docs -(`project-type/LIBRARY.md`, `project-type/APPLICATION.md`) restate -this rule with type-specific skeletons. +([`project-type/LIBRARY.md`](project-type/LIBRARY.md), +[`APPLICATION.md`](project-type/APPLICATION.md), +[`RESEARCH-LINE.md`](project-type/RESEARCH-LINE.md)) restate this rule +with type-specific skeletons. + +**Rendering rules (measured, not assumed).** Each of these was found by +rendering a README through `gh api /markdown` and looking at the page; +none of them are visible while reading the markdown source. + +- **The README is not the fold on a GitHub repository page.** *Measured + on a 1090 px-wide capture: the README began ~1080 px down; the first + screen is the file listing and the About box.* Consequence: the repo + **description and topics** — settings, not files — are the most-read + text on the page, and no amount of README work reaches them. Set + them, and make sure the topics do not contradict the description. +- **Two blockquote lines in one paragraph collapse into one line.** End + the first with a trailing `
`. *Incident: a two-line epigraph had + been rendering as a single running sentence since the day it was + written.* +- **Every badge is a link.** A badge pointing nowhere is decoration + wearing the costume of a signal. *Incident: three of four badges in + one README were dead images.* +- **Command lines must fit the column** — under ~60 characters. GitHub + does not wrap inside a code fence; it clips. *Incident: the first + command a reader saw rendered as `# 80 tests, no networ`.* +- **Fence every typable thing with a language tag.** An indented + four-space block renders as a bare `
` with no highlighting;
+  reserve indentation for non-typable ASCII.
 
 ### 7.2 Research & reference subtree (`docs/research/`)
 
@@ -427,7 +458,7 @@ layers extend it:
 
 | Layer | Path | Scope |
 |---|---|---|
-| Project type | [`project-type/`](project-type/) | Library vs application, any language |
+| Project type | [`project-type/`](project-type/) | Library, application, or research line; any language |
 | Language | [`lang//`](lang/) | Per-language extensions (Python today) |
 
 Read in order: STANDARDS → project-type → lang.
diff --git a/STANDARDS.tr.md b/STANDARDS.tr.md
index db7385b..13e180d 100644
--- a/STANDARDS.tr.md
+++ b/STANDARDS.tr.md
@@ -195,13 +195,17 @@ gördüğü ilk şey — son söz değil, ilk izlenim. Buna göre davran.
   ASCII diyagram doyurucu bir alternatiftir. Düz metin duvarı kabul
   edilemez.
 - **Tek hızlı örnek**, 5–15 satır, kurulumdan hemen sonra
-  çalıştırılabilir olsun. Her varyantı sıralama.
+  çalıştırılabilir olsun. Her varyantı sıralama. *(Araştırma hatları
+  için geçersiz —
+  [`project-type/RESEARCH-LINE.md`](project-type/RESEARCH-LINE.md) §2;
+  onun yerine `## Run it` + gerçek yakalanmış iz gelir.)*
 - **Yetenek bullet'ları**, API tabloları değil. README *yapabildiklerini*
   listeler; `docs/API.md` *her public sembolü* listeler.
 - **`docs/`'a yönlendir** — API referansı, recipe'ler, migration,
   mimari için. Her link tek satır açıklama ile gelsin.
 - **Family tablosu** (kardeş Codechu paketleri) — ziyaretçi
-  ekosistemi bulabilsin.
+  ekosistemi bulabilsin. *(Araştırma hatları için geçersiz — registry'ye
+  yayımlanmıyorlar; kardeşlik tek cümleyle söylenir ve repo linklenir.)*
 - **Lisans + credits** en altta.
 
 **README'de açık yasaklar:**
@@ -229,9 +233,34 @@ assets/
 
 v0.1.0 itibarıyla README sadece-metin olamaz. Ya inline bir Mermaid
 bloğu ya da `assets/` referansı şart. Proje-tipi rehberleri
-(`project-type/LIBRARY.md`, `project-type/APPLICATION.md`) bu kuralı
+([`project-type/LIBRARY.md`](project-type/LIBRARY.md),
+[`APPLICATION.md`](project-type/APPLICATION.md),
+[`RESEARCH-LINE.md`](project-type/RESEARCH-LINE.md)) bu kuralı
 tip-spesifik iskeletlerle yeniden ifade eder.
 
+**Render kuralları (ölçüldü, varsayılmadı).** Aşağıdakilerin hepsi bir
+README'yi `gh api /markdown` ile render edip sayfaya BAKARAK bulundu;
+hiçbiri markdown kaynağı okunurken görünmüyor.
+
+- **GitHub repo sayfasında fold README değildir.** *1090 px genişlikte
+  ölçüldü: README ~1080 px aşağıda başlıyor; ilk ekran dosya listesi ve
+  About kutusu.* Sonuç: repo **description ve topics** — dosya değil,
+  ayar — sayfanın en çok okunan metnidir ve README ne kadar iyi olursa
+  olsun oraya ulaşmaz. İkisini de doldur, ve topic'ler description ile
+  çelişmesin.
+- **Aynı paragraftaki iki blockquote satırı tek satıra çöker.** İlkinin
+  sonuna `
` koy. *Vaka: iki satırlık bir beyit, yazıldığı günden beri + tek akan cümle olarak render ediliyordu.* +- **Her badge link olmalı.** Hiçbir yere gitmeyen badge, sinyal + kostümü giymiş süstür. *Vaka: bir README'de dört badge'in üçü ölü + görseldi.* +- **Komut satırları sütuna sığmalı** — ~60 karakterin altında. GitHub + code fence içinde sarmaz, keser. *Vaka: okurun gördüğü ilk komut + `# 80 tests, no networ` olarak render oldu.* +- **Yazılabilir her şey dil etiketli fence içinde.** Dört boşlukla + girintilenmiş blok çıplak `
` olarak render olur, highlight almaz;
+  girintiyi yalnız yazılamayan ASCII için sakla.
+
 ### 7.2 Araştırma & referans alt-ağacı (`docs/research/`)
 
 Bir karar dış literatüre veya bir ajanın eğitim verisinden yeni olabilecek
diff --git a/project-type/README.md b/project-type/README.md
index b7073fb..c1f6337 100644
--- a/project-type/README.md
+++ b/project-type/README.md
@@ -1,12 +1,13 @@
 # Project-type conventions (language-agnostic)
 
-Cross-cutting rules for the two kinds of thing Codechu builds.
+Cross-cutting rules for the kinds of thing Codechu builds.
 Language-specific extensions live in [`lang/`](../lang/).
 
 | Project type | Definition | Conventions |
 |---|---|---|
 | **Library** | Reusable component published to a package registry, consumed by other software | [LIBRARY.md](LIBRARY.md) |
 | **Application** | End-user product installed and run by a human | [APPLICATION.md](APPLICATION.md) |
+| **Research line** | A method, the pipeline that runs it, and an honest verdict about whether it works | [RESEARCH-LINE.md](RESEARCH-LINE.md) |
 | **Proprietary library** | Closed-source / source-available library sold to customers | [PROPRIETARY-LIBRARY.md](PROPRIETARY-LIBRARY.md) |
 | **Proprietary application** | Closed-source / source-available end-user application | [PROPRIETARY-APPLICATION.md](PROPRIETARY-APPLICATION.md) |
 
@@ -25,6 +26,7 @@ codechu-org/
 ├── project-type/
 │   ├── LIBRARY.md                     # any library (OSS-friendly)
 │   ├── APPLICATION.md                 # any app (OSS-friendly)
+│   ├── RESEARCH-LINE.md               # method + pipeline + verdict
 │   ├── PROPRIETARY-LIBRARY.md         # closed-source library extras
 │   └── PROPRIETARY-APPLICATION.md     # closed-source app extras
 └── lang/
diff --git a/project-type/RESEARCH-LINE.md b/project-type/RESEARCH-LINE.md
new file mode 100644
index 0000000..6b2890e
--- /dev/null
+++ b/project-type/RESEARCH-LINE.md
@@ -0,0 +1,224 @@
+# Research-Line Conventions (language-agnostic)
+
+Rules that apply to any Codechu **research line**: a method, the
+pipeline that runs it, and an honest verdict about whether it works.
+Language-specific extensions live under
+[`lang//`](../lang/).
+
+Read first: [`STANDARDS.md`](../STANDARDS.md).
+
+## 1. What makes a repository this type
+
+A research line is a repository whose product is a **finding**. The
+code exists to make the finding reproducible, and the honest status of
+the finding is a first-class deliverable rather than a caveat at the
+bottom.
+
+Three questions place a repo here — all three must be yes:
+
+| Question | Research line |
+|---|---|
+| Is there something to install and call from other software? | No |
+| Does a human open it as a product? | No |
+| Does it publish a verdict that could come out negative? | **Yes** |
+
+Anything that answers yes to the first is a [library](LIBRARY.md);
+yes to the second, an [application](APPLICATION.md).
+
+## 2. Two §7.1 rules do not apply here
+
+[STANDARDS §7.1](../STANDARDS.md#71-readme-is-the-vitrine) is written
+for things that ship as packages. Two of its bullets have no referent
+in a research line, and forcing them produces a dishonest README:
+
+- **"One quick example, 5–15 lines, that a reader can run right after
+  install."** There is nothing to install, and a line whose product is
+  a verdict cannot honestly promise that five lines produce a result.
+  Replace it with **§4's `## Run it`**: one command that runs today,
+  offline, followed by a real captured trace.
+- **"Family table (sibling Codechu packages)."** What ties siblings
+  here is a shared method and identity, not a registry namespace. A
+  package table would list nothing. Say the relationship in a sentence
+  and link the sibling repository.
+
+Every other §7.1 rule and every §7.1 prohibition still holds.
+
+## 3. The three obligations, in order
+
+1. **Classify** — what kind of artefact, in what runtime, for whom.
+   The reader gets five seconds.
+2. **Enable** — one command that runs today, with nothing bought and
+   nothing installed beyond the repository.
+3. **Let them judge** — the real output and the honest status, without
+   digging.
+
+Doctrine is the fourth thing. In this repository type doctrine is the
+substance and is never cut, but it is *justification*, and
+justification is only legible once the reader knows what is being
+justified. **Every doctrinal passage follows the concrete thing it
+defends.**
+
+## 4. README is the vitrine — research-line skeleton
+
+```markdown
+[hero image — ONE, 

] + +# Repo-Name + +[badge row — ALL badges on ONE source line, EVERY badge linked] + +*[tagline — one italic sentence]* + +[lede — 3–5 sentences: what it is, what goes in, what comes out, who + scores it. MUST contain the noun that classifies it: "Python", + "CLI", "stdlib-only"] + +[status stamp — ONE line carrying the strongest single number, + linking down to ## Status] + +## Run it fenced + language-tagged, <= 6 lines, offline, + followed immediately by a REAL captured trace +## What it refuses the verdict / refusal table — strongest asset, early +## how a run proceeds; doctrine attached here +## the part a reader has to do themselves +## Failure modes how to misuse it, including what no tool can catch +## Status state + numbers + WHAT WOULD CHANGE IT +## Documentation TABLE with a "when you need it" column +

Layout
+--- +[footer: seal image, Contributing · Changelog · License] +``` + +**Maximum nine `##` sections.** Above nine, GitHub's outline menu +becomes a wall. *Incident: a research-line README carried thirteen, +six of them beginning with the word "What" — unnavigable in a sidebar +that truncates.* + +**No two headings begin with the same word.** Headings are noun +phrases, six words maximum. The test: read only the outline menu — can +you navigate? + +## 5. The fold is not where you think + +**On a GitHub repository page the README is not the fold.** +*Measured on a 1090 px-wide capture: the README began ~1080 px down. +The first screen is the file listing and the About box.* + +Three consequences, all cheap and all easy to miss: + +- **The About box is the most-read text on the page.** A repo shipped + with *"No description, website, or topics provided"* while its README + was being polished. `description` and topics are **repo settings, not + files** — no amount of README work reaches them. +- **Topics must not contradict the description.** *Incident: a repo + carried the topic `evaluation` under a description saying it does not + score anything — the one thing it is built not to do, offered as a + keyword.* +- **Directory names and commit subjects are landing copy.** They are on + the first screen; the README is not. + +## 6. Rules earned by measurement + +Each rule below names the incident that produced it. A rule with no +incident behind it is a guess. + +**Every typable thing is fenced with a language tag.** *Verified +through `gh api /markdown`: an indented four-space block renders as a +bare `
`; a fenced block renders as
+`
`.* Indented blocks get +no syntax highlighting — reserve them for non-typable ASCII. + +**Commands must fit the column.** *Incident: `# 80 tests, no network` +rendered as `# 80 tests, no networ` — the first command a reader sees, +cut off.* Keep command lines under ~60 characters. + +**Two blockquote lines in one paragraph collapse into one.** +*Incident: the best sentence in a README had been rendering as a single +running line since the day it was written.* End the first line with a +trailing `
`. + +**Every badge is a link.** *Incident: three of four badges were dead +images.* A badge that points nowhere is decoration wearing the costume +of a signal. + +**A captured trace beats prose about the tool.** For a line whose +product is a verdict, the verdict printing is the most persuasive thing +the page can carry. Show a run that **held**, not a clean one — +stopping is the feature. + +**The trace must be literal, and bound by a test.** *Incident: a trace +was trimmed by one line to fit the column, inside a block claiming to +be real output. No reader would have caught it; the test asserting that +every printed line appears verbatim in the README did.* Prose drifts +silently — bind it. + +**Images: at most three, each with a job.** Hero (position 1, alone); +evidence (after the first command block); seal (footer, ≤96 px). An +image that illustrates a *concept* rather than a *result* belongs in +`docs/`. *Incident: a plate at `width="380"` took 475 vertical pixels — +more than its section's entire text — and at that size its subject was +invisible.* Before shrinking an image, ask whether it can show its +subject at the size it is seen at; if not, the height is spent for +nothing. + +**Render it and look at it.** Every rule in this section was found by +rendering through `gh api /markdown` and looking at the page. None of +them are visible while reading the markdown source. + +## 7. The honest-status rule (two positions) + +This is the type's distinguishing quality and the easiest thing to get +wrong in both directions. Burying an unproven status is dishonest; +putting the whole disclaimer above the fold buries the tool under it, +and a reader who does not yet know what the tool is cannot evaluate a +limitation. + +- **One line above the fold** — a fact plus a pointer, no hedging. +- **The full section in its own `##` in the lower third.** It must + (a) carry "Status" or "Limitations" in the heading so it is findable + in the outline, (b) state numbers or say explicitly "unmeasured", + (c) say **what would change the verdict**, and (d) not be the last + thing before the footer — put `## Documentation` after it, so the + page ends on a door and not a wall. + +## 8. Every number carries its record + +A research line is believed on its numbers, so a number without an +openable record is worse than no number. + +- A number printed in the README, the changelog, or any durable + document is either traceable to a stored run record or labelled + **UNMEASURED**. Never estimate into a permanent file. +- A threshold quoted as a result names what it was measured against. + A threshold chosen after seeing the results is not a threshold. +- Negative results are published, with the reason distinguished: + *"no benefit was demonstrated"* and *"the cost was too high"* are + different verdicts and must not be swapped. + +## 9. Nothing may be reachable only by browsing + +*Incident: one repository shipped a runnable example with zero +references anywhere in it, a second document referenced only from +inside a JSON snippet, and a starter directory named in prose but never +linked.* A reader asking the two most natural questions had runnable +answers sitting in the repo with no path to them. + +Check with a link walker, and check for orphans by grepping each path. +After any rename, grep the old name repository-wide — nothing fails +when a cross-reference dies. + +## 10. Checklist + +- [ ] Hero alone on the first screen; no second image competing +- [ ] Badge row on one source line, every badge linked +- [ ] Lede names the runtime ("Python", "stdlib-only") — grep for it +- [ ] Status stamp above the fold, full `## Status` in the lower third +- [ ] `## Run it` present, fenced, language-tagged, offline, ≤60-char lines +- [ ] A real captured trace, literal, with a test binding it +- [ ] ≤9 `##` sections, no two starting with the same word +- [ ] Documentation as a table with a "when you need it" column +- [ ] Every README number traceable to a record, or labelled UNMEASURED +- [ ] No orphan files: every doc and template linked from somewhere +- [ ] No dead cross-references: grep old names after any rename +- [ ] Repo description + topics set, and topics do not contradict it +- [ ] Rendered and looked at, not just read as markdown