@vectros-ai/blueprints 0.6.2 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1025,9 +1025,22 @@ var codingAgentMemory = {
1025
1025
  var coding_agent_memory_default = codingAgentMemory;
1026
1026
 
1027
1027
  // src/blueprints/agentic-sdlc.ts
1028
+ var DATA_PLANE_ACTIONS = [
1029
+ "records:r",
1030
+ "records:c",
1031
+ "records:u",
1032
+ "search:r",
1033
+ "schemas:r",
1034
+ "inference:r",
1035
+ "documents:r",
1036
+ "documents:c",
1037
+ "folders:r",
1038
+ "folders:c"
1039
+ ];
1040
+ var EDITOR_ACTIONS = [...DATA_PLANE_ACTIONS, "records:d", "documents:d", "folders:d"];
1028
1041
  var agenticSdlc = {
1029
1042
  name: "agentic-sdlc",
1030
- version: "1.0.0",
1043
+ version: "1.2.0",
1031
1044
  description: "A whole-SDLC system of record for an AI development team \u2014 decisions, designs, references, runbooks, post-mortems (as documents) plus controls, conventions, gotchas, and a glossary (as records), cross-linked and recalled by meaning.",
1032
1045
  contextId: "agentic-sdlc",
1033
1046
  contextName: "Agentic SDLC Knowledge Base",
@@ -1462,6 +1475,19 @@ var agenticSdlc = {
1462
1475
  fieldType: "date",
1463
1476
  description: "ISO-8601 last-reviewed date. Range-queryable.",
1464
1477
  renderHints: { label: "Reviewed on", widget: "date", order: 12 }
1478
+ },
1479
+ {
1480
+ // Provenance for sync: the source file this record was distilled from. A
1481
+ // record can't carry an in-file marker the way a document can (many records
1482
+ // come from one file), so it names its source instead — a change to that file
1483
+ // finds (equality lookup) and re-extracts exactly its records. Equality, not
1484
+ // range: file-level is the sync unit (re-extraction reprocesses the whole file),
1485
+ // and the schema keeps its single range lookup for the date row.
1486
+ fieldId: "sourceRef",
1487
+ fieldType: "string",
1488
+ filterable: true,
1489
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
1490
+ renderHints: { label: "Source ref", widget: "text", order: 13 }
1465
1491
  }
1466
1492
  ],
1467
1493
  lookupFields: [
@@ -1471,7 +1497,8 @@ var agenticSdlc = {
1471
1497
  "area",
1472
1498
  "verifiedBy",
1473
1499
  "relatedDecision",
1474
- { fieldName: "reviewedOn", rangeEnabled: true }
1500
+ { fieldName: "reviewedOn", rangeEnabled: true },
1501
+ "sourceRef"
1475
1502
  ]
1476
1503
  },
1477
1504
  {
@@ -1548,9 +1575,23 @@ var agenticSdlc = {
1548
1575
  fieldType: "date",
1549
1576
  description: "ISO-8601 \u2014 when last revised. Range-queryable.",
1550
1577
  renderHints: { label: "Updated on", widget: "date", order: 9 }
1578
+ },
1579
+ {
1580
+ // Provenance for sync — see the note on `control.sourceRef`.
1581
+ fieldId: "sourceRef",
1582
+ fieldType: "string",
1583
+ filterable: true,
1584
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
1585
+ renderHints: { label: "Source ref", widget: "text", order: 10 }
1551
1586
  }
1552
1587
  ],
1553
- lookupFields: ["area", "status", "establishedBy", { fieldName: "updatedOn", rangeEnabled: true }]
1588
+ lookupFields: [
1589
+ "area",
1590
+ "status",
1591
+ "establishedBy",
1592
+ { fieldName: "updatedOn", rangeEnabled: true },
1593
+ "sourceRef"
1594
+ ]
1554
1595
  },
1555
1596
  {
1556
1597
  // A GOTCHA / sharp edge: a symptom, its cause, and the fix. A tight typed
@@ -1604,9 +1645,22 @@ var agenticSdlc = {
1604
1645
  fieldType: "date",
1605
1646
  description: "ISO-8601 \u2014 when first hit. Range-queryable.",
1606
1647
  renderHints: { label: "Discovered on", widget: "date", order: 7 }
1648
+ },
1649
+ {
1650
+ // Provenance for sync — see the note on `control.sourceRef`.
1651
+ fieldId: "sourceRef",
1652
+ fieldType: "string",
1653
+ filterable: true,
1654
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
1655
+ renderHints: { label: "Source ref", widget: "text", order: 8 }
1607
1656
  }
1608
1657
  ],
1609
- lookupFields: ["area", "status", { fieldName: "discoveredOn", rangeEnabled: true }]
1658
+ lookupFields: [
1659
+ "area",
1660
+ "status",
1661
+ { fieldName: "discoveredOn", rangeEnabled: true },
1662
+ "sourceRef"
1663
+ ]
1610
1664
  },
1611
1665
  {
1612
1666
  // A glossary TERM — a definition keyed by the term itself. Structure-dominant:
@@ -1666,6 +1720,14 @@ var agenticSdlc = {
1666
1720
  fieldType: "date",
1667
1721
  description: "ISO-8601 \u2014 when last revised. Range-queryable.",
1668
1722
  renderHints: { label: "Updated on", widget: "date", order: 7 }
1723
+ },
1724
+ {
1725
+ // Provenance for sync — see the note on `control.sourceRef`.
1726
+ fieldId: "sourceRef",
1727
+ fieldType: "string",
1728
+ filterable: true,
1729
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
1730
+ renderHints: { label: "Source ref", widget: "text", order: 8 }
1669
1731
  }
1670
1732
  ],
1671
1733
  // `term` is a UNIQUE equality lookup — exact "define X" + a one-per-term
@@ -1674,27 +1736,32 @@ var agenticSdlc = {
1674
1736
  { fieldName: "term", unique: true },
1675
1737
  "area",
1676
1738
  "relatedDecision",
1677
- { fieldName: "updatedOn", rangeEnabled: true }
1739
+ { fieldName: "updatedOn", rangeEnabled: true },
1740
+ "sourceRef"
1678
1741
  ]
1679
1742
  }
1680
1743
  ],
1681
- // Least-privilege, data-plane only. r/c/u records + search + schema discovery +
1682
- // inference:r (grounded recall over the document bodies) + document/folder r/c
1683
- // (the content artifacts are documents). NO :d — knowledge is superseded/retired
1684
- // via a status flip, so the trail of how the team's thinking evolved stays intact.
1744
+ // Least-privilege, data-plane only. The scope of the `ssk_*` key the bootstrap
1745
+ // mints for THIS blueprint's service principal (the MCP/API runtime). See
1746
+ // DATA_PLANE_ACTIONS above for the action set + rationale.
1685
1747
  accessProfile: {
1686
- allowedActions: [
1687
- "records:r",
1688
- "records:c",
1689
- "records:u",
1690
- "search:r",
1691
- "schemas:r",
1692
- "inference:r",
1693
- "documents:r",
1694
- "documents:c",
1695
- "folders:r",
1696
- "folders:c"
1697
- ]
1748
+ allowedActions: DATA_PLANE_ACTIONS
1749
+ },
1750
+ // A reusable `editor` role for the HUMAN owner — DISTINCT from `accessProfile`
1751
+ // (which scopes only the service-principal key). `bootstrap` provisions this
1752
+ // role in the context but binds it to no one; the owner joins themselves so the
1753
+ // data-plane app (app.vectros.ai) shows their KB — its switcher lists only
1754
+ // contexts the signed-in user holds an active access profile in, and bootstrap
1755
+ // grants the human none by default. Bind it after bootstrap with:
1756
+ // vectros access grant --principal usr_<your-user-id> --context agentic-sdlc --role editor
1757
+ // (or the admin app's Access > Contexts > agentic-sdlc > Profiles > Create).
1758
+ // The editor gets the full data plane so a human curator can browse, write/correct,
1759
+ // AND hard-delete the KB (EDITOR_ACTIONS = the service key's set + delete). The
1760
+ // service key deliberately lacks delete and archives instead; the trusted human
1761
+ // owner may permanently remove genuine strays. Still no control-plane action, so
1762
+ // the scope gate accepts it as a data-plane-only role.
1763
+ roles: {
1764
+ editor: [{ allowedActions: EDITOR_ACTIONS }]
1698
1765
  },
1699
1766
  servicePrincipal: {
1700
1767
  externalId: "agentic-sdlc",