Skip to content

S-10: the active-project banner is maintained by nothing — it announced DecadeDrop at the start of a hypeForge session #37

Closed

Description

@jetomev

What happened

On 2026-09-29 the maintainer started a session, renamed it hypeForge (/rename hypeForge) and asked to work on hypeForge. The session-start banner said the opposite:

ACTIVE PROJECT — render this to the maintainer …
╭─ DecadeDrop · store 02 of DropKit · …

mindForge's own briefing in the same start-up was right (last session: yesterday — hypeForge: project started …). So one start-up screen carried two different answers to "what are we working on?", and the assistant rendered the wrong one first before switching to hypeForge by hand.

Why

The banner does not come from mindForge's code. It comes from a personal hook, ~/.claude/hooks/active-project-status.sh (written 2026-09-23), which prints scripts/status.sh of whatever path is in a one-line pointer file:

$ cat ~/.claude/active-project
/home/jetomev/Projects/dropkit/DecadeDrop
$ ls -l ~/.claude/active-project
-rw-r--r-- … Sep 23 20:20 …

The pointer was set by hand on 23 September and nothing ever updates it: not a session rename, not mindforge wrap, not a change of repo. It stays correct only while nobody switches projects. This is the same family as #28 (a rolling handoff maintained by nothing): a file that is only right if someone remembers to edit it.

The hook also sits outside any repo, so it has no tests, no history and no issue tracker of its own. That is why this issue lives here, next to the briefing it competes with.

What would fix it (to decide)

  1. Derive, do not store. The banner follows the same source as the briefing: the last wrapped session's focus, or the most recently touched repo with a scripts/status.sh.
  2. Follow the session name. When a session is renamed to a project's name, point the banner at that project.
  3. Make wrap move the pointer. mindforge wrap "<focus>" … rewrites ~/.claude/active-project when the focus names a project with scripts/status.sh.
  4. At least flag disagreement. If the pointer and the briefing's last session name different projects, the banner says so instead of speaking with confidence.

Option 1 or 3 removes the hand-edited step, which is what failed. Option 4 is the minimum: it makes the drift visible instead of silent.

How we'll know it's done

  • Starting a session after wrapping a hypeForge session shows hypeForge in the banner, without editing any file by hand.
  • A deliberate mismatch (pointer on one project, last wrap on another) is flagged at start-up, not rendered as fact.
  • The hook is either moved into this repo with a test, or replaced by a mindforge subcommand.

Activity

  1. added a commit that references this issue on Sep 30, 2026
  2. jetomev commented on Oct 13, 2026

    @jetomev
    OwnerAuthor

    Fixed in v0.1.8 (6b7c925, https://github.com/jetomev/mindforge/releases/tag/v0.1.8) — options 3 and 4 from the issue, plus the hook moved into the repo.

    mindforge active replaces the personal hook. The pointer lives in the state folder (~/.claude/state/active-project); an existing ~/.claude/active-project is adopted and moved there on first run. --show, --clear and <path> (refused unless the folder has scripts/status.sh) manage it by hand when needed.

    wrap moves the pointer (option 3). Every repo under the roots and every queue project with a scripts/status.sh is a candidate; the longest name found in the focus as a whole word, case-insensitive, wins. A focus naming no project leaves the pointer alone.

    Disagreement is said (option 4). The banner compares the pointer with the project the last wrapped session's focus names; when they differ it prints ACTIVE PROJECT DISAGREES: the pointer says X, but the last wrapped session was about Y and asks the assistant to confirm before treating either as fact. The stale status still prints, after the warning.

    How we know it's done, from the issue: a session after a wrap naming a project shows that project without any hand edit — tested; a deliberate mismatch is flagged at start-up — tested; the hook is a mindforge subcommand with 19 checks. The maintainer's settings.json now calls mindforge active; the old script is a shim.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions