Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
9029356
chore: prepare Delivera Vercel preview deploy
iamalbertly May 18, 2026
7eca6c0
ci: provide safe Jira placeholders for PR tests
iamalbertly May 18, 2026
3299707
test: align API contracts with Jira gateway errors
iamalbertly May 18, 2026
f63f310
test: allow CI dummy Jira gateway console noise
iamalbertly May 18, 2026
4baba3c
feat: right-side drawer + cooperative AI UX for Create Work flow
iamalbertly May 25, 2026
d7e7340
feat: Jira outage resilience, dynamic snapshot projects, drawer layou…
iamalbertly May 25, 2026
83fd467
ux: reduce Create Work friction and silence console.error noise
iamalbertly May 25, 2026
d9f8821
feat: 15+ UX improvements, stale resilience, nudge role output, sprin…
iamalbertly May 25, 2026
289683d
ux: canvas paste stripping, close guard, mobile clutter reduction, te…
iamalbertly May 26, 2026
532312b
feat: Create Work intelligence — SEQUENTIAL_TASK_CLUSTER, confidence …
iamalbertly May 27, 2026
9bad883
fix: Create Work button flow — unlock create, unified type resolution…
iamalbertly May 27, 2026
52a75eb
feat: leadership squad visibility, Create Work auto-project, letter-p…
iamalbertly May 28, 2026
771fe07
feat: duplicate prevention, estimate hours, page consolidation
iamalbertly May 28, 2026
bc3c223
feat: mobile-first estimate chips, smarter duplicates, page consolida…
iamalbertly May 28, 2026
41dbc95
feat: estimate slider, Teams chat parser, sprint page layer fixes
iamalbertly May 29, 2026
bc622e7
feat: estimate slider, Teams chat parser, sprint page layer fixes
iamalbertly May 29, 2026
f355e87
feat: UX - Direct-to-value dedupe, squad stall on report, cache-first…
iamalbertly May 30, 2026
6335a7b
feat: UX - Above-fold clutter cut, header More menu, retired legacy p…
iamalbertly May 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
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ jobs:
- run: npm run test:all
env:
CI: true
NODE_ENV: test
JIRA_HOST: https://example.atlassian.net
JIRA_EMAIL: ci-placeholder@example.com
JIRA_API_TOKEN: ci-placeholder-token

deploy:
needs: test
Expand Down
32 changes: 32 additions & 0 deletions .github/workflows/vercel-preview.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Vercel Preview

on:
pull_request:
branches: [main, master]
workflow_dispatch:

jobs:
vercel-preview:
runs-on: ubuntu-latest
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm run build:css && npm run check:css
- name: Skip deploy when Vercel secrets are not configured
if: ${{ env.VERCEL_TOKEN == '' || env.VERCEL_ORG_ID == '' || env.VERCEL_PROJECT_ID == '' }}
run: |
echo "Vercel preview skipped: configure VERCEL_TOKEN, VERCEL_ORG_ID, and VERCEL_PROJECT_ID repository secrets."
- name: Deploy preview to Vercel
if: ${{ env.VERCEL_TOKEN != '' && env.VERCEL_ORG_ID != '' && env.VERCEL_PROJECT_ID != '' }}
run: |
npx vercel pull --yes --environment=preview --token "$VERCEL_TOKEN"
npx vercel build --token "$VERCEL_TOKEN"
npx vercel deploy --prebuilt --token "$VERCEL_TOKEN"
203 changes: 192 additions & 11 deletions README.md

Large diffs are not rendered by default.

15 changes: 7 additions & 8 deletions api/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import dotenv from 'dotenv';
import { createDeliveraExpressCoreApp } from '../lib/Delivera-Express-Core-App-Factory-Handler.js';
import { appEnvConfig } from '../lib/Delivera-Config-Env-Services-Core-SSOT.js';

const app = createDeliveraExpressCoreApp({
port: appEnvConfig.port,
enableBackgroundWorkers: false,
});
// Vercel serverless entrypoint. Keep background workers off in serverless so
// scheduled snapshot work is not duplicated on short-lived function invocations.
dotenv.config();

export default function handler(req, res) {
return app(req, res);
}
const app = createDeliveraExpressCoreApp({ enableBackgroundWorkers: false });

export default app;
5 changes: 3 additions & 2 deletions context.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
- `Delivera-Shared-AutoPreview-Config.js` – exports `AUTO_PREVIEW_DELAY_MS` (400 ms); Report Init and Leadership Data-Loader use it for auto-preview debounce (single source of truth).
- `Delivera-Report-Utils-Jira-Helpers.js` – buildJiraIssueUrl, getEpicStoryItems, isJiraIssueKey (used by Epic TTM linkification and ad-hoc key detection).
- `Delivera-Shared-Global-Nav.js` – injects or updates global nav (Delivera + Report | Current Sprint | Leadership) on all four surfaces (login, report, current-sprint, leadership); single source of truth for nav markup.
- `Delivera-Shared-Outcome-Modal.js` – global outcome modal: client parse preview, **Generate draft** (`POST /api/outcome-draft`), readiness strip, two-stage review table (bulk **Accept all safe** / **Review warnings only** / **Cancel draft**), **Create selected** (`commitChildIndices` + optional `parentSummaryOverride`), **Ctrl+Enter** runs draft when enabled. `initGlobalOutcomeModal` accepts optional `getOutcomeDraftContext()` returning `{ boardId, quarterHint }` (Report and Current Sprint wire board context from storage / selector).
- `Delivera-Work-Draft-Canvas.js` – global work-draft drawer (`#work-draft-drawer`): client parse preview, **Generate draft** (`POST /api/outcome-draft`), readiness strip, review table, **Create selected** (`commitChildIndices` + optional `parentSummaryOverride`). `initWorkDraftDrawer` (aliased as `initGlobalOutcomeModal` in page init) accepts optional `getOutcomeDraftContext()` returning `{ boardId, quarterHint }`. Legacy `Delivera-Shared-Outcome-Modal.js` is retired (`DeleteThisFile_Delivera-Shared-Outcome-Modal.js`).
- **Tests (`tests/*.spec.js`)**
- `Delivera-E2E-User-Journey-Tests.spec.js` – UI and UX/user-journey coverage
- `Delivera-API-Integration-Tests.spec.js` – endpoint contracts and CSV semantics (includes `/api/csv-columns`, `/api/boards.json`, `/api/current-sprint.json`, `GET /current-sprint`, `GET /sprint-leadership`)
Expand All @@ -53,7 +53,8 @@
- `Delivera-Outcome-First-First-Paint-Validation-Tests.spec.js` – Report first-paint context line, empty state, Preview/context line presence, context line cleared after preview, login outcome/trust lines, sidebar context, last-run freshness, current-sprint and leadership load; uses captureBrowserTelemetry and assertTelemetryClean per step; run by orchestration after CSS Build.
- `Delivera-Outcome-Draft-Assistant-Direct-Value-Logcat-Realtime-Validation-Tests.spec.js` – staged Playwright validation for outcome draft panel (precheck, readiness, bulk filters, detail expand, cancel) with mocked `/api/outcome-draft`; direct `fetch` 400 contract; registered in `scripts/Delivera-Tests-Journey-Buckets-Map-SSOT.js` under `journey.outcome-intake`.
- `Delivera-Customer-Simplicity-Trust-Recovery-Validation-Tests.spec.js` – Load latest visibility (empty state vs no projects), Load latest hidden when loading, aria-busy on preview area, context line cleared after preview, error then dismiss re-shows context and Load latest, error recovery context line when preview fails, aria-busy false after load; telemetry + UI per step; run by orchestration after Outcome-First First-Paint.
- `Delivera-Report-Chrome-Direct-Value-Realtime-Validation-Tests.spec.js` – Stubbed `/preview.json` report run: single `#report-filter-strip-summary` context bar, no `#preview-meta` duplicate, compact Performance history row, signals rail flex layout, Leadership tab copy, compact sidebar (no Projects/Range rows), decision strip, mobile overflow guard; Playwright console guard fail-fast; `journey.ux-core` in `Delivera-Tests-Journey-Buckets-Map-SSOT.js`.
- `Delivera-Report-Chrome-Direct-Value-Realtime-Validation-Tests.spec.js` – Stubbed `/preview.json` report run: single `#report-filter-strip-summary` context bar, verdict-only `#preview-meta` (no duplicate scope/freshness), signals rail flex layout, Leadership tab copy, compact sidebar, decision strip; `journey.ux-core`.
- `Delivera-Growth-Direct-Value-Realtime-Validation-Tests.spec.js` – Cross-surface growth UX: zero-outcome context actions, squad stall attention on report (via `Delivera-Report-Page-Squad-Stall-Bridge.js` + `/api/leadership-summary.json`), smart sprints tab default, stale freshness, dashboard stall pulse, cache restore without theater; `journey.ux-core`.
- `tests/Delivera-Tests-Shared-PreviewExport-Helpers.js` – SSOT for `runDefaultPreview`, `waitForPreview`, `skipIfLoginVisible`, `skipIfRedirectedToLogin(page, test, options)`, `selectFirstBoard`, `assertPreviewOrSkip`, `captureBrowserTelemetry`, `assertTelemetryClean`; used by E2E, Excel, UX, CSS Build And Mobile Responsive, Current Sprint Health, Outcome-First First-Paint specs
- `Delivera-Current-Sprint-Work-Risks-Hierarchy-Validation-Tests.spec.js` – validates hierarchical Work risks rendering (parent vs subtask rows tied by `data-parent-key`), accordion behaviour on `.work-risks-toggle`, and that the header “Blockers” metric matches the number of unique `Stuck >24h` issues in the table.
- `Delivera-Current-Sprint-Burndown-Truthfulness-Validation-Tests.spec.js` – validates SP-configuration copy on the Current Sprint burndown card (field not configured vs 0 SP in this sprint vs SP burndown) and that SP burndown paths do not show story-count fallback text.
Expand Down
26 changes: 19 additions & 7 deletions docs/deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,27 @@ Recommended production env:
- `CACHE_BACKEND=redis`
- `REDIS_URL`

## Vercel (Node server mode)
## Vercel (serverless Express mode)

If deploying as a Node server:
The repository includes:

- Framework preset: `Node.js` or `Other`
- Root directory: repository root
- Build command: `npm install`
- Start command: `npm start`
- Set the same required environment variables as production
- `api/index.js` — Vercel serverless entrypoint exporting the Express app.
- `vercel.json` — routes all requests through the Express app and includes `lib/`, `routes/`, `public/`, `docs/`, and `data/` in the function bundle.
- `.github/workflows/vercel-preview.yml` — preview deployment workflow that runs only when Vercel repository secrets are configured.

Use Vercel when you want a quick beta URL. Keep these limits in mind:

- Background snapshot workers are disabled in serverless mode; use Render or another always-on host for scheduled workers.
- Set production environment variables in Vercel Project Settings, never in git.
- Required Vercel project env: `NODE_ENV=production`, `JIRA_HOST`, `JIRA_EMAIL`, `JIRA_API_TOKEN`.
- Auth env for a shareable beta: either SuperTokens variables or legacy `APP_LOGIN_USER`, `APP_LOGIN_PASSWORD`, `SESSION_SECRET`.
- GitHub preview deploy secrets: `VERCEL_TOKEN`, `VERCEL_ORG_ID`, `VERCEL_PROJECT_ID`.

Manual local deploy after `vercel login`:

```bash
npm run vercel:deploy
```

## Pre-deploy checks

Expand Down
Loading
Loading