Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
5e5d515
infra setup
Apr 19, 2026
d04c03d
SES framework: agents, pipelines, orchestrator, dashboards, docs
Apr 23, 2026
f1ce461
fix: update Jira MCP to use new /search/jql API + add GitHub MCP client
Apr 23, 2026
16d7802
fix: wire all agents to real data, fix broken PM agents, update README
Apr 23, 2026
3cf6172
feat: unified traceability store — concern → decision → req → jira → …
Apr 24, 2026
72da7e7
Rebuild traceability: 184 artifacts, 760 links, 10 types, zero orphans
Apr 25, 2026
b2d7099
Update intelligence dashboard with unified traceability view
Apr 25, 2026
9ca62de
Add comprehensive SES architecture diagram (HTML)
Apr 25, 2026
746f6cd
Add comprehensive SES explainer document
Apr 25, 2026
709dbe4
[agent:req_extractor] Add requirement REQ-001: Yeah, starting. So… I …
AshrithaG Apr 27, 2026
97e89d4
[agent:req_extractor] Add requirement REQ-002: I'm a bit confused. Ta…
AshrithaG Apr 27, 2026
b9e2eee
[agent:req_extractor] Add requirement REQ-003: I think I'll be travel…
AshrithaG Apr 27, 2026
419fcb9
[agent:req_extractor] Add requirement REQ-004: But he did tumble, rig…
AshrithaG Apr 27, 2026
a56845a
[agent:req_extractor] Add requirement REQ-001: Yeah, starting. So… I …
AshrithaG Apr 27, 2026
76dfc86
[agent:req_extractor] Add requirement REQ-002: I'm a bit confused. Ta…
AshrithaG Apr 27, 2026
766af90
[agent:req_extractor] Add requirement REQ-003: I think I'll be travel…
AshrithaG Apr 27, 2026
cece530
[agent:req_extractor] Add requirement REQ-004: But he did tumble, rig…
AshrithaG Apr 27, 2026
cdfe425
Remove outdated REQ-001.md
AshrithaG Apr 27, 2026
75d6770
Remove outdated REQ-002.md
AshrithaG Apr 27, 2026
3402ba4
Remove outdated REQ-003.md
AshrithaG Apr 27, 2026
4541da4
Remove outdated REQ-004.md
AshrithaG Apr 27, 2026
59a7b21
[agent:req_extractor] Add CONSTRAINT REQ-010: Training data requirements
AshrithaG Apr 27, 2026
bc56239
[agent:req_extractor] Add FUNCTIONAL REQ-001: Automated product attri…
AshrithaG Apr 27, 2026
53ccc93
[agent:req_extractor] Add CONSTRAINT REQ-005: Azure cloud deployment
AshrithaG Apr 27, 2026
f04caad
[agent:req_extractor] Add NON_FUNCTIONAL REQ-007: Pipeline performanc…
AshrithaG Apr 27, 2026
784b87d
[agent:req_extractor] Add CONSTRAINT REQ-011: Exclude pricing from ML…
AshrithaG Apr 27, 2026
55e7012
[agent:req_extractor] Add USER_GOAL REQ-012: Feedback loop for model …
AshrithaG Apr 27, 2026
11e13fb
[agent:req_extractor] Add NON_FUNCTIONAL REQ-002: ML confidence scoring
AshrithaG Apr 27, 2026
6faf6d0
[agent:req_extractor] Add FUNCTIONAL REQ-004: Multi-format vendor dat…
AshrithaG Apr 27, 2026
bff0651
[agent:req_extractor] Add USER_GOAL REQ-003: Human-in-the-loop review…
AshrithaG Apr 27, 2026
4a420a6
[agent:system] Add risk_register document
AshrithaG Apr 27, 2026
f31a64f
[agent:system] Add adr_adr_threshold_calibration document
AshrithaG Apr 27, 2026
8fa8383
[agent:system] Update risk register with proper statements and health…
Apr 29, 2026
2977ee3
Add complete project documentation: ADRs, risk register, requirements…
Apr 29, 2026
2440c1c
Add demo scripting, SES shell helper, dashboards and docs bundle
Apr 29, 2026
19c2d45
Add rich traceability demo transcript (requirements, decisions, conce…
Apr 29, 2026
9f6e7df
[agent:req_extractor] Add SOFT_GOAL REQ-008: Reduce manual data entry…
AshrithaG Apr 29, 2026
519d488
[agent:req_extractor] Add FUNCTIONAL REQ-009: Per-attribute ML routing
AshrithaG Apr 29, 2026
6a083fd
[agent:req_extractor] Add FUNCTIONAL REQ-006: Staging tables for data…
AshrithaG Apr 29, 2026
d97d61f
Add SES architecture docs and interactive dashboard presenter script
Apr 29, 2026
4ec51ae
Architecture Diagram
hrishi-bhardwaj55 Apr 30, 2026
94c20b3
modified 0001 ADR
hrishi-bhardwaj55 Apr 30, 2026
61e6495
Dashboards: trace story tree, interactive arch stats, WBS + SES works…
Apr 30, 2026
6cf47b8
Preserve product ingestion architecture diagram
arjunnai Apr 30, 2026
0da271d
update photo
arjunnai Apr 30, 2026
87f56f7
Add project timeline visualization and SES AI time savings dashboard
jaivards-cell Apr 30, 2026
1fdb9e9
modify context diagram
hrishi-bhardwaj55 Apr 30, 2026
1e60a09
Regenerate REQ docs from trace JSON; add sync_req_docs.py
Apr 30, 2026
224f818
Add SES Traceability dashboard; refresh talking script and trace links
Apr 30, 2026
dbaf1f6
Simplify trace dashboards; SES speaker Q&A; REQ-006 P0
May 1, 2026
e41acac
ses traceability
hrishi-bhardwaj55 May 1, 2026
17a6476
update 2
hrishi-bhardwaj55 May 1, 2026
0f9c258
feat(tick-board): add Kanban Tick Board with GitHub API persistence
May 14, 2026
b1627b5
ci(pages): deploy tick-board via GitHub Actions (branch UI only allow…
May 14, 2026
0861407
Add GitHub Actions workflow for GitHub Pages deployment
AshrithaG May 14, 2026
d8f1f52
added ETIM ADRs
hrishi-bhardwaj55 Jun 29, 2026
64b38e6
Summer batch run: process 10 client meetings (May 14 - Jul 16) throug…
agonugun Jul 20, 2026
a8b2833
Add drop-folder CI trigger: inbox VTT -> pipeline -> PR for human review
agonugun Jul 20, 2026
358f65d
Add defect management workflow + /defect-triage skill
agonugun Jul 20, 2026
84acc8f
Add quality plan -> implementation traceability matrix (verified)
agonugun Jul 20, 2026
66b3d25
Merge pull request #4 from AshrithaG/summer-batch-run
AshrithaG Jul 20, 2026
f88d3e1
Merge pull request #5 from AshrithaG/quality-defect-workflow
AshrithaG Jul 20, 2026
c84ad7b
Add Program Health dashboard: provenance-stamped answers to the big t…
agonugun Jul 20, 2026
2c60baa
Merge pull request #6 from AshrithaG/program-health-dashboard
AshrithaG Jul 20, 2026
b76fb74
Add weekly program-health auto-refresh (Jira export -> dashboard -> PR)
agonugun Jul 20, 2026
479440a
Merge pull request #7 from AshrithaG/dashboard-auto-refresh
AshrithaG Jul 20, 2026
544535c
Add LLM requirements/ADR extraction CI (transcripts -> agents -> PR)
agonugun Jul 20, 2026
4bed663
Merge pull request #10 from AshrithaG/requirements-extraction-ci
AshrithaG Jul 20, 2026
98e1c13
Add ETIM requirements + architecture artifacts (spec v1.2, ADRs 0016-…
arjunnai Jul 29, 2026
449b697
Correct where ETIM matching happens: ML owns it, behind attribute mat…
arjunnai Jul 29, 2026
9ace90a
Add agent eval harness, custom SES linter, and CI quality gates
agonugun Jul 29, 2026
a2f929b
Add refactor, test-review and planning agents; register all three
agonugun Jul 29, 2026
5ef1afa
Fix Project Health forecast and stream grouping; add risk practice area
agonugun Jul 29, 2026
1d64d56
Add QA interface for the VTT parser and document the product-repo bou…
agonugun Jul 29, 2026
24651a8
Merge pull request #12 from AshrithaG/agonugun/ses-hardening-project-…
AshrithaG Jul 29, 2026
f8a8b93
Log the ETIM release-pin risk, and generate the register from the dat…
agonugun Jul 29, 2026
9ada779
Merge pull request #13 from AshrithaG/agonugun/ses-hardening-project-…
AshrithaG Jul 29, 2026
263ee7b
Add Reflection & Closing slide + script: 3-day cycle failure, AI tick…
arjunnai Jul 29, 2026
6a9f9bc
Split Reflection & Closing into its own deck
arjunnai Jul 29, 2026
5cffb3e
Point slide 4 at ADR-018, add the live ADR walkthrough, and fix the t…
arjunnai Jul 29, 2026
e275ac2
Rebuild slide 1 as a v1.0 vs v1.3 comparison, and go monochrome
arjunnai Jul 29, 2026
e570a3d
Move artifact links into the footer, plain-English deltas, drop the b…
arjunnai Jul 29, 2026
ad8c4c2
Declutter the slides and drop the jargon
arjunnai Jul 29, 2026
5c76a88
Rebuild slide 4 as chose-vs-rejected
arjunnai Jul 29, 2026
d990d09
Rewrite the talking script in plain complete sentences
arjunnai Jul 29, 2026
5459a89
Close the requirements trace gap and rewrite the talking script
arjunnai Jul 30, 2026
40f42ce
Correct the test count: 10 passing, 1 skipping without the archive
arjunnai Jul 30, 2026
98ef0cf
Add a legible detail slide; revert slide 1 to four requirement classes
arjunnai Jul 30, 2026
4645a1b
Merge Arjun's script edit forward onto the five-slide deck
arjunnai Jul 30, 2026
8f1005a
Rebuild v6.0 as v5.0 plus one box
arjunnai Jul 30, 2026
6cfd20f
Generate paste-ready Confluence copies of the 21 ADRs
arjunnai Jul 30, 2026
26592c8
Explain the wrong-class failure instead of asserting it
arjunnai Jul 30, 2026
29fb4b1
Adopt Arjun's v4 script; drop the "same staging" contradiction
arjunnai Jul 30, 2026
e984993
Add an ADR column to the decisions slide
arjunnai Jul 30, 2026
d1e227a
Merge req/arch crit coverage: spec v1.4, five-slide deck, rebuilt v6 …
arjunnai Jul 30, 2026
51914c7
[agent:dashboard] Weekly program health refresh (run 7)
AshrithaG Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
50 changes: 50 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Anthropic
ANTHROPIC_API_KEY=

# Jira
JIRA_SERVER=https://epartsmse.atlassian.net/
JIRA_EMAIL=
JIRA_API_TOKEN=
JIRA_PROJECT_KEY=EPARTS

# Slack
SLACK_BOT_TOKEN=
SLACK_TEAM_CHANNEL=
SLACK_ALERT_CHANNEL=

# Bitbucket / GitHub
# --- Product repo the SES acts on -------------------------------------------
# The SES is a harness that operates on the product repo from the outside; it
# does not live inside it (see docs/ses_product_repo_integration.md). These
# point the Bitbucket MCP client (mcp/bitbucket.py) at the eParts ML repo.
BITBUCKET_WORKSPACE=epartsservices
BITBUCKET_REPO=intelligent-attribute-prediction
# Token scope: start with PR read + PR comment ONLY.
# Do NOT grant repository:write until SES005 is fixed — commit_file() currently
# defaults to branch="main" (mcp/bitbucket.py:52), so a write-scoped token would
# let an agent commit to the team's main branch with no PR and no human gate.
# `python3 tools/lint_ses.py --strict` reports every affected call site.
BITBUCKET_TOKEN=

# Confluence
CONFLUENCE_URL=
CONFLUENCE_TOKEN=
CONFLUENCE_SPACE_KEY=

# Google Drive
GOOGLE_DRIVE_SERVICE_ACCOUNT_JSON=
GOOGLE_DRIVE_TRANSCRIPT_FOLDER_ID=

# Vector store
CHROMA_PERSIST_DIR=./memory/chroma

# Database
SQLITE_DB_PATH=./memory/

# Agent config
CLAUDE_MODEL=claude-sonnet-4-5-20250514
CRON_POLL_INTERVAL_MIN=15
STALE_REQ_THRESHOLD_DAYS=14
P0_APPROVAL_REQUIRED=true
CONFIDENCE_THRESHOLD_READINESS=200
ALPHA_CALIBRATION_READINESS=100
71 changes: 71 additions & 0 deletions .github/workflows/program-health.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Program Health auto-refresh — the scheduled measurement process.
#
# Every Monday morning (and on demand from the Actions tab) this workflow:
# 1. exports all EPARTS issues from Jira (dashboard/fetch_jira.py, REST API,
# credentials from repo secrets — never in code),
# 2. regenerates dashboard/program_health.html (seeded, reproducible),
# 3. opens a PULL REQUEST with the refreshed numbers.
# Human review of the PR stays in the loop before the new numbers land on
# main — same gate pattern as the transcript pipeline.
#
# Metamodel: Process (weekly measurement), Artifacts (jira_issues.json +
# program_health.html), Resources (CI runner + Jira API), Measurements are
# the artifact itself.

name: Program health refresh

on:
schedule:
- cron: "0 12 * * 1" # Mondays 12:00 UTC (8am ET)
workflow_dispatch: {}

permissions:
contents: write
pull-requests: write

concurrency:
group: program-health
cancel-in-progress: false

jobs:
refresh:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"

# Both scripts are stdlib-only — no pip install.
- name: Export Jira issues
env:
JIRA_EMAIL: ${{ secrets.JIRA_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
run: python3 dashboard/fetch_jira.py

- name: Regenerate dashboard
run: |
python3 dashboard/generate_program_health.py | tee /tmp/summary.txt
{
echo "## Program health refresh"
echo ""
echo '```'
cat /tmp/summary.txt
echo '```'
echo ""
echo "Provenance: data exported by \`dashboard/fetch_jira.py\` this run;"
echo "every figure recomputes from \`dashboard/data/jira_issues.json\`."
echo "Review the numbers, then merge — merging publishes the refresh."
} > /tmp/pr_body.md
cat /tmp/pr_body.md >> "$GITHUB_STEP_SUMMARY"

- name: Open pull request with refreshed dashboard
uses: peter-evans/create-pull-request@v6
with:
branch: pipeline/program-health-${{ github.run_number }}
commit-message: "[agent:dashboard] Weekly program health refresh (run ${{ github.run_number }})"
title: "Program health refresh (run ${{ github.run_number }})"
body-path: /tmp/pr_body.md
labels: agent-generated, needs-human-review
delete-branch: true
132 changes: 132 additions & 0 deletions .github/workflows/quality-gates.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
# Quality gates — the deterministic first line of defence, plus agent evals.
#
# Design premise (AI-tools coaching session with Cory Gwin, GitHub Copilot,
# 2026-07-24): "A great deal of quality assurance is deterministic and consumes
# no tokens." He pushed back on treating types/linters/coverage/security tooling
# as merely basic checks — they are the first line of defence and should be
# leaned into hard, because they run continuously at zero marginal cost. Only
# behaviour that is genuinely non-deterministic needs a model in the loop, and
# that is what the eval job covers.
#
# Three jobs, cheapest first:
# 1. deterministic — custom SES linter (tools/lint_ses.py) + ruff
# 2. security — Trivy: vulnerabilities, misconfiguration, secrets
# 3. evals — agent behaviour regression detection (evals/), offline
#
# All three are stdlib-only or action-provided; jobs 1 and 3 need no API key and
# no network, so they are cheap enough to block every push. The model-dependent
# eval tier costs tokens and is therefore opt-in via workflow_dispatch.
#
# Metamodel: Process (quality gate), Artifacts (violation reports, eval report),
# Resources (CI runner, Trivy, the eval harness), Measurements (violation counts,
# eval scores and detected regressions).

name: Quality gates

on:
push:
branches: [main]
pull_request:
workflow_dispatch:
inputs:
live_evals:
description: "Also run the model-dependent eval tier (costs tokens)"
type: boolean
default: false

permissions:
contents: read

concurrency:
group: quality-gates-${{ github.ref }}
cancel-in-progress: true

jobs:
deterministic:
name: Deterministic gates (SES linter + ruff)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"

# The SES linter is stdlib-only by design — it must run even when the
# agent dependencies (anthropic, chromadb, torch...) are not installed.
- name: Custom SES linter
run: python3 tools/lint_ses.py

# Advisory rules (currently SES005: commit_file() defaulting to main)
# are reported but do not fail the build yet. Flip to --strict once the
# affected call sites are fixed; see docs/ses_product_repo_integration.md
# §4, where fixing SES005 is a precondition for granting the harness
# write access to the product repo.
- name: Custom SES linter (strict — advisory findings, non-blocking)
continue-on-error: true
run: python3 tools/lint_ses.py --strict

- name: Install ruff
run: python -m pip install --upgrade pip ruff

# ruff is advisory for now: it reports 79 pre-existing violations in code
# written before any linting was enforced here. Ratcheting those down is
# tracked separately — turning it blocking today would just train the team
# to ignore a permanently-red gate. The custom SES linter above IS
# blocking, because its rules were introduced clean.
- name: ruff (advisory — pre-existing violations being ratcheted down)
continue-on-error: true
run: ruff check .

security:
name: Security scan (Trivy)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

# Repo scan: dependency vulnerabilities, IaC/config misconfiguration, and
# hardcoded secrets. Fails the build on HIGH/CRITICAL only — anything
# noisier trains the team to ignore the gate, which is worse than no gate.
- name: Trivy filesystem scan
uses: aquasecurity/trivy-action@0.28.0
with:
scan-type: fs
scan-ref: .
scanners: vuln,misconfig,secret
severity: HIGH,CRITICAL
ignore-unfixed: true
exit-code: "1"
format: table

evals:
name: Agent evals (offline tier)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"

# Offline tier: routing evals execute the real routing table and the
# skill suites validate their controlled vocabularies. No model, no API
# key, no network — so this gates every PR. A failure here means an
# agent lost an ability it previously had; the report names which.
- name: Run offline evals
run: python3 -m evals.runner --json eval-report.json

# Model-dependent tier: runs the skill scenarios against a real model and
# scores its tool/label selections. Opt-in because it costs tokens.
- name: Run live evals
if: ${{ github.event_name == 'workflow_dispatch' && inputs.live_evals }}
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: python3 -m evals.runner --live --json eval-report-live.json

- name: Upload eval report
if: always()
uses: actions/upload-artifact@v4
with:
name: eval-report
path: eval-report*.json
if-no-files-found: ignore
70 changes: 70 additions & 0 deletions .github/workflows/requirements-extraction.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Requirements & ADR extraction — drives the LLM agents over meeting
# transcripts and opens a PR with the generated requirements + ADR drafts.
#
# Closes the gap that the offline minutes pipeline left open: minutes were
# generated for the summer meetings, but the requirements-extraction and
# ADR agents were never re-run on that data. This runs them (transcript_parser
# -> req_extractor -> adr_generator) using the ANTHROPIC_API_KEY repo secret,
# then opens a PULL REQUEST — the human review of that PR is the approval gate
# before any requirement/ADR is baselined on main.
#
# Manual trigger only (workflow_dispatch): this is a deliberate, reviewed run,
# not something that should fire on every push.

name: Requirements & ADR extraction

on:
workflow_dispatch:
inputs:
since:
description: "Only process transcripts dated on/after this (YYYY-MM-DD)"
required: false
default: "2026-05-01"

permissions:
contents: write
pull-requests: write

concurrency:
group: requirements-extraction
cancel-in-progress: false

jobs:
extract:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"

# Only the light deps the agents' LLM path needs — not chromadb/torch.
- name: Install agent deps
run: pip install "anthropic>=0.42" "python-dotenv>=1.0" "pydantic-settings>=2.7" "pydantic>=2.10"

- name: Run requirements + ADR extraction
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
# base.py's hardcoded default model id is stale and it always sends
# temperature; pin a current, temperature-accepting model.
CLAUDE_MODEL: claude-sonnet-4-5-20250929
LLM_PROVIDER: anthropic
run: |
python -m pipeline.extract_from_meetings \
--since "${{ github.event.inputs.since }}" \
--summary-file /tmp/pr_body.md
cat /tmp/pr_body.md >> "$GITHUB_STEP_SUMMARY"

- name: Open pull request with generated requirements + ADRs
uses: peter-evans/create-pull-request@v6
with:
branch: pipeline/requirements-${{ github.run_number }}
commit-message: "[agent:req_extractor+adr_generator] Extract requirements & ADRs from meetings (run ${{ github.run_number }})"
title: "Agent-generated requirements & ADRs for review (run ${{ github.run_number }})"
body-path: /tmp/pr_body.md
labels: agent-generated, needs-human-review
add-paths: |
requirements/parsed/**
docs/adr/**
delete-branch: true
43 changes: 43 additions & 0 deletions .github/workflows/static.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Simple workflow for deploying static content to GitHub Pages
name: Deploy static content to Pages

on:
# Runs on pushes targeting the default branch
push:
branches: ["main"]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false

jobs:
# Single deploy job since we're just deploying
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
# Upload entire repository
path: '.'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5
Loading