Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 7 additions & 0 deletions _layouts/services.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@
<h1>Services</h1>
</header>
<main>
<section>
<h2>2027</h2>
<ul>
<li>Program Committee – International Conference on Program Comprehension (ICPC 2027), Research Track</li>
<li>Program Committee – Workshop on Agentic Engineering (AGENT 2027), co-located with ICSE 2027</li>
</ul>
</section>
<section>
<h2>2025</h2>
<!-- <p>Here you can introduce your services. For example:</p> -->
Expand Down
2 changes: 1 addition & 1 deletion _news/announcement_9.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ inline: true
related_posts: false
---

New on the site: recent preprints on [RAG hallucination detection](/publications/#yu2026rt4chart), [conversational agent testing](/publications/#lin2026agenteval), [code specification alignment](/publications/#xu2026bespec), and [causal root-cause analysis](/publications/#fang2026openrca). See the [updated publication list](/publications/) for all recent work.
Four new preprints: on [RAG hallucination detection](/publications/#yu2026rt4chart), [conversational agent testing](/publications/#lin2026agenteval), [code specification alignment](/publications/#xu2026bespec), and [causal root-cause analysis](/publications/#fang2026openrca). All are on the [publication list](/publications/).
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/img/oneai-math-education-poster.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/video/oneai-math-education.mp4
Binary file not shown.
2 changes: 1 addition & 1 deletion public/social-card.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions scripts/prepare-assets.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ await cp('assets/pdf', 'public/assets/pdf', { recursive: true });
for (const image of ['prof_pic.jpg', 'parrot.png']) {
await cp(`assets/img/${image}`, `public/assets/img/${image}`);
}
await cp(
'assets/img/oneai-math-education-poster.jpg',
'public/assets/img/oneai-math-education-poster.jpg',
);
await cp(
'assets/img/oneai-math-education-builder-poster.jpg',
'public/assets/img/oneai-math-education-builder-poster.jpg',
);
await mkdir('public/assets/video', { recursive: true });
await cp('assets/video/oneai-math-education.mp4', 'public/assets/video/oneai-math-education.mp4');
const bibliography = await readFile('_bibliography/papers.bib', 'utf8');
await writeFile('public/papers.bib', bibliography.replace(/^---\s*\n---\s*\n/, ''));
await sharp('public/social-card.svg').png().toFile('public/social-card.png');
4 changes: 2 additions & 2 deletions src/components/ResearchMap.astro
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import { projects } from '../data/site';
<li>
<a href={item.href}>
{item.name}
<span>Related work</span>
<span>{item.venue}</span>
</a>
</li>
))}
Expand Down Expand Up @@ -79,7 +79,7 @@ import { projects } from '../data/site';
position: relative;
padding: 20px;
border-top: 2px solid var(--blue);
background: linear-gradient(180deg, #f3f6fa, #fff 80%);
background: linear-gradient(180deg, var(--wash), var(--paper-raised) 80%);
}
.map-branch::before {
content: '';
Expand Down
38 changes: 19 additions & 19 deletions src/components/TestLab.astro
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ const { compact = false } = Astro.props;
<style>
.test-lab {
display: block;
border: 1px solid #c3d3eb;
background: #f6f9ff;
border: 1px solid var(--line);
background: var(--paper-raised);
border-radius: 7px;
overflow: hidden;
min-width: 0;
Expand All @@ -60,36 +60,36 @@ const { compact = false } = Astro.props;
display: flex;
justify-content: space-between;
gap: 16px;
background: #e9f0fc;
background: var(--accent-wash);
padding: 15px 23px;
color: #294d86;
color: var(--blueberry);
font-size: 14px;
}
.lab-language {
color: #536176;
color: var(--muted);
}
.lab-code {
padding: 22px 25px;
font-size: 16px;
line-height: 1.75;
background-image: radial-gradient(#c4d2e6 0.65px, transparent 0.65px);
background-image: radial-gradient(var(--buttercream) 0.65px, transparent 0.65px);
background-size: 12px 12px;
overflow-x: auto;
}
.lab-code code {
display: block;
background: #f6f9ff;
background: var(--paper-raised);
width: fit-content;
padding-right: 12px;
}
.code-keyword {
color: #2454c6;
color: var(--blue);
}
.code-number {
color: #a54022;
color: var(--strawberry);
}
.code-comment {
color: #536176;
color: var(--muted);
}
.test-table {
padding-inline: 23px;
Expand All @@ -99,21 +99,21 @@ const { compact = false } = Astro.props;
grid-template-columns: 1fr 75px 65px;
gap: 10px;
padding: 10px 0;
border-bottom: 1px solid #d8e0ea;
border-bottom: 1px solid var(--line);
font-size: 14px;
}
.test-row code {
font-size: 13px;
}
.test-head {
font-size: 12px;
color: #536176;
color: var(--muted);
}
.pass {
color: #236246;
color: var(--blueberry);
}
.fail {
color: #a43224;
color: var(--strawberry);
font-weight: 600;
}
.lab-actions {
Expand All @@ -125,20 +125,20 @@ const { compact = false } = Astro.props;
}
button {
padding: 9px 14px;
border: 1px solid #2454c6;
background: #2454c6;
border: 1px solid var(--blue);
background: var(--blue);
color: white;
border-radius: 4px;
font-size: 14px;
}
button:hover {
background: #153f9e;
background: var(--blue-dark);
}
button span {
margin-left: 13px;
}
[data-test-count] {
color: #536176;
color: var(--muted);
font-size: 13px;
white-space: nowrap;
}
Expand All @@ -148,7 +148,7 @@ const { compact = false } = Astro.props;
padding: 12px 23px 22px;
font-size: 14px;
line-height: 1.6;
color: #435774;
color: var(--muted);
}
@media (max-width: 420px) {
.lab-top,
Expand Down
28 changes: 28 additions & 0 deletions src/content/writing/why-evidence-belongs-in-the-workflow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
title: 'Why evidence belongs in the workflow'
description: 'A product should make the important evidence easy to inspect, from a student hint to a coding-agent patch.'
publishedAt: 2026-10-01
language: en
topics: [Product practice, Trustworthy AI]
audience: educators, engineers, and research readers
draft: false
featured: true
---

When an AI system helps someone work, the useful question is not only whether it produced an answer. It is whether the person can see enough of the reasoning, checks, and trade-offs to decide what happens next.

That principle connects my work on coding-agent evaluation with the AI education tools I am building. A coding agent can propose a patch; a teacher can generate an assessment; a student can ask for a hint. In each case, the system should leave behind a trail that a person can inspect.

## Three places evidence can show up

For a student, evidence might be a hint that reveals one step at a time instead of giving away the answer. For a teacher, it might be a rubric decision that can be reviewed before feedback reaches a student. For an engineering team, it might be a test that fails on a plausible incorrect patch rather than only on an obvious regression.

The interface matters because evidence that is difficult to find is evidence that will not be used. A good workflow puts the relevant check beside the decision it supports.

## Keep the person in the loop

Automation is most useful when it shortens the path to a well-informed decision. It should generate a candidate, surface the uncertainty, and make the next check easy. The final decision still needs a person who understands the goal and can explain why the result is acceptable.

That is the idea behind [OneAI](/products/#oneai), an AI maths education workspace that connects student guidance, assessment generation, rubric review, and student-level error reports. The same idea appears in [UTBoost](/research/#utboost), where stronger tests make benchmark conclusions harder to satisfy with an incorrect patch.

Evidence does not make a system infallible. It makes its claims easier to question, improve, and use responsibly.
40 changes: 40 additions & 0 deletions src/data/pacific.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/**
* A compact reference to the Pacific Studio products featured on the public
* Pacific Studio site. Keeping this in one place lets the homepage and the
* products page present the same names, links, and lifecycle labels.
*/
export const pacificProducts = [
{
id: 'openase',
name: 'OpenASE',
verb: 'Build',
status: 'Released',
description:
'Issue-driven orchestration for the full software lifecycle, with Claude Code, Codex, and Gemini CLI working across design, development, testing, and deployment.',
detail: 'Open source · Go · multi-agent',
href: 'https://github.com/PacificStudio/openase',
cta: 'View on GitHub',
},
{
id: 'veriformal',
name: 'VeriFormal',
verb: 'Prove',
status: 'Released',
description:
'AI-assisted formal verification that turns plain code into machine-checked proof goals, with an offline workflow for C, Java, Dafny, and Rust.',
detail: 'Formal methods · no egress',
href: 'https://veriformal.pacificstudio.ai/',
cta: 'Start verifying',
},
{
id: 'keylight',
name: 'KeyLight',
verb: 'Understand',
status: 'Beta',
description:
'An interactive paper reader that combines layout-aware parsing, sentence-level highlights, bilingual reading, and answers that point back to the source.',
detail: 'PDF reader · research workflow',
href: 'https://keylight.pacificstudio.ai/',
cta: 'Try the beta',
},
] as const;
20 changes: 14 additions & 6 deletions src/data/research.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@ export const researchGroups = [
description: 'Strengthening tests and examining the reliability of benchmark results.',
projects: ['swe-abs', 'utboost'],
related: [
{ name: 'BeSpec', href: '/publications/#xu2026bespec' },
{ name: 'Code RLVR synthesis', href: '/publications/#zheng2026adr' },
{ name: 'Benchmark design', href: '/publications/#cao2025' },
{ name: 'BeSpec', venue: 'arXiv 2026 · Preprint', href: '/publications/#xu2026bespec' },
{
name: 'Code RLVR synthesis',
venue: 'arXiv 2026 · Preprint',
href: '/publications/#zheng2026adr',
},
{ name: 'Benchmark design', venue: 'ICML 2026 · Position', href: '/publications/#cao2025' },
],
},
{
Expand All @@ -26,9 +30,13 @@ export const researchGroups = [
description: 'Controlled transformations reveal errors in vision and language systems.',
projects: ['rome', 'tin'],
related: [
{ name: 'AgentEval', href: '/publications/#lin2026agenteval' },
{ name: 'TRACE', href: '/publications/#li2026trace' },
{ name: 'MetaIC', href: '/publications/#yu2022automated' },
{
name: 'AgentEval',
venue: 'arXiv 2026 · Preprint',
href: '/publications/#lin2026agenteval',
},
{ name: 'TRACE', venue: 'arXiv 2026 · Preprint', href: '/publications/#li2026trace' },
{ name: 'MetaIC', venue: 'ISSTA 2022', href: '/publications/#yu2022automated' },
],
},
];
Expand Down
7 changes: 7 additions & 0 deletions src/data/services.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
[
{
"year": 2027,
"items": [
"Program Committee – International Conference on Program Comprehension (ICPC 2027), Research Track",
"Program Committee – Workshop on Agentic Engineering (AGENT 2027), co-located with ICSE 2027"
]
},
{
"year": 2025,
"items": [
Expand Down
1 change: 1 addition & 0 deletions src/data/site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export const site = {
'Boxi Yu, Senior Research Fellow at Lero, Ireland. Research on software testing, trustworthy AI, and the evaluation of coding agents.',
scholar: 'https://scholar.google.com/citations?user=Tat3jMQAAAAJ',
github: 'https://github.com/BoxiYu',
x: 'https://x.com/BoshCavendish',
orcid: 'https://orcid.org/0000-0001-5213-7189',
};

Expand Down
13 changes: 8 additions & 5 deletions src/layouts/Base.astro
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,21 @@ const canonical = new URL(path, site.url);
const navigation = [
['Research', '/research/'],
['Publications', '/publications/'],
['Products', '/products/'],
['Teaching', '/teaching/'],
['Blog', '/writing/'],
['Service', '/services/'],
['About', '/about/'],
];
const fullTitle = title ? `${title} | Boxi Yu` : 'Boxi Yu | Software Testing & Trustworthy AI';
const fullTitle = title ? `${title} | Boxi Yu` : 'Boxi Yu | Human-centric AI and software';
---

<!doctype html>
<html lang={language}>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#ffffff" />
<meta name="theme-color" content="#fbfaf7" />
<title>{fullTitle}</title>
<meta name="description" content={description} />
{(noindex || previewDrafts) && <meta name="robots" content="noindex, nofollow" />}
Expand All @@ -51,7 +54,7 @@ const fullTitle = title ? `${title} | Boxi Yu` : 'Boxi Yu | Software Testing & T
<meta property="og:image" content={`${site.url}/social-card.png`} />
<meta
property="og:image:alt"
content="Boxi Yu. Software testing and trustworthy AI. Senior Research Fellow at Lero, Ireland."
content="Boxi Yu. Human-centric AI and software. Senior Research Fellow at Lero, Ireland."
/>
<meta name="twitter:card" content="summary_large_image" />
<slot name="head" />
Expand Down Expand Up @@ -91,12 +94,12 @@ const fullTitle = title ? `${title} | Boxi Yu` : 'Boxi Yu | Software Testing & T
<main id="main" tabindex="-1"><slot /></main>
<footer class="site-footer wrapper">
<div>
<a class="footer-name" href="/">Boxi Yu</a><p>Software testing &amp; trustworthy AI.</p>
<a class="footer-name" href="/">Boxi Yu</a><p>Human-centric AI and software.</p>
</div>
<nav aria-label="Social and resources">
<a href="/about/#contact">Email</a><a href={site.scholar}>Scholar</a><a href={site.github}
>GitHub</a
><a href={site.orcid}>ORCID</a>
><a href={site.x}>X</a><a href={site.orcid}>ORCID</a>
</nav>
<p class="copyright">&copy; {new Date().getFullYear()} Boxi Yu</p>
</footer>
Expand Down
8 changes: 4 additions & 4 deletions src/pages/about.astro
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import { site } from '../data/site';
</ul>
<section class="contact-panel" aria-labelledby="contact">
<h2 id="contact" tabindex="-1">Contact</h2>
<p>For research discussions and collaboration enquiries:</p>
<p>I am open to research collaborations and industry partnerships. Get in touch at:</p>
<p class="contact-address" data-email-address>{site.email}</p>
<div class="resource-links">
<button type="button" class="copy-button" data-copy-email hidden
Expand All @@ -56,9 +56,9 @@ import { site } from '../data/site';
<p class="contact-status" role="status" data-email-status></p>
</section>
<div class="resource-links">
<a href={site.scholar}>Google Scholar</a><a href={site.github}>GitHub</a><a
href={site.orcid}>ORCID</a
><a href="https://twitter.com/BoshCavendish">Twitter</a>
<a href={site.scholar}>Google Scholar</a><a href={site.github}>GitHub</a><a href={site.x}
>X</a
><a href={site.orcid}>ORCID</a>
</div>
</div>
</div>
Expand Down
Loading
Loading