Sets up the Socrata project repo with: docs/ — strategy and design documents - idea.md: full product vision - implementation-plan.md: Phase 0 + Phase 1 MVP plan - phase-0-validation.md: 2-week validation experiment strategy - phase-0-plan.md: concrete Phase 0 build plan - phase-0-results.md: Phase 0 gate outcome — GO for MVP - sysml-modeling.md: metamodel + SE discipline + validation rules - socrates.md: agent character, surfaces, modes, prompts, lifecycle - sync.md: bidirectional text↔diagram sync engineering - design-source/: HTML/CSS/JS handoff bundle from Claude Design phase-0/ — validated harness (CLI, no UI, no DB) - LM Studio (local OpenAI-compatible) generation + detection + judge - PlantUML rendering for SysML model visualization - 10-seed corpus (8 working + 2 holdouts) - 5 corpus runs with iteration history in reports/ - Final gate: 10/10 pass, mean 4.32/5, holdouts validated Phase 1 MVP scope and milestones documented in implementation-plan.md.
101 lines
5.7 KiB
JavaScript
101 lines
5.7 KiB
JavaScript
// Sample project content — a realistic PM idea: an AI study companion for university students.
|
||
// Used to populate the textual narrative + diagram in all three aesthetic directions.
|
||
|
||
window.SOCRATA_DATA = {
|
||
project: {
|
||
name: "Aristotle",
|
||
tagline: "AI study companion for first-year STEM students",
|
||
scope: "Higher education · undergraduate",
|
||
owner: "M. Chen · PM",
|
||
branch: "main",
|
||
lastSync: "2 min ago",
|
||
},
|
||
|
||
// The narrative — a sequence of "tokens": plain prose, paragraph breaks,
|
||
// headings, and inline markup chips referencing model elements.
|
||
narrative: [
|
||
{ type: "h1", text: "Problem framing" },
|
||
{ type: "p", children: [
|
||
{ t: "text", v: "First-year STEM students at large public universities frequently disengage from coursework not because the material is intractable, but because the " },
|
||
{ t: "chip", kind: "block", id: "student", label: "Student" },
|
||
{ t: "text", v: " lacks a low-stakes thinking partner during the long tail between lectures and office hours. The " },
|
||
{ t: "chip", kind: "block", id: "course", label: "Course" },
|
||
{ t: "text", v: " produces problem sets that assume mastery of prerequisite scaffolding, and a " },
|
||
{ t: "chip", kind: "property", id: "selfEfficacy", label: "self_efficacy" },
|
||
{ t: "text", v: " gap forms quickly." },
|
||
]},
|
||
{ type: "p", children: [
|
||
{ t: "text", v: "Aristotle is a study companion that " },
|
||
{ t: "chip", kind: "association", id: "guides", label: "guides" },
|
||
{ t: "text", v: " the student through Socratic prompts rather than answers, scoped to their current " },
|
||
{ t: "chip", kind: "block", id: "assignment", label: "Assignment" },
|
||
{ t: "text", v: ". It refuses to produce solutions; it only produces questions calibrated to a student's evolving understanding." },
|
||
]},
|
||
{ type: "h2", text: "Constraints" },
|
||
{ type: "p", children: [
|
||
{ t: "chip", kind: "requirement", id: "REQ-001", label: "REQ-001" },
|
||
{ t: "text", v: " The companion must never output a complete solution to a graded problem. " },
|
||
{ t: "chip", kind: "requirement", id: "REQ-002", label: "REQ-002" },
|
||
{ t: "text", v: " Response latency under 1.2s P50 to preserve flow. " },
|
||
{ t: "chip", kind: "requirement", id: "REQ-003", label: "REQ-003" },
|
||
{ t: "text", v: " Operates within FERPA boundaries; coursework never leaves institutional tenancy." },
|
||
]},
|
||
{ type: "h2", text: "Why now" },
|
||
{ type: "p", children: [
|
||
{ t: "text", v: "Two large public-university pilots indicated that students would adopt a tool that explicitly does not solve their homework — an inversion of the prevailing market." },
|
||
]},
|
||
],
|
||
|
||
// Model — the SysML graph. Positions are normalized 0–1 on a 720×460 board.
|
||
blocks: [
|
||
{ id: "student", label: "Student", kind: "block", x: 0.10, y: 0.18, w: 168, h: 96,
|
||
properties: ["self_efficacy", "course_load", "prior_grade"] },
|
||
{ id: "aristotle", label: "Aristotle", kind: "block", x: 0.42, y: 0.18, w: 184, h: 110,
|
||
properties: ["interaction_style", "scope_window", "refusal_policy"] },
|
||
{ id: "course", label: "Course", kind: "block", x: 0.74, y: 0.10, w: 168, h: 96,
|
||
properties: ["syllabus", "prerequisites"] },
|
||
{ id: "assignment", label: "Assignment", kind: "block", x: 0.74, y: 0.58, w: 168, h: 96,
|
||
properties: ["due_at", "rubric", "graded"] },
|
||
{ id: "instructor", label: "Instructor", kind: "actor", x: 0.10, y: 0.62, w: 144, h: 76,
|
||
properties: ["policy_set"] },
|
||
{ id: "ferpa", label: "FERPA boundary", kind: "constraint", x: 0.42, y: 0.66, w: 184, h: 72,
|
||
properties: [] },
|
||
],
|
||
|
||
associations: [
|
||
{ id: "a1", from: "student", to: "aristotle", label: "consults", kind: "association" },
|
||
{ id: "a2", from: "aristotle", to: "assignment", label: "scoped_to", kind: "association" },
|
||
{ id: "a3", from: "course", to: "assignment", label: "contains", kind: "composition" },
|
||
{ id: "a4", from: "instructor", to: "aristotle", label: "configures", kind: "association" },
|
||
{ id: "a5", from: "aristotle", to: "ferpa", label: "obeys", kind: "constraint" },
|
||
{ id: "a6", from: "student", to: "course", label: "enrolled_in", kind: "association" },
|
||
],
|
||
|
||
// Side rail items
|
||
assumptions: [
|
||
{ id: "ASM-1", text: "Students will accept a tool that refuses to give answers", status: "open", linked: ["aristotle"] },
|
||
{ id: "ASM-2", text: "Faculty will not classify Socratic prompts as academic dishonesty", status: "validated", linked: ["aristotle", "instructor"] },
|
||
{ id: "ASM-3", text: "1.2s P50 latency is achievable with on-prem inference", status: "open", linked: ["aristotle"] },
|
||
],
|
||
risks: [
|
||
{ id: "RSK-1", text: "Refusal policy circumvented via prompt injection", severity: "high", linked: ["aristotle"] },
|
||
{ id: "RSK-2", text: "FERPA tenancy adds 4–6 weeks of procurement per institution", severity: "med", linked: ["ferpa"] },
|
||
],
|
||
|
||
// Socrates' active thread
|
||
socratesThread: [
|
||
{ who: "socrates", text: "You've defined Aristotle as scoped to a single Assignment. What happens when a student wants to compare techniques across two assignments — does the scope expand, or does the student switch contexts?" },
|
||
{ who: "user", text: "Switch contexts. We don't want cross-assignment leakage of solution patterns." },
|
||
{ who: "socrates", text: "Good. That decision has an implication: the property scope_window on Aristotle becomes single-valued, and we may want a Constraint that forbids cross-Assignment retrieval. Should I draft that as a proposal?" },
|
||
],
|
||
|
||
// Pending change proposal
|
||
proposal: {
|
||
title: "Add constraint: no cross-Assignment retrieval",
|
||
impactedBlocks: ["aristotle", "assignment"],
|
||
addedConstraints: 1,
|
||
affectedRequirements: ["REQ-001"],
|
||
iteration: 2,
|
||
},
|
||
};
|