milestone 33: contract closure — samples, file-authority enumeration, dead code, bundle ceiling
Gates / frontend (push) Successful in 1m34s
Gates / test (push) Successful in 2m3s
Gates / test-aarch64 (push) Failing after 3h13m33s
Gates / package (push) Successful in 5m20s
Gates / container (push) Successful in 15s
CI / gates (push) Failing after 6h30m45s

This commit is contained in:
2026-08-22 23:31:37 +02:00
parent 5da4652e89
commit cc23c97218
49 changed files with 397 additions and 113 deletions
-2
View File
@@ -184,8 +184,6 @@ export const deleteBlocklist = (id: number): Promise<void> => request(`/api/bloc
export const listRules = async (): Promise<Rule[]> => (await request<{ rules: Rule[] }>("/api/rules")).rules;
export const createRule = (input: RuleInput): Promise<RuleEcho> =>
request("/api/rules", { method: "POST", body: input });
export const updateRule = (id: number, input: RuleInput): Promise<RuleEcho> =>
request(`/api/rules/${id}`, { method: "PUT", body: input });
export const deleteRule = (id: number): Promise<void> => request(`/api/rules/${id}`, { method: "DELETE" });
// Local records
+65
View File
@@ -148,6 +148,21 @@ export const sample_create_blocklist: BlocklistEcho = {
url: "https://lists.example/ads.txt",
};
export const sample_get_blocklist: Blocklist = {
checksum: null,
domain_count: 0,
enabled: false,
exception_count: 0,
id: 0,
is_suggested: false,
last_updated: null,
name: "ads",
skipped_regex_count: 0,
skipped_unsupported_count: 0,
url: "https://lists.example/ads.txt",
wildcard_count: 0,
};
export const sample_list_blocklists: { blocklists: Blocklist[] } = {
blocklists: [
{
@@ -210,6 +225,12 @@ export const sample_create_group: Group = {
safe_search: false,
};
export const sample_get_group: Group = {
id: 0,
name: "kids",
safe_search: false,
};
export const sample_update_group: Group = {
id: 0,
name: "teens",
@@ -232,6 +253,16 @@ export const sample_create_rule: RuleEcho = {
pattern: "ads.example",
};
export const sample_get_rule: Rule = {
action: "block",
created_at: 0,
group: "default",
group_id: 0,
id: 0,
kind: "exact",
pattern: "ads.example",
};
export const sample_list_rules: { rules: Rule[] } = {
rules: [
{
@@ -274,6 +305,14 @@ export const sample_create_local_record: LocalRecord = {
value: "192.168.1.10",
};
export const sample_get_local_record: LocalRecord = {
id: 0,
name: "nas.lan",
rtype: "A",
ttl: 0,
value: "192.168.1.10",
};
export const sample_list_local_records: { local_records: LocalRecord[] } = {
local_records: [
{
@@ -300,6 +339,12 @@ export const sample_create_forward_zone: ForwardZone = {
zone: "lan",
};
export const sample_get_forward_zone: ForwardZone = {
id: 0,
resolver: "udp://10.0.0.1:53",
zone: "lan",
};
export const sample_list_forward_zones: { forward_zones: ForwardZone[] } = {
forward_zones: [
{
@@ -332,6 +377,18 @@ export const sample_list_clients: { clients: Client[] } = {
],
};
export const sample_get_client: Client = {
first_seen: 0,
group: "default",
group_id: 0,
hand_edited: false,
id: 0,
ip: "192.168.1.50",
last_seen: 0,
learned_name: "",
name: "laptop",
};
export const sample_update_client: Client = {
first_seen: 0,
group: "default",
@@ -389,6 +446,14 @@ export const sample_create_upstream: UpstreamEcho = {
url: "https://dns2.example/dns-query",
};
export const sample_get_upstream: Upstream = {
enabled: true,
id: 0,
priority: 0,
tls_name: "",
url: "https://dns.example/dns-query",
};
export const sample_update_upstream: UpstreamEcho = {
enabled: true,
id: 0,
+2 -6
View File
@@ -83,7 +83,7 @@ export interface LogoutResponse {
/**
* The three closed enums `src/storage/provenance.zig` stores, as values rather
* than bare types: the copy maps in `features/queries/provenanceCopy.ts` have to
* than bare types: the copy maps in `features/provenance/provenanceCopy.ts` have to
* be proven exhaustive at runtime as well as by `tsc`, exactly as
* `DIAGNOSTIC_CODES` below.
*/
@@ -320,7 +320,7 @@ export interface StatsTimeseries {
/**
* One DNS type's share of the window. `qtype` is the numeric code as logged:
* naming it is the admin's job (`features/queries/qtype.ts`), and a row whose
* naming it is the admin's job (`features/provenance/qtype.ts`), and a row whose
* type was never recorded keeps its own `null` group rather than disappearing.
*/
export interface StatsTypeRow {
@@ -396,10 +396,6 @@ export interface GroupInput {
safe_search?: boolean;
}
export interface GroupSources {
source_ids: number[];
}
export interface Blocklist {
id: number;
url: string;