Commit Graph

152 Commits

Author SHA1 Message Date
Shankar 369a674619 docs: update enterprise comparison to 80% of capabilities
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 20:33:03 -04:00
Shankar a84f12d05b docs: remove open-source competitor comparisons from why-certctl
Keep only paid competitors (CertKit, KeyTalk, Venafi/Keyfactor).
Remove ACME clients, Certimate, CZERTAINLY, cert-manager sections
to avoid driving traffic to free alternatives.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 20:31:38 -04:00
Shankar 42415c5be4 docs: compress why-certctl comparisons to one paragraph each
Replace verbose bullet-list comparisons with dense single-paragraph
summaries for all 7 competitors. Each paragraph covers what the tool
is, what it lacks vs certctl, and where it leads. 48 lines cut.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 20:30:11 -04:00
Shankar fd18ff20a9 docs: tighten README and why-certctl for scannability
README: Remove Contents section (GitHub auto-generates ToC), replace
12-bullet Core capabilities block with link to Feature Inventory,
replace 21-row Database Schema table with one-liner linking to
Architecture Guide. Visitors now hit screenshots ~60 lines sooner.

why-certctl: Remove Feature Summary section (duplicated README and
Feature Inventory content). Competitive comparisons remain as the
focused value of this page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 20:27:24 -04:00
Shankar 9cf0a51288 docs: remove comparison tables from README and why-certctl
The detailed prose comparisons in why-certctl.md are sufficient.
Tables were redundant with the per-competitor sections.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 20:24:19 -04:00
Shankar 33006fda72 fix: restore Contents as vertical bulleted list
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 20:21:11 -04:00
Shankar b1541bcd83 fix: render Contents as inline text instead of bullet list
Remove list markers so dot-separated links flow as a single line
on GitHub instead of rendering as three bullet points.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 20:19:54 -04:00
Shankar 0442aff2d0 docs: expand competitive comparison with CertWarden, Certimate, CZERTAINLY, KeyTalk
README: Replace old 5-column comparison table with 7-competitor table
(certctl, CertKit, CertWarden, Certimate, CZERTAINLY, KeyTalk, cert-manager)
with Free tier row. Remove CertKit from documentation table link text.
Version badge v2.0.4 → v2.0.5, add Why certctl? and Feature Inventory
to docs table, condense ToC, trim Configuration/API/Roadmap sections
with links to detailed docs.

why-certctl.md: Add detailed comparison sections for Certimate (cloud/CDN
focus, no agent, ACME-only), CZERTAINLY (K8s-required microservices,
pluggable connectors, broader vision), and KeyTalk (proprietary, multi-cert-type,
no public docs). Add 14-row summary comparison table covering all 7 competitors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 20:18:23 -04:00
Shankar 1444aba08d fix: Docker Compose missing migrations, network scan []int crash, demo seed data
Three bugs fixed:
- Docker Compose only mounted migration 000001; migrations 000002-000007
  (profiles, agent groups, revocation, discovery, network scans) never ran,
  breaking half the demo features. Now mounts all 7 migrations in order.
- Network Scans page crashed with pq.Array scan error because lib/pq
  doesn't support []int, only []int64. Changed Ports field accordingly.
- Dashboard pie chart displayed "RenewalInProgress" without spaces.
  Added formatStatus() helper for PascalCase → spaced display.

Also adds first-run demo experience improvements:
- 9 discovered certificates (filesystem + network scan mix)
- 3 discovery scans with recent timestamps
- 2 AwaitingApproval renewal jobs for approval workflow demo
- CERTCTL_NETWORK_SCAN_ENABLED=true in Docker Compose
- Network scan targets seeded with last_scan results
- Version badge updated to v2.0.5
- Docs updated (quickstart, advanced demo) to reference seeded data

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 18:33:50 -04:00
Shankar 7028629acd docs: add GUI references to discovery and network scan documentation
Update concepts.md and connectors.md to mention the Discovery and
Network Scans dashboard pages alongside existing API documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 16:19:14 -04:00
Shankar 19f21ead52 docs: add M24 GUI tests to testing guide (discovery, network scan, approval)
Adds Part 19.5 (approval workflow), 19.6 (discovery triage),
19.7 (network scan management) to GUI testing section. Renumbers
existing 19.5 Other Pages to 19.8 and Cross-Cutting to 19.9.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 16:12:36 -04:00
Shankar 8eea4fce03 feat(gui): add discovery triage, network scan management, and approval workflow pages (M24)
Three new GUI surfaces closing the backend-to-frontend gap for V2:

- Discovery triage page: summary stats bar, DataTable with claim/dismiss
  actions, status/agent filters, collapsible scan history panel
- Network scan target management: CRUD with create modal, enable/disable
  toggle, Scan Now button, last scan results display
- Jobs page approval workflow: Approve/Reject buttons for AwaitingApproval
  jobs, rejection reason modal, pending approval banner with count,
  AwaitingApproval/AwaitingCSR added to status filter dropdown

Also adds 13 new frontend tests, 4 API types, 12 API client functions,
2 sidebar nav items, 2 routes, and discovery status badge styles.

Docs updated: README, architecture, quickstart, demo-advanced, CLAUDE.md,
roadmap. Version bumped to v2.0.4.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 15:59:27 -04:00
Shankar c9689acd22 feat: wire ACME EAB into account registration + ZeroSSL auto-fetch
EAB credentials (KID + HMAC) were defined in the ACME connector config
but never wired into the acme.Account registration call. This fixes the
dead code and adds automatic EAB credential fetching for ZeroSSL — when
the directory URL is detected as ZeroSSL and no EAB credentials are
provided, certctl calls ZeroSSL's public API to get them automatically.

Changes:
- Wire EABKid/EABHmac into acme.Account.ExternalAccountBinding
- Add isZeroSSL() detection and fetchZeroSSLEAB() auto-fetch
- Add CERTCTL_ACME_EAB_KID/CERTCTL_ACME_EAB_HMAC env vars to main.go
- Add 13 ACME connector tests (config validation, EAB decode, ZeroSSL
  auto-EAB with mock servers, URL detection)
- Update docs: README, architecture, connectors, demo-advanced,
  testing-guide with EAB/auto-EAB documentation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 15:34:48 -04:00
Shankar 3eef59c36b docs: add table of contents to all major documentation files
Navigation menus for testing guide, architecture, concepts,
connectors, quickstart, advanced demo, and three compliance docs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 23:38:28 -04:00
Shankar c915ebb484 chore: bump version badge to v2.0.3
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 23:29:33 -04:00
Shankar ed8fa7e11f feat: dashboard theme overhaul — light content area with branded teal sidebar
Complete frontend visual redesign using certctl logo color palette:
- Deep teal sidebar (#0c2e25) with prominent centered logo (64px in white pill)
- Light content area (#f0f4f8) with white cards and visible borders
- Brand colors from logo: teal (#2ea88f), blue (#3b7dd8), orange (#e8873a), green (#4ebe6e)
- Inter + JetBrains Mono typography, colored stat card top borders
- All 17 pages + 7 components updated (25 files, ~700 lines changed)
- 15 new dashboard screenshots replacing old dark theme screenshots
- Prometheus metrics e2e test added, integration test mock fixes
- Docs updated: architecture.md theme description, testing-guide.md DNS-PERSIST-01 coverage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 23:27:42 -04:00
Shankar a4ea53efe1 docs: remove stats tagline from README header
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 14:29:56 -04:00
Shankar dfec70073f chore: bump version badge to v2.0.2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 14:24:50 -04:00
Shankar 9d58c1c0e9 feat: add ACME DNS-PERSIST-01 challenge support (IETF draft-ietf-acme-dns-persist)
Standing TXT record at _validation-persist.<domain> eliminates per-renewal
DNS updates. Auto-fallback to dns-01 if CA doesn't offer dns-persist-01.
ScriptDNSSolver extended with PresentPersist method. Configurable via
CERTCTL_ACME_CHALLENGE_TYPE=dns-persist-01 and
CERTCTL_ACME_DNS_PERSIST_ISSUER_DOMAIN env vars.

Also fixes IsExpired edge-case test in discovery_test.go that always failed
due to time.Now() drift between test setup and method invocation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 14:23:46 -04:00
Shankar 6b9133c8c4 docs: clean up connector guide language
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 11:55:01 -04:00
Shankar ed780a9a73 docs: add brief descriptions to screenshot thumbnails
Uses <sub> tags for small text under each screenshot label.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 11:37:14 -04:00
Shankar 874a44e49b docs: compact screenshots to 3-per-row grid layout
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 11:35:16 -04:00
Shankar db29bbb42c docs: shrink README screenshots to thumbnails with click-to-expand
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 11:33:41 -04:00
Shankar 9bed1724c9 docs: move architecture mermaid diagrams out of README
Remove both mermaid flowcharts from README to reduce visual noise.
Architecture doc already has a more detailed version. Replace with
a one-line text summary linking to docs/architecture.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 11:02:38 -04:00
Shankar 42c502db09 docs: remove placeholder Pro waitlist CTA from README
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 23:30:14 -04:00
Shankar d4ff137c58 docs: update README with planned V2 milestones and integration coverage
Add Traefik/Caddy to deployment targets table and architecture
diagram, S/MIME to core capabilities, M24/M25/M26 to V2 roadmap
section, version badge to v2.0.1, stats to 95+ endpoints and
930+ tests. Clarify Vault PKI and DigiCert as future. Expand V4
description. Add OpenSSL/Custom CA note for ADCS integrations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 23:28:50 -04:00
Shankar f6ccecde0d docs: add Scarf Docker pull URLs across README, release workflow, and features
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 21:33:41 -04:00
Shankar a1b41020cf fix: resolve flaky TestGetJobStats_WithData timezone issue
CompletedAt was set to Now()-1h which falls on "yesterday" when CI
runs near midnight UTC, causing the date bucket lookup to miss.
Use Now() directly since the test only needs jobs completed "today".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 20:55:48 -04:00
Shankar de0ce72587 docs: clean up testing guide intro
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 20:47:55 -04:00
Shankar df9055ea83 fix: use real X.509 certs in EST handler tests
EST handler tests used fake PEM data (e.g., "MIIBmjCCAUCgAwIBAgIRATest")
which is invalid base64 (25 chars, not divisible by 4). Go's pem.Decode
fails silently, causing pemToDERChain to return "no certificates found"
and tests to get 500 instead of 200.

Added generateTestCertPEM() helper that creates a real self-signed ECDSA
P-256 certificate, used across all EST handler tests that need cert PEM.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 15:55:26 -04:00
Shankar 304b2d3d02 fix: add GetCACertPEM to connector-layer mock for go vet
The EST milestone (M23) added GetCACertPEM to the issuer.Connector
interface but missed updating mockConnectorLayerIssuer in the adapter
test file. This caused go vet to fail in CI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 15:48:49 -04:00
Shankar e4ba8d4de2 feat: add EST server (RFC 7030) for device certificate enrollment (M23)
Implement Enrollment over Secure Transport protocol with 4 endpoints under
/.well-known/est/ — cacerts (CA chain distribution), simpleenroll (initial
enrollment), simplereenroll (certificate renewal), and csrattrs (CSR
attributes). PKCS#7 certs-only wire format with hand-rolled ASN.1, accepts
both PEM and base64-encoded DER CSRs, configurable issuer and profile
binding, full audit trail. 28 new tests (18 handler + 10 service).

Also includes:
- GetCACertPEM added to issuer connector interface (all 4 issuers updated)
- EST integration tests wired into e2e test suite (13 test cases)
- QA testing guide Part 26 (15 manual EST test cases)
- All docs updated: README, features, architecture, concepts, connectors,
  quickstart, demo-advanced (endpoint counts, MCP wording, agent IDs,
  issuer interface, resource lists, OpenSSL status)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 15:31:06 -04:00
Shankar 42fa9c7791 docs: add Scarf tracking pixels for download analytics
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 05:31:53 -04:00
Shankar 2a96d41a9a docs: increase logo size to 450px
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 05:11:41 -04:00
Shankar dc1f29d712 docs: increase logo size to 350px
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 05:09:37 -04:00
Shankar e4ccff21bc docs: add certctl logo to README header
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 05:05:18 -04:00
Shankar 5e18984a2d fix: handle 204 No Content in fetchJSON, add FK-aware delete errors, v2 screenshots
Frontend: fetchJSON now returns empty object on 204 instead of failing
to parse empty body — fixes silent delete failures across all entities.
Added onError callbacks to owner/team delete mutations to surface errors.

Backend: owner and issuer delete handlers return 409 Conflict with
descriptive messages when FK constraints block deletion, instead of
generic 500.

Added 15 v2 dashboard screenshots, updated README screenshot section,
logo asset, page count references (18→full), and QA guide with FK
constraint test coverage.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 05:03:50 -04:00
Shankar 3a48a9e584 docs: merge quickstart and demo guide into single quickstart.md
Consolidated two overlapping docs into one cohesive guide framed around
the 47-day certificate lifespan reduction. Covers setup, dashboard
walkthrough, API exploration, cert creation, discovery, CLI, MCP, demo
data reference, and a 10-step stakeholder presentation flow.

Removed demo-guide.md and updated all cross-references in README,
compliance-pci-dss.md, and testing-guide.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 04:09:03 -04:00
Shankar 16f5c92988 docs: use 90+ for endpoint count in README subtitle
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 04:01:42 -04:00
Shankar 12b927bbbf docs: add certificate lifespan timeline diagram to README
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 03:58:28 -04:00
Shankar 6f8d17b13f docs: update README subtitle
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 03:53:56 -04:00
Shankar d25da8f405 docs: fix 16 discrepancies found by cross-validating all docs against source code
CLI syntax corrected across 5 files (concepts, demo-guide, demo-advanced,
architecture, features): list-certs→certs list, get-cert→certs get, etc.
Removed non-existent health/metrics commands, replaced with status.
Subcommand count 10→12 everywhere.

architecture.md: Go 1.22→1.25, endpoint count 91→93, ER diagram expanded
from 15 to 21 tables (added renewal_policies, certificate_revocations,
discovered_certificates, discovery_scans, network_scan_targets).

connectors.md: added GenerateCRL and SignOCSPResponse to issuer interface,
added Email and Webhook rows to notifier config table.

compliance docs: fixed keygen warning messages to match actual log output,
CERTCTL_STEPCA_PROVISIONER_KEY→CERTCTL_STEPCA_KEY_PATH, openssl genrsa→
crypto/ecdsa.GenerateKey, CERTCTL_SERVER_ADDR→CERTCTL_SERVER_HOST+PORT.

README.md: v2.0.0 version bump, solo developer mention, feature list,
table of contents, documentation table moved to top, 7 fact-check fixes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 03:51:33 -04:00
shankar0123 d85d1d4282 Merge pull request #3 from shankar0123/v2-dev
V2.0.0 — Operational Maturity Release
2026-03-25 02:54:52 -04:00
Shankar e176f2e923 docs: add V2 manual testing guide (284 tests, 25 sections)
Comprehensive QA runbook covering all V2 features with exact curl
commands, expected outputs, and unambiguous pass/fail criteria.
Linked from README documentation table.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 01:42:58 -04:00
Shankar c907cff4c3 docs: complete V2 audit remediation — OpenAPI spec, demos, and features
- Add 15 missing operations to openapi.yaml (M18b discovery, M20 deployments,
  M21 network scan, M22 Prometheus) — spec now has 93 operations matching all
  93 router routes
- Add 6 new component schemas (DiscoveredCertificate, DiscoveryScan,
  DiscoveryReport, NetworkScanTarget, NetworkScanTargetCreate,
  StatusMessageResponse)
- Add Discovery and Network Scan tags to OpenAPI spec
- Fix stale "Prometheus format deferred to V3" claim in metrics description
- Add Part 4.5 (Target CRUD) to demo-advanced.md with create/update/delete
  curl examples
- Expand Certificate Profiles section in features.md with list/get/update
  curl examples
- Add Deployment Trigger section to features.md with curl examples
- Add discovery-summary and discovery-scans curl examples to features.md
- Remove 3 empty directories (internal/agent/, internal/audit/, internal/policy/)
- Update features.md OpenAPI scope from "78 documented" to "93 operations"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 00:42:58 -04:00
Shankar 18f0da7f56 fix: correct stale counts across all docs (tables 19→21, MCP tools 76→78, tests 860→900+)
V2 audit found 3 critical number mismatches propagated across 8 files:
- Table count was 19 everywhere but actual migrations create 21 tables
- MCP tool count was 76 but tools.go registers 78 (M21/M22 additions)
- README MCP breakdown claimed 83 tools with math summing to 90
- architecture.md still had stale 860+ test count
- features.md OpenAPI claim said 93 ops but spec has 78
- mcp.md tool-per-domain table had wrong counts in 10 of 16 rows
- Added 3 network_scan_targets to seed_demo.sql for demo completeness
- Added curl examples to Agent Groups section in features.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 00:36:47 -04:00
Shankar f644b5ea80 docs: add value context, usage examples, and fix stale counts in features.md
Every major section now explains why the feature matters (not just what it
does) with concrete curl examples. Fixes stale counts: 84→91 endpoints,
18→19 tables, 860→900+ tests, 85→93 OpenAPI operations. Adds network scan
env vars to config reference and M21/M22 rows to feature matrix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 23:52:00 -04:00
Shankar d768848825 fix: remove duplicate containsSubstring helper and update README for M21+M22
Removes redeclared containsSubstring from network_scan_test.go (already
defined in profile_test.go in the same package). Updates README with 91
endpoints, 19 tables, network discovery API section, Prometheus endpoint,
and M21/M22 roadmap entries.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 23:43:42 -04:00
Shankar be85fbd77e feat: add network certificate discovery (M21) and Prometheus metrics (M22)
M21 adds server-side active TLS scanning of CIDR ranges with concurrent
probing, sentinel agent pattern for pipeline reuse, and full CRUD API for
scan targets. M22 adds Prometheus exposition format endpoint alongside
existing JSON metrics. Comprehensive documentation audit updates all docs
to reflect 91 endpoints, 19 tables, 6 scheduler loops, and 900+ tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 23:37:47 -04:00
Shankar 3dc76e0b87 fix: normalize certificate status case in stats service
The stats service compared statuses using exact string match against
PascalCase domain constants, but the database may contain legacy
lowercase values. This caused the dashboard to show duplicate pie chart
segments (green "Active" + gray "active") and incorrect summary counts.

Use strings.ToLower() normalization in both GetCertificatesByStatus and
GetDashboardSummary to handle any case variant from the database.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 12:17:24 -04:00