Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"name": "projectstore",
"displayName": "projectstore",
"description": "πŸ“š Your project's knowledge base, written by your AI agent β€” ADRs Β· epics Β· stories Β· runbooks Β· research. An Obsidian-friendly markdown vault, agent-maintained, you approve every write. Like Karpathy's LLM Wiki, but for engineering project artifacts.",
"version": "0.11.0",
"version": "0.12.0",
"author": {
"name": "Evgenii Konev",
"email": "ekonev@smartandpoint.com",
Expand Down
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "projectstore",
"displayName": "projectstore",
"version": "0.11.0",
"version": "0.12.0",
"description": "Opinionated project-management paradigms (ADR / epics / stories / kanban / runbooks) for agentic development. Markdown-first, git-portable, human-readable.",
"author": {
"name": "Evgenii Konev @ SmartAndPoint",
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ PreCompact [...pre-compact.mjs] completed successfully: {

The packet contains the vault path, the command list, the last 15 vault touches, and the newest in-flight ADR / epic / story / research. The post-compact agent picks up drafting from where the previous one left off, no manual rehydration.

## What's in the box (v0.11)
## What's in the box (v0.12)

- **14 commands** β€” `bind`, `scaffold`, `status`, `adr`, `epic`, `story`, `kanban`, `research`, `concept`, `meeting`, `runbook`, `search`, `review`, `statusline`
- **3 passive skills** β€” `decision-detector`, `story-completion`, `peer-reviewer`. They suggest commands; they never write directly.
Expand Down Expand Up @@ -222,7 +222,8 @@ So in a projectstore project you keep your full [oh-my-claudecode](https://githu

| Version | What ships | Status |
|---|---|---|
| **v0.11** | Status line install simplified β€” opt-in flag + self-healing SessionStart wiring | βœ… current |
| **v0.12** | Status line shows full epic & story titles (from frontmatter, not the filename) | βœ… current |
| v0.11 | Status line install simplified β€” opt-in flag + self-healing SessionStart wiring | βœ… |
| v0.10 | Status line β€” current epic & story in the HUD, composes with an existing status line | βœ… |
| v0.9 | Bundled review agents (`projectstore-critic`, `code-planner`, `code-reviewer`) | βœ… |
| v0.8 | Russian (`ru`) templates | βœ… |
Expand Down
18 changes: 15 additions & 3 deletions scripts/statusline.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -129,15 +129,27 @@ function bookSegment(cfg, input) {
}
}

let seg = BOOK + epicId;
// Prefer the human `title:` from each artifact's frontmatter over the raw
// id / filename slug (fall back to those when a title is missing/unreadable).
let epicTitle = null;
try {
const { data } = parseFrontmatter(
readFileSync(join(vault, "epics", epicId, "epic.md"), "utf8"),
);
if (data.title) epicTitle = String(data.title);
} catch {}
let seg = BOOK + (epicTitle || epicId);

if (storyFile) {
const label = storyFile.replace(/\.md$/, "");
let status = null;
let storyTitle = null;
try {
const { data } = parseFrontmatter(readFileSync(storyPath, "utf8"));
if (data.status) status = String(data.status).toLowerCase();
if (data.title) storyTitle = String(data.title);
} catch {}
seg += ARROW + label + (status ? ` (${status})` : "");
const storyLabel = storyTitle || storyFile.replace(/\.md$/, "");
seg += ARROW + storyLabel + (status ? ` (${status})` : "");
}
return seg;
}
Expand Down