@beastmode-develeap/beastmode 0.1.253 → 0.1.254

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.
@@ -15,7 +15,7 @@
15
15
  }
16
16
  </script>
17
17
  <!--BOARD_DATA-->
18
- <script>window.__BUILD_STAMP__ = "20260514-133019-3c7c5be";</script>
18
+ <script>window.__BUILD_STAMP__ = "20260514-135333-73e149b";</script>
19
19
  <link rel="preconnect" href="https://fonts.googleapis.com">
20
20
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
21
21
  <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
@@ -5810,15 +5810,15 @@ function ItemDetailSidebar({ item, onClose, onStatusChange, selectedProject, all
5810
5810
  ${item.status === 'Superseded' && html`
5811
5811
  <div class="detail-superseded-info" data-testid="sidebar-superseded-info"
5812
5812
  style="display:flex;align-items:center;gap:8px;padding:4px 0 8px;font-size:13px;color:var(--text-muted);">
5813
- <span class="badge-superseded" style="font-size:11px;padding:2px 8px;border-radius:4px;">Superseded</span>
5813
+ <span class="badge-superseded" style="font-size:11px;padding:2px 8px;border-radius:4px;">Superseded by</span>
5814
5814
  ${item.extra && item.extra.superseded_by && html`
5815
5815
  <span>\u2192</span>
5816
- <a href="#" data-testid="sidebar-successor-link"
5816
+ <a href=${'#/board?item=' + item.extra.superseded_by} data-testid="sidebar-successor-link"
5817
5817
  style="color:var(--accent);text-decoration:none;font-family:var(--font-mono);font-size:12px;"
5818
5818
  onClick=${(e) => {
5819
5819
  e.preventDefault();
5820
5820
  const target = allItems && allItems.find ? allItems.find(i => String(i.id) === String(item.extra.superseded_by)) : null;
5821
- if (target && onSelectItem) onSelectItem(target);
5821
+ if (target && onSelectItem) { onSelectItem(target); navigate('#/board?item=' + item.extra.superseded_by); }
5822
5822
  }}>#${item.extra.superseded_by}</a>
5823
5823
  `}
5824
5824
  </div>
@@ -6019,10 +6019,10 @@ function ItemDetailSidebar({ item, onClose, onStatusChange, selectedProject, all
6019
6019
  <span class="audit-from" data-testid="audit-from-status">From: <strong>${payload.from_status || ''}</strong></span>
6020
6020
  ${payload.superseded_by && html`
6021
6021
  <span class="audit-successor">
6022
- Successor: <a href="#" data-testid="audit-successor-link" onClick=${(e) => {
6022
+ Successor: <a href=${'#/board?item=' + payload.superseded_by} data-testid="audit-successor-link" onClick=${(e) => {
6023
6023
  e.preventDefault();
6024
6024
  const target = allItems && allItems.find ? allItems.find(i => String(i.id) === String(payload.superseded_by)) : null;
6025
- if (target && onSelectItem) onSelectItem(target);
6025
+ if (target && onSelectItem) { onSelectItem(target); navigate('#/board?item=' + payload.superseded_by); }
6026
6026
  }}>#${payload.superseded_by}</a>
6027
6027
  </span>
6028
6028
  `}
@@ -6265,13 +6265,13 @@ function PipelineView({
6265
6265
  <div class="card-footer">
6266
6266
  ${isOverlayStatus(item.status) && html`<span class=${'card-badge badge-overlay ' + overlayBadgeClass(item.status)} title=${overlayTooltip(item.status)}>${overlayBadgeLabel(item.status)}</span>`}
6267
6267
  ${item.extra && item.extra.superseded_by && html`<a class="card-badge badge-successor"
6268
- href="#" data-testid="card-successor-link"
6268
+ href=${'#/board?item=' + item.extra.superseded_by} data-testid="card-successor-link"
6269
6269
  title=${'Superseded by #' + item.extra.superseded_by}
6270
6270
  onClick=${(e) => {
6271
6271
  e.preventDefault();
6272
6272
  e.stopPropagation();
6273
6273
  const target = filteredItems.find(i => String(i.id) === String(item.extra.superseded_by));
6274
- if (target) setSelectedItem(target);
6274
+ if (target) { setSelectedItem(target); navigate('#/board?item=' + item.extra.superseded_by); }
6275
6275
  }}>→ #${item.extra.superseded_by}</a>`}
6276
6276
  ${!isParentEpic && item.parent_epic && html`<span class="card-badge badge-epic">epic:${item.parent_epic}</span>`}
6277
6277
  ${item.priority && html`<span class=${'card-badge ' + priorityBadgeClass(item.priority)}>${item.priority}</span>`}
@@ -6387,9 +6387,11 @@ function PipelineView({
6387
6387
  if (bd.supersededCount > 0) parts.push(bd.supersededCount + ' Superseded');
6388
6388
  if (bd.activeCount > 0) parts.push(bd.activeCount + ' Active');
6389
6389
  return html`<span class="epic-group-breakdown" data-testid="epic-group-breakdown"
6390
- style="font-size:10px;color:var(--text-muted);margin-left:4px;">(${parts.join(', ')}${bd.mostCommonSuccessor ? html` → <a href="#" data-testid="epic-breakdown-successor-link" style="color:var(--accent);text-decoration:none;" onClick=${(e) => {
6390
+ style="font-size:10px;color:var(--text-muted);margin-left:4px;">(${parts.join(', ')}${bd.mostCommonSuccessor ? html` → <a href=${'#/board?item=' + bd.mostCommonSuccessor} data-testid="epic-breakdown-successor-link" style="color:var(--accent);text-decoration:none;" onClick=${(e) => {
6391
6391
  e.preventDefault();
6392
6392
  e.stopPropagation();
6393
+ const target = filteredItems.find(i => String(i.id) === String(bd.mostCommonSuccessor));
6394
+ if (target) { setSelectedItem(target); navigate('#/board?item=' + bd.mostCommonSuccessor); }
6393
6395
  }}>#${bd.mostCommonSuccessor}</a>` : ''})</span>`;
6394
6396
  })()}
6395
6397
  </div>
@@ -6588,6 +6590,19 @@ function BoardPage({ selectedProject }) {
6588
6590
  const [dragInfo, setDragInfo] = useState(null);
6589
6591
  const dragInfoRef = useRef(null);
6590
6592
  const [selectedItem, setSelectedItem] = useState(null);
6593
+
6594
+ useEffect(() => {
6595
+ if (!items || items.length === 0) return;
6596
+ const hash = window.location.hash || '';
6597
+ const match = hash.match(/[?&]item=(\d+)/);
6598
+ if (match) {
6599
+ const targetId = match[1];
6600
+ const target = items.find(i => String(i.id) === targetId);
6601
+ if (target && (!selectedItem || String(selectedItem.id) !== targetId)) {
6602
+ setSelectedItem(target);
6603
+ }
6604
+ }
6605
+ }, [items]);
6591
6606
  const [showCreateDialog, setShowCreateDialog] = useState(false);
6592
6607
  const [searchTerm, setSearchTerm] = useState('');
6593
6608
  const [filtersOpen, setFiltersOpen] = useState(false);
@@ -7462,13 +7477,13 @@ function BoardPage({ selectedProject }) {
7462
7477
  <div class="card-footer">
7463
7478
  ${isOverlayStatus(item.status) && html`<span class=${'card-badge badge-overlay ' + overlayBadgeClass(item.status)} title=${overlayTooltip(item.status)}>${overlayBadgeLabel(item.status)}</span>`}
7464
7479
  ${item.extra && item.extra.superseded_by && html`<a class="card-badge badge-successor"
7465
- href="#" data-testid="card-successor-link"
7480
+ href=${'#/board?item=' + item.extra.superseded_by} data-testid="card-successor-link"
7466
7481
  title=${'Superseded by #' + item.extra.superseded_by}
7467
7482
  onClick=${(e) => {
7468
7483
  e.preventDefault();
7469
7484
  e.stopPropagation();
7470
7485
  const target = swimlaneFilteredItems.find(i => String(i.id) === String(item.extra.superseded_by));
7471
- if (target) setSelectedItem(target);
7486
+ if (target) { setSelectedItem(target); navigate('#/board?item=' + item.extra.superseded_by); }
7472
7487
  }}>→ #${item.extra.superseded_by}</a>`}
7473
7488
  ${!isParentEpic && item.parent_epic && html`<span class="card-badge badge-epic">epic:${item.parent_epic}</span>`}
7474
7489
  ${item.priority && html`<span class=${'card-badge ' + priorityBadgeClass(item.priority)}>${item.priority}</span>`}
@@ -7527,9 +7542,11 @@ function BoardPage({ selectedProject }) {
7527
7542
  if (bd.supersededCount > 0) parts.push(bd.supersededCount + ' Superseded');
7528
7543
  if (bd.activeCount > 0) parts.push(bd.activeCount + ' Active');
7529
7544
  return html`<span class="epic-group-breakdown" data-testid="epic-group-breakdown"
7530
- style="font-size:10px;color:var(--text-muted);margin-left:4px;">(${parts.join(', ')}${bd.mostCommonSuccessor ? html` → <a href="#" data-testid="epic-breakdown-successor-link" style="color:var(--accent);text-decoration:none;" onClick=${(e) => {
7545
+ style="font-size:10px;color:var(--text-muted);margin-left:4px;">(${parts.join(', ')}${bd.mostCommonSuccessor ? html` → <a href=${'#/board?item=' + bd.mostCommonSuccessor} data-testid="epic-breakdown-successor-link" style="color:var(--accent);text-decoration:none;" onClick=${(e) => {
7531
7546
  e.preventDefault();
7532
7547
  e.stopPropagation();
7548
+ const target = swimlaneFilteredItems.find(i => String(i.id) === String(bd.mostCommonSuccessor));
7549
+ if (target) { setSelectedItem(target); navigate('#/board?item=' + bd.mostCommonSuccessor); }
7533
7550
  }}>#${bd.mostCommonSuccessor}</a>` : ''})</span>`;
7534
7551
  })()}
7535
7552
  </div>
@@ -1 +1 @@
1
- 3c7c5be7c8d1e68f8185cf9fb4a061d891f7a9e6
1
+ 73e149b8cf593e406538affdec7cb4efa8799e8b
@@ -1 +1 @@
1
- 20260514-133019-3c7c5be
1
+ 20260514-135333-73e149b
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beastmode-develeap/beastmode",
3
- "version": "0.1.253",
3
+ "version": "0.1.254",
4
4
  "description": "BeastMode Dark Factory — turn intent into verified software",
5
5
  "type": "module",
6
6
  "bin": {