chore(seed): roadmap copy refresh — status reflects 'currently live', not 'shipping date'
The previous seed conflated status='shipping' with 'about to ship' — 'Audit log export' was status=shipping target='Next week' which is actually a queued release, not a live one. Refined so: status='shipping' → live in production now status='in_beta' → not yet live, GA target set status='exploring' → on the long horizon status='considering' → not committed Updated distribution: 2 shipping / 2 in_beta / 3 exploring / 2 considering. travelledStop = (1 + 0.5) / 9 ≈ 0.17, so the gradient visibly transitions from travelled to ahead right at the 'you are here' marker — the visual story matches the data. Targets rewritten to read in this new register: - Traceability layer Live since March - Document ingestion Live since late May ← .rr-current - Audit log export GA next week (now in_beta) - Agentic query mode July - Contextual memory Q3 2026 - Multi-organisation graphs Q3 2026 - Multi-tenant isolation Q4 2026 - Federated learning hooks 2027 (considering) - Open evaluation framework 2027 (considering) Descriptions rewritten so the In motion strip pulls a meaningful first sentence from item #2 — 'Indexing PDF, Word, and plain text with proper chunking.' shipped_at backdated on items 1-2 only (60 days / 7 days ago), so the .rr-current marker lands on the most recently-shipped item (Document ingestion), not the about-to-GA in_beta item. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1ec01a2257
commit
788989fe35
1 changed files with 15 additions and 14 deletions
|
|
@ -195,20 +195,21 @@ db.prepare('INSERT INTO votes (pulse_id, user_id, option_index, voted_at) VALUES
|
||||||
db.prepare('INSERT INTO votes (pulse_id, user_id, option_index, voted_at) VALUES (?,?,?,?)')
|
db.prepare('INSERT INTO votes (pulse_id, user_id, option_index, voted_at) VALUES (?,?,?,?)')
|
||||||
.run(decisionPulseId, cabs[1].id, 1, nowIso(-30 * 60));
|
.run(decisionPulseId, cabs[1].id, 1, nowIso(-30 * 60));
|
||||||
|
|
||||||
// ── Roadmap: 9 items spanning the full timeline, admin-ordered ──────
|
// ── Roadmap: 9 items, status meaning 'currently live' rather than
|
||||||
// 3 shipping → 1 in_beta → 3 exploring → 2 considering. travelledStop
|
// 'shipping soon'. Items 1-2 are live in production; items 3-4 are in
|
||||||
// lands at (2 + 0.5) / 9 ≈ 0.28 — the route's gradient reads as
|
// beta even if 'audit log export' has a near-term GA target. Travelled
|
||||||
// 'travelled-then-ahead' instead of one solid tone.
|
// stop = (1 + 0.5) / 9 ≈ 0.17, putting the 'you are here' marker at
|
||||||
|
// the visible transition between travelled and ahead tones on the path.
|
||||||
const roadmap = [
|
const roadmap = [
|
||||||
{ title: 'Traceability layer', description: 'Every response cites its sources with structured provenance.', status: 'shipping', target: 'Live now', display_order: 1, shipped_at: nowIso(-21 * 24 * 3600), attributed: [cabs[0].id], metadata_text: 'Shaped by Lars in our March session' },
|
{ title: 'Traceability layer', description: 'Every inference call writes a signed audit record. Shaped by Lars in our March session.', status: 'shipping', target: 'Live since March', display_order: 1, shipped_at: nowIso(-60 * 24 * 3600), attributed: [cabs[0].id], metadata_text: 'Shaped by Lars in our March session' },
|
||||||
{ title: 'Document ingestion', description: 'Upload PDF, Word, plain text. Chunked, indexed, retrievable.', status: 'shipping', target: 'Late May', display_order: 2, shipped_at: nowIso(-7 * 24 * 3600), attributed: [cabs[1].id, cabs[2].id], metadata_text: "Pilot-tested with Mette's team" },
|
{ title: 'Document ingestion', description: "Indexing PDF, Word, and plain text with proper chunking. Pilot-tested with Mette's team.", status: 'shipping', target: 'Live since late May', display_order: 2, shipped_at: nowIso(-7 * 24 * 3600), attributed: [cabs[1].id, cabs[2].id], metadata_text: "Pilot-tested with Mette's team" },
|
||||||
{ title: 'Audit log export', description: 'One-click export of every model call, source, and reviewer action.', status: 'shipping', target: 'Next week', display_order: 3, shipped_at: nowIso(-1 * 24 * 3600), attributed: [cabs[3].id], metadata_text: 'Builds on traceability layer' },
|
{ title: 'Audit log export', description: 'Stream the signed records to your own S3 or on-prem object store.', status: 'in_beta', target: 'GA next week', display_order: 3, shipped_at: null, attributed: [cabs[3].id], metadata_text: 'Builds on traceability layer' },
|
||||||
{ title: 'Agentic query mode', description: 'Multi-step retrieval and synthesis with full provenance.', status: 'in_beta', target: 'July', display_order: 4, shipped_at: null, attributed: [cabs[1].id], metadata_text: 'Request beta access →' },
|
{ title: 'Agentic query mode', description: 'Multi-step retrieval over locked, on-prem document stores. Currently testing with two pilot organisations.', status: 'in_beta', target: 'July', display_order: 4, shipped_at: null, attributed: [cabs[1].id], metadata_text: 'Request beta access →' },
|
||||||
{ title: 'Contextual memory', description: 'The system learns the regulatory and organisational context over time.', status: 'exploring', target: 'Q3 2026', display_order: 5, shipped_at: null, attributed: [cabs[3].id], metadata_text: '2 council requests' },
|
{ title: 'Contextual memory', description: 'Sessions that remember constraints between calls without leaking context across organisational boundaries.', status: 'exploring', target: 'Q3 2026', display_order: 5, shipped_at: null, attributed: [cabs[3].id], metadata_text: '2 council requests' },
|
||||||
{ title: 'Multi-organisation graphs', description: 'Cross-tenant graph queries with strict permission scoping.', status: 'exploring', target: 'Q3 2026', display_order: 6, shipped_at: null, attributed: [cabs[4].id], metadata_text: 'Open question on key custody' },
|
{ title: 'Multi-organisation graphs', description: 'Permission-controlled knowledge spaces for departments within a single deployment.', status: 'exploring', target: 'Q3 2026', display_order: 6, shipped_at: null, attributed: [cabs[4].id], metadata_text: 'Open question on key custody' },
|
||||||
{ title: 'Multi-tenant isolation', description: 'Strict per-organisation data boundaries for shared deployments.', status: 'exploring', target: 'Q4 2026', display_order: 7, shipped_at: null, attributed: [cabs[5].id], metadata_text: null },
|
{ title: 'Multi-tenant isolation', description: 'Cryptographic separation between sub-organisations on shared infrastructure.', status: 'exploring', target: 'Q4 2026', display_order: 7, shipped_at: null, attributed: [cabs[5].id], metadata_text: null },
|
||||||
{ title: 'Federated learning hooks', description: 'Train shared models across council members without moving data.', status: 'considering', target: '2027', display_order: 8, shipped_at: null, attributed: [], metadata_text: 'Council input wanted' },
|
{ title: 'Federated learning hooks', description: 'Let aligned organisations train on shared signal without sharing the underlying data.', status: 'considering', target: '2027', display_order: 8, shipped_at: null, attributed: [], metadata_text: 'Council input wanted' },
|
||||||
{ title: 'Open evaluation framework', description: 'A public benchmark suite for sovereign AI deployments.', status: 'considering', target: '2027', display_order: 9, shipped_at: null, attributed: [], metadata_text: 'Long-term direction' },
|
{ title: 'Open evaluation framework', description: 'A public benchmark suite for compliant-AI use in regulated industries.', status: 'considering', target: '2027', display_order: 9, shipped_at: null, attributed: [], metadata_text: 'Long-term direction' },
|
||||||
];
|
];
|
||||||
|
|
||||||
const insertRoad = db.prepare(`
|
const insertRoad = db.prepare(`
|
||||||
|
|
@ -375,7 +376,7 @@ insertActivity.run(cabs[1].id,'voted', 'pulse', decisionPulseId, no
|
||||||
insertActivity.run(cabs[0].id,'rsvped', 'event', db.prepare("SELECT id FROM events WHERE slug = ?").get(dinnerSlug).id, nowIso(-8 * 3600));
|
insertActivity.run(cabs[0].id,'rsvped', 'event', db.prepare("SELECT id FROM events WHERE slug = ?").get(dinnerSlug).id, nowIso(-8 * 3600));
|
||||||
|
|
||||||
console.log(` pulse #${decisionPulseId} open, 2 of ${cabs.length} voted`);
|
console.log(` pulse #${decisionPulseId} open, 2 of ${cabs.length} voted`);
|
||||||
console.log(' roadmap: 9 items (3 shipping / 1 in_beta / 3 exploring / 2 considering)');
|
console.log(' roadmap: 9 items (2 shipping / 2 in_beta / 3 exploring / 2 considering)');
|
||||||
console.log(' contributions: 3 (most recent has 3 reactions)');
|
console.log(' contributions: 3 (most recent has 3 reactions)');
|
||||||
console.log(' dispatches: 4 published (2/5/9/12 days ago)');
|
console.log(' dispatches: 4 published (2/5/9/12 days ago)');
|
||||||
console.log(' events: dinner + studio hours + working session, 2 past');
|
console.log(' events: dinner + studio hours + working session, 2 past');
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue