Inspiration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for TONARI
Inspiration
TONARI is an app I built on my own. It makes waiting at live shows more fun and spreads out the crowd on the way home. Every time I updated it, I had the same question: before releasing, what should I check, and can I check it the same way every time and keep the results? I wanted a setup where GitLab handles the checking and a person makes the final call with everything in front of them.
What it does
- Automatic checks on every change. Sending a change to GitLab runs a 10-job pipeline:
plan:flow-contract,create:source-integrity,verify:protocol(runs the app's test suite),semgrep-sast,secret_detection,package:pages,secure:repository,release:manifest,configure:fail-closedandgovern:audit. In pipeline 2972464080, all 10/10 jobs passed. - App behavior tests. In a separate run, the app's npm test suite passed 238/238.
- Security scans. SAST ran across the whole app. It pointed out 2 spots in the file added in this change; a person reviewed each one and confirmed both are written safely. GitLab secret detection: 0 reported.
- GitLab Duo summary. A GitLab Duo flow writes a summary of the situation and the next items to check, based on information a person provides. Duo writes text proposals only; a person chooses what to adopt. Keeping decisions with people is the safer design.
- One release record. The app version and scan results are gathered into one record file, and a dedicated checker program confirms that all required items are present. Before release, a person looks at this record and decides.
- File-change (tamper) check. Adding one line to a saved copy of the record makes the check fail; restoring it makes it pass again (PASS → FAIL → PASS).
How we built it
- Imported the existing TONARI source (MIT) into a GitLab project and built the post-code automation around it in
.gitlab-ci.yml, with stages covering plan, create, verify, secure, package, release, configure and govern. verify:protocolruns the Node.js test suite (npm test).- Security: GitLab SAST (Semgrep analyzer) and GitLab Secret Detection templates in the pipeline.
- GitLab Duo Agent Platform: a proposal-only flow (no tools that change code), triggered by a person with the facts to summarize.
- Release record: a Node.js tool (
tools/release-evidence.mjs) that writes the record and a checker that confirms every required item, plus a hash-based file-change check. - Demo video narrated in English and Japanese, under 3 minutes.
Challenges we ran into
- Keeping the AI role clear: we designed the Duo flow so it can only write proposals, which kept every release decision with a person.
- Making results easy to act on: many check results are hard to read all at once, so we combined the Duo summary with one record file that a person can review quickly.
- Making the record trustworthy: we added a checker for required items and a file-change check so the record can be relied on later.
Accomplishments that we're proud of
- 10/10 pipeline jobs passed in pipeline 2972464080.
- 238/238 app tests passed (separate run).
- SAST across the whole app; both new spots in this change reviewed and confirmed safe. GitLab secret detection: 0 reported.
- Duo summaries that help a person grasp the situation quickly and decide calmly.
- A single record that answers "Did you really check?", with a tamper check demonstrated PASS → FAIL → PASS.
What we learned
- Running the same checks automatically on every change prevents the oversights that tend to happen with manual work, and keeps the results.
- AI is most useful here as a writer of clear proposals, with people making the decisions.
- Putting the version, scan results and proposals into one checked record makes reviews faster and easier to explain later.
What's next for TONARI
- Move from Assisted toward Supervised: let Duo agents carry out more steps (for example opening merge requests) with a person approving the outcome.
- Publish the app to a public deployment from the pipeline and add a monitoring stage.
- Run the file-change check inside GitLab on every release, and measure TONARI's crowd-spreading effect at real live shows.
Path: B — Bring Your Own (existing MIT-licensed TONARI app, imported to GitLab). Autonomy level: Assisted — Duo writes text proposals; a person decides.
Credits: inunanba
Built With
- gitlab
- gitlab-ci
- gitlab-duo
- gitlab-duo-agent-platform
- gitlab-pages
- gitlab-sast
- gitlab-secret-detection
- javascript
- node.js
- npm
- semgrep
Log in or sign up for Devpost to join the conversation.