Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
3579727
feat(dx): PR#2 — seed_dev.py for deterministic fake data + 5 safety g…
Apr 27, 2026
14a75be
docs(ingestion): discovery-only philosophy + spec catch-up (§2.3, §3.…
Apr 27, 2026
3765af2
Revert "feat(dx): PR#2 — seed_dev.py for deterministic fake data + 5 …
Apr 27, 2026
2a81a2c
docs(ops): FDD-OPS-012 — issue sync batch-per-project (parity with PRs)
Apr 28, 2026
3cb99fe
docs(architecture): ingestion v2 — diagnostic + 10× target + migratio…
Apr 28, 2026
0146cfa
feat(ingestion): Phase 1 of v2 — issues sync streams per-project (FDD…
Apr 28, 2026
5898f0b
fix(ingestion): strip NULL bytes (0x00) from text fields before persist
Apr 28, 2026
94a4fb1
docs(ingestion): Phase 2 drafts — per-source workers + per-scope wate…
Apr 28, 2026
43ee84d
feat(ingestion): Phase 2 step 2.1 — apply scope_key migration
Apr 28, 2026
3261d8d
feat(ingestion): Phase 2 step 2.2 — per-scope watermark API
Apr 28, 2026
396f8fd
feat(ingestion): Phase 2 step 2.3 — _sync_issues uses per-project wat…
Apr 28, 2026
a76546e
feat(ingestion): Phase 2 steps 2.4 + 2.5 — per-repo watermark writes …
Apr 28, 2026
729357e
docs(ingestion): Phase 2 plan — update status to PARTIAL after 2.1-2.…
Apr 28, 2026
40047b9
fix(ingestion): Phase 2-B step 2.7 (urgent) — drop legacy uq_watermar…
Apr 28, 2026
b27bd06
feat(ingestion): Phase 2-B step 2.4-B — read per-repo watermarks for PRs
Apr 28, 2026
8915aae
feat(ingestion): Phase 2-B step 2.5-B — read per-repo watermarks for …
Apr 28, 2026
08ba720
fix(ingestion): preserve Jira changelog in _map_issue so inline extra…
Apr 28, 2026
e8dae7c
feat(ingestion): effort estimation fallback chain (FDD-OPS-016)
Apr 29, 2026
e0e6d56
fix(metrics): status normalization with statusCategory fallback (FDD-…
Apr 29, 2026
7cdb035
fix(metrics): sprint status pipeline — 4-layer cheese fix (FDD-OPS-018)
Apr 29, 2026
5f8de18
docs(ingestion): knowledge capture INC-020..023 + v2 status across ex…
Apr 29, 2026
4fc4caf
chore(gitignore): ignore .claude/scheduled_tasks.lock and projects/
Apr 29, 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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ npm-debug.log*

# === Claude Code ===
.claude/settings.local.json
.claude/scheduled_tasks.lock
.claude/projects/

# === Factory (read-only reference, not deployed) ===
# factory/ is tracked but treated as read-only reference docs
12 changes: 11 additions & 1 deletion pulse/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,25 @@ PULSE_DATA_PORT=8000
# -- Source Connector Tokens ------------------------------------------------
# GitHub Personal Access Token (repo, read:org scopes)
GITHUB_TOKEN=
# GitHub org slug — REQUIRED. Used by discover_repos() — see ingestion-spec §2.3.
GITHUB_ORG=
# GitLab Personal Access Token (read_api scope)
GITLAB_TOKEN=
# Jira API Token + email
JIRA_API_TOKEN=
JIRA_EMAIL=
# Jira base URL (e.g., https://your-org.atlassian.net)
JIRA_BASE_URL=
# JIRA_PROJECTS is intentionally absent. PULSE uses dynamic discovery
# (ingestion-spec §2.3); the active project list is maintained in
# `jira_project_catalog` table and resolved by ModeResolver. Do NOT add
# JIRA_PROJECTS unless you set DYNAMIC_JIRA_DISCOVERY_ENABLED=false (not
# recommended).
DYNAMIC_JIRA_DISCOVERY_ENABLED=true
# Azure DevOps Personal Access Token (Code, Work Items read)
AZURE_DEVOPS_PAT=
# Jenkins API credentials (read-only: Overall/Read, Job/Read, Run/Read)
JENKINS_BASE_URL=https://jenkins.webmotors.com.br
JENKINS_BASE_URL=
JENKINS_USERNAME=
JENKINS_API_TOKEN=

Expand Down
48 changes: 19 additions & 29 deletions pulse/config/connections.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,13 @@ connections:
token_env: GITHUB_TOKEN
base_url: https://api.github.com
sync_interval_minutes: 15
# Per ingestion-spec §2.3 (Discovery-Only): NO explicit list of repos.
# The connector calls `discover_repos(active_months=12)` on each cycle
# via GraphQL `organization.repositories(orderBy: PUSHED_AT)` filtered
# by activity. New repos appear automatically; archived ones drop off
# without manual YAML edits.
scope:
repositories:
- "webmotors-private/webmotors.next.ui"
- "webmotors-private/webmotors.portal.ui"
- "webmotors-private/webmotors.buyer.ui"
- "webmotors-private/webmotors.buyer.desktop.ui"
- "webmotors-private/webmotors.catalogo.next.ui"
- "webmotors-private/webmotors.fipe.next.ui"
- "webmotors-private/webmotors.pf"
- "webmotors-private/eleanor.flutter"
- "webmotors-private/webmotors.app.pf.search.bff"
active_months: 12

- name: "Webmotors Jenkins"
source: jenkins
Expand All @@ -41,13 +37,11 @@ connections:
sync_interval_minutes: 15
scope:
# Job list is loaded from config/jenkins-job-mapping.json (auto-generated).
# Generated 2026-04-14 by READ-ONLY SCM scan of 544 active PRD Jenkins
# jobs — each job's lastBuild → remoteUrls resolves the GitHub repo.
# Total: 577 PRD jobs across 283 repos.
#
# To regenerate: run scripts/discover_jenkins_jobs.py (READ-ONLY).
# The sync worker reads prd_jobs from the mapping file at startup.
jobs_from_mapping: true # Signals config.py to use jenkins-job-mapping.json
# Generated by READ-ONLY SCM scan of active PRD Jenkins jobs — each
# job's lastBuild → remoteUrls resolves the GitHub repo. Per
# ingestion-spec §3.6, regen via scripts/discover_jenkins_jobs.py
# when new repos appear (manual or weekly cron).
jobs_from_mapping: true

- name: "Webmotors Jira"
source: jira
Expand All @@ -56,19 +50,15 @@ connections:
token_env: JIRA_API_TOKEN
base_url: https://webmotors.atlassian.net
sync_interval_minutes: 15
# Per ingestion-spec §2.3 (Discovery-Only): NO explicit project list.
# `ProjectDiscoveryService` lists ALL Jira projects; `SmartPrioritizer`
# auto-activates projects with ≥3 PR references. Tenant config in
# `tenant_jira_config` controls discovery mode (must be 'smart' for
# auto-activation). PII-flagged projects require manual approval.
scope:
projects:
# Canais Digitais Web (Kanban)
- "DESC" # PF - Descobrir veículo
- "ENO" # PF - Encontrar oferta
- "ANCR" # PF - Anunciar
- "PUSO" # PF - USO
# Canais Digitais App (Kanban)
- "APPF" # PF - Aplicativo
# Sprint-based projects
- "FID" # Fidelidade
- "CTURBO" # Consultor Turbo Lab
- "PTURB" # Portal Turbo Lab
mode: smart
smart_min_pr_references: 3
smart_pr_scan_days: 90

# Issue status mapping — Webmotors Jira (Portuguese) → PULSE normalized
# Primary source; overrides DEFAULT_STATUS_MAPPING in normalizer.py.
Expand Down
Loading
Loading