docs: bootstrap vault, roadmap and research
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
---
|
||||
type: sprint
|
||||
number: 0
|
||||
status: active
|
||||
started: 2026-10-17
|
||||
finished:
|
||||
hours-planned: 6
|
||||
hours-logged: 2
|
||||
tags: [sprint, setup]
|
||||
---
|
||||
|
||||
# Sprint 0 — Setup & deconstruction
|
||||
|
||||
## Theme
|
||||
Remove every barrier to practice: toolchain, fast feedback, project board, CI. After this
|
||||
sprint, a practice session starts in 60 seconds and never touches configuration.
|
||||
|
||||
## App deliverable
|
||||
`viexp` cargo project skeleton that compiles, one trivial test green, Gitea Actions CI green,
|
||||
`bacon` watching check+clippy+test on save, Gitea board (project + labels + milestones) ready.
|
||||
|
||||
## Rust focus — the vital 20%
|
||||
- What `rustc` / `cargo` / `crates.io` / `Cargo.toml` / `Cargo.lock` are and who owns which file.
|
||||
- The compile cycle: `cargo check` (fast) vs `build` vs `run`; `cargo fmt`, `cargo clippy`.
|
||||
- Reading a compiler error: error code (e.g. E0382), span, help hint — where to look first.
|
||||
|
||||
## Practice drills (20–30 min each)
|
||||
- [ ] D1 — Install/verify: `rustup default stable`, `cargo --version`; run `rustup component
|
||||
add clippy rustfmt`; install `bacon` (`cargo install --locked bacon`).
|
||||
- [ ] D2 — `cargo new viexp --bin`, add a `lib.rs` skeleton (src split: `main.rs` calls
|
||||
`viexp::run()`), one `#[test] fn sanity()` — make it fail, read the output, make it pass.
|
||||
- [ ] D3 — Break it on purpose: introduce E0382 (move a `String`, then use it), E0308 (wrong
|
||||
type), E0384 (reassign immutable). Paste each into the ErrorJournal **with a self-correction cue**.
|
||||
- [ ] D4 — Gitea CI: `.gitea/workflows/ci.yml` running `fmt --check`, `clippy -D warnings`,
|
||||
`test`. Push and watch it go green.
|
||||
- [x] D5 — Gitea board: labels, milestone "Sprint 1", issues imported from Sprint-1 DoD.
|
||||
(Done 2026-10-17: 11 labels, 13 sprint milestones, issues #1–#12; kanban board still needs
|
||||
one-time manual creation in the web UI — Gitea 1.26.2 has no projects API.)
|
||||
|
||||
## English focus
|
||||
README "Status" section (done), DevLog habit starts today, commit messages from now on:
|
||||
Conventional Commits, imperative mood.
|
||||
|
||||
## Session rhythm (45 min)
|
||||
5 min review → 30 min drill → 10 min DevLog + ErrorJournal.
|
||||
|
||||
## Definition of done
|
||||
- [ ] `cargo bacon` shows check+test passing on save
|
||||
- [ ] CI green on `main`
|
||||
- [ ] ErrorJournal has ≥3 entries with cues
|
||||
- [ ] Sprint-1 milestone and issues exist on Gitea
|
||||
- [ ] Retro filled
|
||||
|
||||
## Retrospective
|
||||
### Shipped
|
||||
### Frustrations
|
||||
### Hours logged / English notes
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
type: sprint
|
||||
number: 1
|
||||
status: planned
|
||||
started:
|
||||
finished:
|
||||
hours-planned: 20
|
||||
hours-logged: 0
|
||||
tags: [sprint, rust-basics]
|
||||
---
|
||||
|
||||
# Sprint 1 — Rust core via `vls`
|
||||
|
||||
## Theme
|
||||
Learn 80% of everyday Rust syntax by writing a real tool: `viexp ls`, a better `ls`.
|
||||
|
||||
## App deliverable
|
||||
`viexp ls [PATH]` with: colored entries by type (dir/symlink/exec/image/archive), human sizes
|
||||
(`1.4 K`, `2.1 M`), `--sort name|size|mtime`, `--hidden` toggle, `--long` (perms, dates),
|
||||
`--json` (for tests), ≥10 unit tests, clippy clean.
|
||||
|
||||
## Rust focus — the vital 20%
|
||||
Variables & shadowing, scalar types, functions, `if let`/`match`, loops & labels, `Vec`,
|
||||
`String` vs `&str`, structs + methods, enums + `match` exhaustiveness, `Option`/`Result`,
|
||||
the `?` operator, modules & `use`, `#[cfg(test)]` + `#[test]`.
|
||||
Resources: Rust Book ch. 1–6, 7 (modules), 9 (errors) — **in English only**; rustlings
|
||||
exercises `intro…functions…if…quiz1…enums…options…errors1-3`.
|
||||
|
||||
## Practice drills (20–30 min each — target ≈2 per day in week 1, features in week 2+)
|
||||
- [ ] D1 — `read_dir` → print bare names; handle the `Result` with `?` and `anyhow` at `main`.
|
||||
- [ ] D2 — `FileEntry` struct: name, is_dir, is_symlink, size, mtime; build with `metadata()`.
|
||||
- [ ] D3 — Human size formatting fn + unit tests (B→K→M→G boundary values).
|
||||
- [ ] D4 — Sorting: implement 3 comparators, `--sort` flag parsing (no clap yet — `std::env`).
|
||||
- [ ] D5 — Colors: ANSI escape codes by hand (no crate) — learn what crates hide from you.
|
||||
- [ ] D6 — `--hidden` filter (dotfiles) + tests.
|
||||
- [ ] D7 — `--long` view: permissions string (`rwxr-x---`), date formatting.
|
||||
- [ ] D8 — Refactor into `src/entry.rs`, `src/render.rs`, `src/cli.rs` — modules & `pub`.
|
||||
- [ ] D9 — `--json` output via serde; golden-file test.
|
||||
- [ ] D10 — Adopt `clap` for flags (derive API) — your first "big" crate.
|
||||
- [ ] D11 — rustlings: enums + options + errors tracks.
|
||||
- [ ] D12 — Review week: read your own code, note 3 things clippy taught you.
|
||||
|
||||
## English focus
|
||||
README usage section; draft article "Why build a file manager in Rust" (150–200 words is enough).
|
||||
|
||||
## Session rhythm (45 min)
|
||||
5 min review → 30 min drill → 10 min DevLog + ErrorJournal.
|
||||
|
||||
## Definition of done
|
||||
- [ ] `viexp ls ~/` is nicer than `ls` for your own eyes
|
||||
- [ ] ≥10 tests green, clippy clean, CI green
|
||||
- [ ] Article draft published in `docs/articles/`
|
||||
- [ ] Retro filled; Sprint-2 milestone issues created
|
||||
|
||||
## Retrospective
|
||||
### Shipped
|
||||
### Frustrations
|
||||
### Hours logged / English notes
|
||||
Reference in New Issue
Block a user