From 53e7be21bbf80aa4bf9e734f783a304b7e978fc5 Mon Sep 17 00:00:00 2001 From: Harkeerat Singh Date: Fri, 4 Sep 2026 20:06:59 +0000 Subject: [PATCH 1/3] docs: add GSoC 2026 final report for project 1 --- .../Harkeerat_Singh_GSoC26_Final_Report.md | 274 ++++++++++++++++++ .../final_canonicalisation_flow.svg | 167 +++++++++++ .../final_editor_picks_tests.png | Bin 0 -> 114796 bytes .../final_elk_architecture.svg | 140 +++++++++ .../Harkeerat_Singh/final_elk_fanout.svg | 3 + .../Harkeerat_Singh/final_import_flow.svg | 149 ++++++++++ 6 files changed, 733 insertions(+) create mode 100644 content/posts/Harkeerat_Singh_GSoC26_Final_Report.md create mode 100644 static/images/Harkeerat_Singh/final_canonicalisation_flow.svg create mode 100644 static/images/Harkeerat_Singh/final_editor_picks_tests.png create mode 100644 static/images/Harkeerat_Singh/final_elk_architecture.svg create mode 100644 static/images/Harkeerat_Singh/final_elk_fanout.svg create mode 100644 static/images/Harkeerat_Singh/final_import_flow.svg diff --git a/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md b/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md new file mode 100644 index 0000000..5e98f40 --- /dev/null +++ b/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md @@ -0,0 +1,274 @@ +--- +title: "Structured Format for Saved Circuit Data | GSoC 2026 | Final Report" +date: 2026-09-01T12:24:00+05:30 +author: Harkeerat Singh +image: "/images/Harkeerat_Singh/cover_image.png" +tags: ["GSoC 2026", "Vue.js", "TypeScript", "JSON Schema", "Ajv", "Serialization", "Canonicalization", "Algorithms", "Graph Theory", "ELK.js"] +draft: false +type: post +--- + +Hello everyone, I'm [Harkeerat Singh](https://www.linkedin.com/in/harkeerat-singh-cse/) ([Harkeerat24](https://github.com/Harkeerat24)), and this is my final project report for **Google Summer of Code 2026** with [CircuitVerse](https://circuitverse.org/) for the project **Structured Format for Saved Circuit Data**. + +> **TL;DR:** Over this GSoC, I built and hardened a new **Canonical v1** project format for CircuitVerse. It can deterministically export projects, rebuild them through a typed import pipeline, preserve real-world circuit topology and project state, automatically generate layouts with **ELK.js** when layout data is missing, and validate incoming files using **JSON Schema + Ajv**. The pipeline was also tested against all **12 Editor's Picks** projects. + +--- + +## Project Overview + +The project started with a simple problem: **two logically identical circuits could produce different saved data depending on the order in which they were built or stored.** + +That makes saved circuit data difficult to compare, hash, validate, migrate, or safely use as a stable format for future tools. + +The goal was to introduce a structured canonical representation where the circuit's logical structure has a deterministic identity, while still preserving the information needed to reconstruct the complete CircuitVerse project. + +### Final Canonical v1 Scope + +Canonical v1 now forms an end-to-end pipeline around: + +- deterministic **project export and hashing** +- complete **multi-circuit and nested subcircuit** support +- canonical **import and round-trip verification** +- preservation of **routing, project state, annotations and visual metadata** +- strict **TypeScript data contracts** +- real-world **Editor's Picks integration tests** +- automatic layout generation using **ELK.js** +- **JSON Schema** and runtime validation using **Ajv** + +--- + +## Deterministic Canonical Export + +The export pipeline turns a live CircuitVerse project into a stable Canonical v1 representation step by step: + +### Export Flow + +1. **`canonicaliseProject()`** collects all circuit scopes and builds the SubCircuit dependency graph. +2. **`khansAlgorithm()`** orders those scopes child-first. If a dependency cycle exists, export stops. +3. Each scope is passed to **`canonicaliseScope()`**, which runs the scope-level canonical pipeline: + - `indexNodes()` maps live simulator nodes to stable indices. + - `discoverNets()` uses **Union-Find** to group electrically connected nodes into nets. + - `buildComponentDrafts()` reads component ports, properties and default state. + - `buildStructuralComponentData()` prepares the structure used for hashing and sorting. + - `canonicalSort()` uses **1-WL structural fingerprints** to sort non-interface components while preserving the Input/Output interface order. + - `assignComponentIds()` assigns stable component IDs. + - `attachComponentPorts()` and `buildCanonicalNets()` attach component ports and assign stable net IDs. + - `buildLayout()` stores routing, intermediate nodes, port positions and annotations, while `buildVisual()` stores canvas state. + - `buildCanonicalComponents()` creates the final component representation. +4. **`sha256()`** creates the structural hash for that scope. Child scope hashes are then used when hashing SubCircuit components, so their identity depends on the child circuit itself rather than a temporary scope ID. +5. Back in **`canonicaliseProject()`**, the ordered scopes are placed into the final circuits map, the scope hashes form the project hash, `buildProjectMetadata()` adds the project name, clock, focused circuit and tab order, and the final **`CanonicalProject`** is returned. + +![Deterministic canonical export architecture](/images/Harkeerat_Singh/final_canonicalisation_flow.svg) + +--- + +## Canonical Import and Round-Trip Verification + +The import side follows the reverse path: validate the Canonical project, rebuild its scopes and wiring, then canonicalise it again to make sure the reconstructed project still has the same identity. + +### Import Flow + +1. **`importCanonical()`** receives the project. In the validation layer, `validateCanonicalJson()` first checks the JSON Schema and project cross-references before import state is modified. +2. **`computeImportOrder()`** uses the same dependency idea to make sure child circuits are reconstructed before parents that use them as SubCircuits. +3. For every circuit, `newCircuit()` creates the scope and **`importSingleScope()`** rebuilds it: + - `buildComponents()` creates the component instances and restores saved port positions. + - if layout is missing, `generateElkLayout()` generates it with ELK.js. + - `applyComponentLayout()` places the components. + - `buildAnnotations()` restores annotations. + - `wireComponents()` reconnects simple nets. + - `restoreDefaultState()` restores saved component state. + - `restoreIntermediateNodes()` reconstructs routed wires and junctions. + - `restoreScopeMetadata()` restores the circuit metadata and canvas state. +4. **`verifyRoundTrip()`** canonicalises each reconstructed scope again and compares its hash with the original scope hash. +5. After all scopes are imported, **`canonicaliseProject()`** runs once more and compares the complete project hash with the original Canonical v1 project. +6. Only after a successful import does the pipeline restore the tab order, project name, clock settings and focused circuit, then refresh the simulator UI. + +![Canonical import and round-trip verification architecture](/images/Harkeerat_Singh/final_import_flow.svg) + +### Simulator Integration + +The pipeline is connected to the V1 simulator UI. Canonical projects can be: + +- previewed as JSON +- copied +- downloaded as `.cv` files +- imported back into CircuitVerse + +The import flow also keeps a backup of the current project so a failed import does not destroy the user's existing canvas. + +![Canonical export/import UI](/images/Harkeerat_Singh/week7_export_import_ui.png) + +### Canonical Pipeline Demo + +{{< youtube hPdCzJOewT8 >}} + +--- + +## Real-World Round-Trip Verification + +The final pipeline is also tested against all **12 CircuitVerse Editor's Picks projects** using local fixtures. + +### Verification Flow + +For every fixture, the same complete path is tested: + +**legacy project → canonical export → canonical import → canonical re-export → comparison** + +### Data Covered by the Round Trip + +The real-project fixtures verify that Canonical v1 preserves: + +- dangling and standalone wires +- fan-out and multi-port net topology +- intermediate routing nodes and component port positions +- project-level **name, clock settings, focused circuit and tab order** +- annotations and canvas state +- subcircuit display metadata + +The saved representation preserves the complete project data while keeping the structural hash focused on canonical identity. Routing is represented through unified connections that can point to either a component port or an intermediate routing node. + +> **Result:** All **12 Editor's Picks projects pass the complete round-trip tests.** 🎉 + +![All 12 Editor's Picks round-trip tests passing](/images/Harkeerat_Singh/final_editor_picks_tests.png) + +--- + +## Auto Layout with ELK.js + +A valid Canonical v1 project does not have to contain layout data. If layout exists, the importer preserves it exactly. If it is missing, the pipeline can generate a readable layout automatically using [ELK.js](https://github.com/kieler/elkjs). + +### Layout Resolution + +The layout rule is: + +- **layout present** → preserve the saved layout +- **layout missing** → run the ELK.js Auto Layout adapter + +### How I Implemented Auto Layout + +When layout is missing, the Auto Layout adapter follows a small pipeline of its own: + +1. **Build the real component instances** so the adapter can read their actual dimensions, directions and port positions. +2. **Build an ELK graph** from the components and nets. Input components are constrained toward the first layer, Outputs toward the last, and the real port positions are kept fixed. +3. **Represent fan-out nets with a temporary zero-size junction** so ELK can route one source to multiple targets without changing the Canonical v1 format. +4. **Run ELK's layered layout in a worker** using left-to-right placement and orthogonal edge routing. +5. **Convert the ELK result back to CircuitVerse routing**, turn bend/junction points into intermediate nodes, remove duplicates and snap the generated coordinates to the simulator grid. +6. The generated layout is then passed back into the **normal import flow**, just like a saved layout would be. + +![ELK.js Auto Layout layout-resolution flow](/images/Harkeerat_Singh/final_elk_architecture.svg) + +### Fan-Out Routing + +Fan-out needs an additional adapter because ELK works best with simple source-to-target edges while a CircuitVerse net can contain one source connected to several targets. + +The Auto Layout adapter therefore uses a **temporary zero-size junction** to preserve one shared branching point during layout. After ELK finishes, that temporary representation is converted back into CircuitVerse's normal intermediate routing nodes and bend points. + +Generated coordinates are deduplicated and snapped to the simulator grid, and **the ELK-specific junction never becomes part of Canonical v1 itself**. + +![Temporary ELK fan-out junction](/images/Harkeerat_Singh/final_elk_fanout.svg) + +--- + +## JSON Schema and Runtime Validation + +The final Canonical v1 pipeline includes a strict runtime validation layer so imported project data is checked before it can affect the simulator. The JSON Schema defines the structure the format accepts, while Ajv and the cross-reference checks make sure that the project is both well-formed and internally consistent. + +Together, these checks turn Canonical v1 into a format that the importer can trust instead of simply assuming that incoming JSON is valid. + +### Structural Validation + +The schema follows **JSON Schema Draft 2020-12** and uses reusable `$ref` definitions with constraints for: + +- scope, component and net identifiers +- port names and port references +- component and annotation types +- directions and bit widths +- routing connections and intermediate nodes +- project/circuit metadata +- required fields, numeric limits, enums and extra properties + +### Cross-Reference Validation + +1. **Ajv schema validation** checks the structure and safely narrows incoming `unknown` data to `CanonicalProject`. +2. **Cross-reference validation** checks the relationships inside the project: circuits, subcircuits, components, nets, layouts, routing nodes and routing endpoints must all point to valid data. + +Validation happens **before `importCanonical()` modifies project state**, and errors include useful JSON paths so invalid data is easier to locate. + +`layout` remains optional because a schema-valid project without layout can continue into the ELK.js Auto Layout path. + +--- + +## LLM-Generated Circuit Demo + +One useful result of Canonical v1 is that a circuit can be described through its **components and nets without depending on canvas coordinates**. Components describe what exists in the circuit, while nets describe which ports are electrically connected. + +The same representation gives LLMs a much cleaner target. Instead of asking a model to generate both circuit logic and exact canvas coordinates, it can generate the **Canonical v1 components, nets and SubCircuit relationships** and leave `layout` out. CircuitVerse can validate that JSON, rebuild the logical circuits in dependency order, and let ELK.js place and route them automatically. + +For the demo, I used a small hierarchical **2-bit ripple-carry adder with three circuit scopes**. The LLM generated a reusable **`HalfAdder`**, a **`FullAdder`** built from HalfAdder SubCircuit instances, and finally **`TwoBitAdder`** from two FullAdder SubCircuit instances. + +**LLM → hierarchical Canonical v1 `.cv` without layout → validation → child-first import → ELK.js Auto Layout → working CircuitVerse project** + +{{< youtube umxEPZxJ9mU >}} + +--- + +## Pull Request Summary + +| PR | What it delivered | Status | +|----|-------------------|--------| +| [#1093](https://github.com/CircuitVerse/cv-frontend-vue/pull/1093) | Initial deterministic canonical export pipeline | Superseded by #1095 | +| [#1094](https://github.com/CircuitVerse/cv-frontend-vue/pull/1094) | Multi-circuit canonical project support | Superseded by #1095 | +| [#1095](https://github.com/CircuitVerse/cv-frontend-vue/pull/1095) | Deterministic export, subcircuits, Kahn's Algorithm and cycle detection | **Merged** | +| [#1131](https://github.com/CircuitVerse/cv-frontend-vue/pull/1131) | Canonical import pipeline and round-trip verification | **Merged** | +| [#1132](https://github.com/CircuitVerse/cv-frontend-vue/pull/1132) | Export/import UI integration and rollback flow | **Merged** | +| [#1173](https://github.com/CircuitVerse/cv-frontend-vue/pull/1173) | Strict canonical types and pipeline refactor | **Merged** | +| [#1194](https://github.com/CircuitVerse/cv-frontend-vue/pull/1194) | Original Editor's Picks round-trip PR from my fork | Superseded by #1221 | +| [#1221](https://github.com/CircuitVerse/cv-frontend-vue/pull/1221) | Complete real-world round trips and 12 Editor's Picks tests | **Merged** | +| [#1222](https://github.com/CircuitVerse/cv-frontend-vue/pull/1222) | ELK.js Auto Layout for layout-less canonical projects | **Merged** | +| [#1236](https://github.com/CircuitVerse/cv-frontend-vue/pull/1236) | Canonical v1 JSON Schema | **In Review** | +| [#1242](https://github.com/CircuitVerse/cv-frontend-vue/pull/1242) | Ajv + cross-reference runtime validation | **In Review** | + +--- + +## What I Learnt + +A few things from this project will definitely stay with me: + +- **Determinism is much stricter than just sorting things.** Comparator rules, graph identity, subcircuit dependencies and tie-breaks all matter when one unstable ordering can change a hash. +- **Real projects are better teachers than happy-path fixtures.** The Editor's Picks tests broke assumptions that looked completely reasonable on smaller circuits. +- **Type safety forces design decisions into the open.** Moving away from loose structures made me define what Canonical v1 actually promises instead of letting implementation details stay vague. +- **A schema validates structure; software still has to validate meaning.** Ajv can prove that an ID has the right format, but cross-reference validation is what proves that the ID points to something real. +- **Mentor reviews changed the architecture, not just the code.** Many of the strongest parts of the final pipeline came from questions raised during review rather than from my first implementation. +- **Stacked PRs are genuinely useful.** They let me keep working on dependent features without turning each review into one giant mixed diff. + +--- + +## Weekly Blogs + +I wrote a blog every week, so the complete GSoC journey is documented here: + +| Period | Blog | +|--------|------| +| Community Bonding | [From a Student Who Used CircuitVerse to a GSoC Contributor](https://dev.to/harkeerat24/from-a-student-who-used-circuitverse-to-a-gsoc-contributor-my-community-bonding-story-43ie) | +| Week 1 | [Canonicalization, Community & a Win](https://dev.to/harkeerat24/gsoc26-week-1-gkd) | +| Week 2 | [Scaling to Multi-Circuit Support](https://dev.to/harkeerat24/gsoc26-week-2-177) | +| Week 3 | [Subcircuits, Sorting & Demo Day](https://dev.to/harkeerat24/gsoc26-week-3-b1a) | +| Week 4 | [A Slow Week, Big Progress](https://dev.to/harkeerat24/gsoc-2026-week-4-2p33) | +| Week 5 | [Back on Track with Import](https://dev.to/harkeerat24/gsoc-2026-week-5-29hd) | +| Week 6 | [First PR Finally Merged](https://dev.to/harkeerat24/gsoc-2026-week-6-50d) | +| Week 7 | [The Full Pipeline Comes Alive](https://dev.to/harkeerat24/gsoc-2026-week-7-1i84) | +| Week 8 | [Midterms Passed!](https://dev.to/harkeerat24/gsoc-2026-week-8-48cg) | +| Week 9 | [Rethinking Type Safety](https://dev.to/harkeerat24/gsoc-2026-week-9-1ddp) | +| Week 10 | [Stricter Types, PR Merged](https://dev.to/harkeerat24/gsoc-2026-week-10-49io) | +| Week 11 | [Real Circuits Broke My Assumptions](https://dev.to/harkeerat24/gsoc-2026-week-11-2fj) | +| Week 12 | [T-Shirt, Tests & Auto Layout](https://dev.to/harkeerat24/gsoc-2026-week-12-3i5f) | +| Week 13 | [Auto Layout](https://dev.to/harkeerat24/gsoc26week13-auto-layout-mge) | +| Week 14 | [Schema, AJV & the Final Stretch](https://dev.to/harkeerat24/gsoc26week14-schema-ajv-the-final-stretch-7kg) | + +--- + +## Acknowledgements + +I'm grateful to my mentors [Aboobacker MK](https://github.com/tachyons), [Josh Varga](https://github.com/JoshVarga) and [Aryann](https://github.com/aryanndwi123) for their reviews, questions, ideas and support throughout the project. Their feedback constantly pushed me to question assumptions, simplify the design and make the final pipeline stronger. + +I'm also very thankful to the **CircuitVerse community** for the trust, feedback and support throughout the summer, and to **Google Summer of Code** for giving me the opportunity. I learnt a huge amount from building, testing and refining this project, and I'm genuinely proud of the final result we were able to put together. 🩵 \ No newline at end of file diff --git a/static/images/Harkeerat_Singh/final_canonicalisation_flow.svg b/static/images/Harkeerat_Singh/final_canonicalisation_flow.svg new file mode 100644 index 0000000..91c4bab --- /dev/null +++ b/static/images/Harkeerat_Singh/final_canonicalisation_flow.svg @@ -0,0 +1,167 @@ + + + + + + +G + +Deterministic Canonical Export + + +start + +CircuitVerse Project +(all scopes) + + + +project + +1. canonicaliseProject() +Build the subcircuit dependency graph + + + +start->project + + + + + +kahn + +2. khansAlgorithm() +Order child scopes before parents +Reject cyclic dependencies + + + +project->kahn + + + + + +scope + +3. canonicaliseScope() +Process each scope in dependency order + + + +kahn->scope + + + + + +cycle + +Cycle detected +Export fails + + + +kahn->cycle + + +cycle + + + +nets + +4. indexNodes() + discoverNets() +Union-Find groups connected nodes into nets + + + +scope->nets + + + + + +drafts + +5. buildComponentDrafts() +Read component ports, properties and default state + + + +nets->drafts + + + + + +structure + +6. buildStructuralComponentData() + canonicalSort() +1-WL fingerprints sort non-interface components +Input/Output interface order is preserved + + + +drafts->structure + + + + + +ids + +7. assignComponentIds() + buildCanonicalNets() +Assign stable component and net IDs + + + +structure->ids + + + + + +layout + +8. buildLayout() + buildVisual() +Save routing, port positions, annotations and canvas state + + + +ids->layout + + + + + +scopehash + +9. sha256() +Create the structural hash for each scope + + + +layout->scopehash + + + + + +final + +10. Project hash + project metadata +Return CanonicalProject (Canonical v1) + + + +scopehash->final + + + + + diff --git a/static/images/Harkeerat_Singh/final_editor_picks_tests.png b/static/images/Harkeerat_Singh/final_editor_picks_tests.png new file mode 100644 index 0000000000000000000000000000000000000000..640118fc795dd4e3869bf92fb2e5261a9a953b21 GIT binary patch literal 114796 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 hHpjp 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 + + + + + +G + +ELK.js Auto Layout — Layout Resolution + + +validated + +Validated Canonical Circuit + + + +layout + +Layout +available? + + + +validated->layout + + + + + +restore + +Restore saved layout + + + +layout->restore + + +yes + + + +instances + +Construct component instances + + + +layout->instances + + +no + + + +continue + +Continue import + + + +restore->continue + + + + + +dims + +Read real dimensions, directions +and port positions + + + +instances->dims + + + + + +graphnode + +Build ELK graph + + + +dims->graphnode + + + + + +elk + +ELK layered layout ++ orthogonal routing + + + +graphnode->elk + + + + + +convert + +Convert ELK result back to +CircuitVerse routing + + + +elk->convert + + + + + +snap + +Deduplicate + snap to grid + + + +convert->snap + + + + + +snap->continue + + + + + diff --git a/static/images/Harkeerat_Singh/final_elk_fanout.svg b/static/images/Harkeerat_Singh/final_elk_fanout.svg new file mode 100644 index 0000000..9016096 --- /dev/null +++ b/static/images/Harkeerat_Singh/final_elk_fanout.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/images/Harkeerat_Singh/final_import_flow.svg b/static/images/Harkeerat_Singh/final_import_flow.svg new file mode 100644 index 0000000..4674ac3 --- /dev/null +++ b/static/images/Harkeerat_Singh/final_import_flow.svg @@ -0,0 +1,149 @@ + + + + + + +G + +Canonical Import and Round-Trip Verification + + +start + +Canonical v1 Project + + + +validate + +1. validateCanonicalJson() +Check schema + project cross-references + + + + + + +order + +2. computeImportOrder() +Order child circuits before parent SubCircuits + + + + + +reject + +Validation / round-trip fails +Import is rejected + + + +fail + + +scope + +3. newCircuit() + importSingleScope() +Create and rebuild each scope + + + + + +components + +4. buildComponents() +Create component instances + restore port positions + + + + + +layout + +Layout +present? + + + + + +saved + +Use saved layout + + + +yes + + +elk + +generateElkLayout() +Generate positions + routing with ELK.js + + + +no + + +restore + +5. Restore circuit state +applyComponentLayout() + buildAnnotations() +wireComponents() + restoreDefaultState() +restoreIntermediateNodes() + restoreScopeMetadata() + + + + + + + +verifyScope + +6. verifyRoundTrip() +Canonicalise the rebuilt scope and compare its hash + + + + + +verifyProject + +7. canonicaliseProject() +Re-export the complete project and compare its hash + + + + + +mismatch + + +metadata + +8. Restore project state +Tab order • project name • clock • focused circuit + + + + + +mismatch + + +final + +Reconstructed CircuitVerse Project + + + + + From db9928d27f2bf78ac65348e5ebfcb7c4f6c75685 Mon Sep 17 00:00:00 2001 From: Harkeerat Singh Date: Sun, 6 Sep 2026 05:32:52 +0000 Subject: [PATCH 2/3] fix: updating the pr status --- content/posts/Harkeerat_Singh_GSoC26_Final_Report.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md b/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md index 5e98f40..010b622 100644 --- a/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md +++ b/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md @@ -225,8 +225,8 @@ For the demo, I used a small hierarchical **2-bit ripple-carry adder with three | [#1194](https://github.com/CircuitVerse/cv-frontend-vue/pull/1194) | Original Editor's Picks round-trip PR from my fork | Superseded by #1221 | | [#1221](https://github.com/CircuitVerse/cv-frontend-vue/pull/1221) | Complete real-world round trips and 12 Editor's Picks tests | **Merged** | | [#1222](https://github.com/CircuitVerse/cv-frontend-vue/pull/1222) | ELK.js Auto Layout for layout-less canonical projects | **Merged** | -| [#1236](https://github.com/CircuitVerse/cv-frontend-vue/pull/1236) | Canonical v1 JSON Schema | **In Review** | -| [#1242](https://github.com/CircuitVerse/cv-frontend-vue/pull/1242) | Ajv + cross-reference runtime validation | **In Review** | +| [#1236](https://github.com/CircuitVerse/cv-frontend-vue/pull/1236) | Canonical v1 JSON Schema | **Merged** | +| [#1242](https://github.com/CircuitVerse/cv-frontend-vue/pull/1242) | Ajv + cross-reference runtime validation | **Merged** | --- @@ -271,4 +271,4 @@ I wrote a blog every week, so the complete GSoC journey is documented here: I'm grateful to my mentors [Aboobacker MK](https://github.com/tachyons), [Josh Varga](https://github.com/JoshVarga) and [Aryann](https://github.com/aryanndwi123) for their reviews, questions, ideas and support throughout the project. Their feedback constantly pushed me to question assumptions, simplify the design and make the final pipeline stronger. -I'm also very thankful to the **CircuitVerse community** for the trust, feedback and support throughout the summer, and to **Google Summer of Code** for giving me the opportunity. I learnt a huge amount from building, testing and refining this project, and I'm genuinely proud of the final result we were able to put together. 🩵 \ No newline at end of file +I'm also very thankful to the **CircuitVerse community** for the trust, feedback and support throughout the summer, and to **Google Summer of Code** for giving me the opportunity. I learnt a huge amount from building, testing and refining this project, and I'm genuinely proud of the final result we were able to put together. 🩵 From 8ed10694149471106f9b53fc29fe1f887cb2a204 Mon Sep 17 00:00:00 2001 From: Harkeerat Singh Date: Sun, 6 Sep 2026 14:41:38 +0000 Subject: [PATCH 3/3] docs: update links and prs info --- content/posts/Harkeerat_Singh_GSoC26_Final_Report.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md b/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md index 010b622..d6208b1 100644 --- a/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md +++ b/content/posts/Harkeerat_Singh_GSoC26_Final_Report.md @@ -106,7 +106,7 @@ The import flow also keeps a backup of the current project so a failed import do ## Real-World Round-Trip Verification -The final pipeline is also tested against all **12 CircuitVerse Editor's Picks projects** using local fixtures. +The final pipeline is also tested against all [**12 CircuitVerse Editor's Picks projects**](https://circuitverse.org/explore?section=picks#picks) using local fixtures. ### Verification Flow @@ -222,7 +222,6 @@ For the demo, I used a small hierarchical **2-bit ripple-carry adder with three | [#1131](https://github.com/CircuitVerse/cv-frontend-vue/pull/1131) | Canonical import pipeline and round-trip verification | **Merged** | | [#1132](https://github.com/CircuitVerse/cv-frontend-vue/pull/1132) | Export/import UI integration and rollback flow | **Merged** | | [#1173](https://github.com/CircuitVerse/cv-frontend-vue/pull/1173) | Strict canonical types and pipeline refactor | **Merged** | -| [#1194](https://github.com/CircuitVerse/cv-frontend-vue/pull/1194) | Original Editor's Picks round-trip PR from my fork | Superseded by #1221 | | [#1221](https://github.com/CircuitVerse/cv-frontend-vue/pull/1221) | Complete real-world round trips and 12 Editor's Picks tests | **Merged** | | [#1222](https://github.com/CircuitVerse/cv-frontend-vue/pull/1222) | ELK.js Auto Layout for layout-less canonical projects | **Merged** | | [#1236](https://github.com/CircuitVerse/cv-frontend-vue/pull/1236) | Canonical v1 JSON Schema | **Merged** |