Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
88c2a95
Merge remote-tracking branch 'origin/feature/blueprint-integration' i…
DavidLeuter Sep 13, 2026
465bfc5
Put the tutor next to the path it is tutoring
DavidLeuter Sep 13, 2026
e56cae0
Let a hire and their buddy point at the same thing
DavidLeuter Sep 13, 2026
ba829f6
Keep the team page standing, and number what the buddy numbers
DavidLeuter Sep 13, 2026
8bca818
Name the hire, not "you", when a PM reads the step badge
DavidLeuter Sep 14, 2026
8e0ec3e
Make picked suggestions sendable, and land buddy links on the card
DavidLeuter Sep 14, 2026
cc047bb
Carry the skip reason through buddy proposals and show it before sending
DavidLeuter Sep 14, 2026
a113a54
Carry add_path_step's graph placement through proposals
DavidLeuter Sep 14, 2026
e3bf570
Merge remote-tracking branch 'origin/dev' into feature/311-buddy-onbo…
DavidLeuter Sep 14, 2026
d926dcb
Keep the separating space before the link highlight's interpolation
DavidLeuter Sep 14, 2026
d7278b4
Take the old onboarding off the board
DavidLeuter Sep 15, 2026
f7f4e06
Call the PM metrics contribution metrics
DavidLeuter Sep 15, 2026
127fa2f
Merge origin/dev into feature/311-buddy-onboarding-tutor
DavidLeuter Sep 21, 2026
bf04eeb
Show what a flag sends, and say what the Task-0 flag means
DavidLeuter Sep 21, 2026
b4e5660
Merge origin/dev into feature/311-buddy-onboarding-tutor
DavidLeuter Sep 24, 2026
e3d5cd5
Land buddy links on the reworked onboarding journey
DavidLeuter Sep 24, 2026
133128d
Number the journey's steps and questions the way the buddy does
DavidLeuter Sep 24, 2026
4fa0200
Offer the buddy on the reworked journey's steps, questions and phases
DavidLeuter Sep 24, 2026
c1ecb0e
Refresh every path surface after the buddy changes the path
DavidLeuter Sep 24, 2026
c0fe199
Name the hire, not the reader, on the PM's journey view
DavidLeuter Sep 24, 2026
b134578
Don't start a step that is only opened to change its skip request
DavidLeuter Sep 24, 2026
faac83d
Tidy the buddy-link arrival and two misplaced comments
DavidLeuter Sep 24, 2026
cbbe63b
Address review on the buddy path links and step drafts
DavidLeuter Sep 26, 2026
53d1064
Merge origin/dev into feature/311-buddy-onboarding-tutor
DavidLeuter Sep 29, 2026
d8d21f5
Merge origin/dev into feature/311-buddy-onboarding-tutor
DavidLeuter Sep 29, 2026
d931712
Merge origin/dev into feature/311-buddy-onboarding-tutor
DavidLeuter Sep 30, 2026
f78263f
Merge origin/dev into feature/311-buddy-onboarding-tutor
DavidLeuter Sep 30, 2026
93042ff
Merge origin/dev into feature/311-buddy-onboarding-tutor
DavidLeuter Sep 30, 2026
c8ac711
Carry the resolved options of a buddy answer through the confirm
DavidLeuter Sep 30, 2026
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: 2 additions & 0 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@ import { EggEffectsLayer } from "./features/easter-eggs/components/EggEffectsLay
import { MyKnowledgeGapsProvider } from "./features/knowledge-gaps/MyKnowledgeGapsProvider";
import { KnowledgeGapOwnerAnnouncement } from "./features/knowledge-gaps/components/KnowledgeGapOwnerAnnouncement";
import { useScrollRestoration } from "./hooks/useScrollRestoration";
import { useBuddyPathSync } from "./features/buddy/hooks/useBuddyPathSync";
import { GlobalShortcuts } from "./features/shortcuts";

function AppContent() {
const { status } = useAuth();
const { showRocketPet } = useMoments();
const { isFocused } = useFocusMode();
useScrollRestoration();
useBuddyPathSync();

// Signed in at all — the shell is drawn for anyone past the login screen, onboarding included.
// `signingOut` stays out on purpose: it is the boot script's "this load is a logout return"
Expand Down
2 changes: 1 addition & 1 deletion src/features/attestation/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export type AttestationState = "REQUESTED" | "ACCEPTED" | "WITHDRAWN";
* One request for a named colleague to confirm a hire's work.
*
* `returnedCount` is shown rather than hidden: work that took three passes is not the same as work
* that took none, and the autonomy milestone reads exactly this number.
* that took none.
*/
export interface Attestation {
id: string;
Expand Down
3 changes: 0 additions & 3 deletions src/features/board/components/BoardGrid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ import { NoteCard } from "./NoteCard";
import { ArrivalStepsCard } from "./ArrivalStepsCard";
import { OpenPullRequestsCard } from "./OpenPullRequestsCard";
import { PathStepCard } from "./PathStepCard";
import { PathToFirstContributionCard } from "./PathToFirstContributionCard";
import { SuggestedTasksCard } from "./SuggestedTasksCard";
import { TaskPoolCard } from "./TaskPoolCard";
import { BoardCardContext } from "./boardCardControls";
Expand Down Expand Up @@ -494,8 +493,6 @@ function BoardCardView({
// somebody to wire one up later and wonder why nothing shows.
const props = { card, ...shared };
switch (card.content.kind) {
case "PATH_TO_FIRST_CONTRIBUTION":
return <PathToFirstContributionCard content={card.content} {...props} />;
case "ARRIVAL_STEPS":
return <ArrivalStepsCard content={card.content} {...props} />;
case "OPEN_PULL_REQUESTS":
Expand Down
49 changes: 0 additions & 49 deletions src/features/board/components/BoardPathNotes.tsx

This file was deleted.

24 changes: 16 additions & 8 deletions src/features/board/components/BoardPathWindow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
type PathWindowState,
} from "../../onboarding/pathWindow.ts";
import { onboardingService } from "../../../services/onboardingService.ts";
import { onBuddyPathChanged } from "../../buddy/aiBuddyBus.ts";

/** What each state is called and wears. Never colour alone — every one carries a word and a glyph. */
const STATES: Record<
Expand Down Expand Up @@ -78,17 +79,24 @@ export function BoardPathWindow({
useEffect(() => {
let cancelled = false;

void onboardingService
.fetchPath()
.then((path) => {
if (!cancelled) setWhere(pathWindow(path));
})
// No path, or no reaching it: the board has plenty else to show, and a strip that cannot
// say where somebody is should not say anything at all.
.catch(() => undefined);
const read = () =>
void onboardingService
.fetchPath()
.then((path) => {
if (!cancelled) setWhere(pathWindow(path));
})
// No path, or no reaching it: the board has plenty else to show, and a strip that cannot
// say where somebody is should not say anything at all.
.catch(() => undefined);

read();
// Read again when the buddy moved the path on, so the strip under the dock says where the
// hire now stands.
const unsubscribe = onBuddyPathChanged(read);

return () => {
cancelled = true;
unsubscribe();
};
}, []);

Expand Down
2 changes: 1 addition & 1 deletion src/features/board/components/CardEditHistory.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useState } from "react";
import { Check, ListChecks, Pencil, Undo2 } from "lucide-react";
import { Button } from "../../../components/ui/Button";
import { readableTitle } from "../generation/pathToCards";
import { readableTitle } from "../layout/cardNames";
import { useCardMarks } from "../marks/useCardMarks";
import { Marked } from "./Marked";
import type {
Expand Down
11 changes: 5 additions & 6 deletions src/features/board/components/ChecklistCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Button } from "../../../components/ui/Button";
import { EmptyState } from "../../../components/ui/EmptyState";
import { Input } from "../../../components/ui/Input";
import { SelectionCheckbox } from "../../admin/components/SelectionCheckbox";
import { readableTitle } from "../generation/pathToCards";
import { readableTitle } from "../layout/cardNames";
import { useBoardCardControls } from "./boardCardControls";
import { BoardCardFrame } from "./BoardCardFrame";
import { CardOriginLink } from "./CardOriginLink";
Expand Down Expand Up @@ -152,8 +152,8 @@ export function ChecklistCard({
return (
<BoardCardFrame
icon={CheckSquare}
// Stripped of the marker a generated card carries: it exists so a second generation run can
// recognise its own work, and it is never something the hire should read.
// Stripped of the invisible marker a card from the retired generator still carries -- see
// `layout/cardNames.ts`. It is never something the hire should read.
title={
content.title ? (
// A checklist's name is written by whoever made the list — the generator, or the hire
Expand Down Expand Up @@ -278,9 +278,8 @@ export function ChecklistCard({
highlighted two lines has already said which part they are stuck on. */}
<AskTheBuddy
question={questionAboutChecklist(
// The readable title, for the same reason the header shows it: the marker is there so a
// generation run can recognise its own work, and it has no business in a sentence the
// hire is about to send.
// The readable title, for the same reason the header shows it: the marker has no
// business in a sentence the hire is about to send.
content.title === null ? null : readableTitle(content.title),
content.items.filter((item) => !item.done).length,
marks.map((mark) => mark.text),
Expand Down
10 changes: 1 addition & 9 deletions src/features/board/components/CurrentTaskCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,7 @@ export function CurrentTaskCard({
icon={Target}
title="What you're working on"
card={card}
subtitle={
hasTask
? closed
? "Closed where it lives"
: content.chosen
? "You picked this one"
: "Handed to you as a first task"
: undefined
}
subtitle={hasTask ? (closed ? "Closed where it lives" : "You picked this one") : undefined}
onDismiss={onDismiss}
dismissing={dismissing}
>
Expand Down
97 changes: 0 additions & 97 deletions src/features/board/components/PathToFirstContributionCard.tsx

This file was deleted.

Loading
Loading