This repository has been archived on 2026-11-08. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
carl/scripts/e2e/CarlDashboardSeedCheck.java
james.maes 1b334d1c03 feat: build Carl family agent and financial workflows
Implement the standalone Carl application, native administration, family API, financial workflows, protected reports, public fictional fixtures and consistent monetary presentation. Fresh full verification passes 419 tests; running package payloads match. Record the owner-confirmed CI/CD and GitOps direction for the next implementation.
2026-10-01 14:25:52 -05:00

63 lines
3.0 KiB
Java

/* Copyright (C) 2026 KofTwentyTwo */
package com.kof22.agentadmin.bootstrap;
import java.math.BigDecimal;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Clock;
import java.time.LocalDate;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kof22.agentcore.store.AgentMigrations;
import com.kof22.carlai.domain.CarlService;
import com.kof22.carlai.domain.DebtPlans;
import com.kof22.carlai.domain.FinancialPlanning;
import com.kof22.carlai.domain.FinancialRecords;
import org.testcontainers.containers.PostgreSQLContainer;
/** Executes optional visual seeds against real disposable PostgreSQL without claiming browser acceptance. */
public final class CarlDashboardSeedCheck
{
private CarlDashboardSeedCheck()
{
}
public static void main(String[] arguments) throws Exception
{
try(var database = new PostgreSQLContainer<>("postgres:16-alpine"))
{
database.start();
var source = NativeDatabases.source(database.getJdbcUrl(), database.getUsername(), database.getPassword());
AgentMigrations.migrate(source);
try(var c = source.getConnection(); var sql = c.createStatement())
{
c.setAutoCommit(false);
sql.execute("INSERT INTO carl_household(id,name,display_zone) VALUES(1,'Synthetic visual seed','America/Chicago')");
sql.execute("INSERT INTO carl_member(id,household_id,principal,label,can_manage) VALUES(1,1,'alice','Owner',true),(2,1,'bob','Reader',true)");
sql.execute("INSERT INTO carl_permission(member_id,domain,details) VALUES(1,'FINANCE',true),(2,'FINANCE',true)");
c.commit();
}
var service = new CarlService(source, Clock.systemUTC());
long existingCard = new FinancialRecords(service).createAccount("alice", "Synthetic Card", "CREDIT_CARD", "USD", false, BigDecimal.ONE, "PRIVATE", "Synthetic statement");
var debt = new DebtPlans(service);
LocalDate date = LocalDate.of(2026, 9, 1);
debt.terms("alice", existingCard, date, new BigDecimal("1000.00"), new BigDecimal("100.00"), BigDecimal.ZERO, new BigDecimal("0.24"), BigDecimal.ZERO, "Synthetic terms");
debt.paymentProfile("alice", existingCard, date, date.plusDays(14), new BigDecimal("100.00"), new BigDecimal("100.00"), FinancialPlanning.Strategy.AVALANCHE, "Synthetic schedule");
var facts = CarlDashboardVisualSeed.seed(service);
var json = new ObjectMapper();
var root = json.valueToTree(facts);
var observation = root.path("planFacts").path("observations").get(0);
if(observation == null || !"MATCH".equals(observation.path("facts").path("outcome").asText()) || observation.path("currentPlanVersionMatches").asBoolean(true))
{
throw new IllegalStateException("Synthetic matched transfer must remain distinct from current plan agreement");
}
Files.writeString(Path.of(arguments[0]), json.writerWithDefaultPrettyPrinter().writeValueAsString(facts));
System.out.println("SYNTHETIC_DASHBOARD_SEED_PASS");
}
}
}