Skip to content

Commit d0a13b2

Browse files
authored
Merge v2-release: 2.0.0 metadata, changelog, Store notes and screenshots
Prepare MEDHĀ 2.0.0 release assets (no publishing)
2 parents 9e7f12a + f16d560 commit d0a13b2

24 files changed

Lines changed: 465 additions & 21 deletions

‎CHANGELOG.md‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Changelog
2+
3+
## 2.0.0 — release preparation (unreleased)
4+
5+
### Added and improved
6+
7+
- VS Code-style workbench with activity bar, collapsible sidebar and bottom panel; layout sizes are remembered.
8+
- Medhā Dark and Medhā Light themes, readable tab controls and a clickable editor minimap.
9+
- Command centre and searchable command palette (Ctrl+Shift+P).
10+
- Quick Open (Ctrl+P), workspace search and reorganized menus preserving existing commands.
11+
- Welcome tab with New C file, Open folder, Recent files, Turbo C examples and Learn DSA visually.
12+
- Real document, Git and compiler status; optional CPU/RAM display.
13+
14+
### Fixed
15+
16+
- **B1:** Right-side tools no longer squeeze the editor; code gets at least 60% width at the target resolutions.
17+
- **B2:** Literal ampersands display correctly in tool titles and file tabs.
18+
- **B4:** Removed the duplicate extension-contribution loader.
19+
- **B6:** Real registry tests require an explicit network opt-in; offline tests remain enabled.
20+
- **B7:** Removed unused bindings while preserving graphics calls and public exports; pyflakes is clean.
21+
- **B8:** Child processes stop before widgets are destroyed, preventing late disassembly callbacks.
22+
- **B9:** Unsaved documents have Save/Discard/Cancel protection, including cancelled Save As.
23+
24+
### Coming in this release
25+
26+
- **B3 — terminal: coming in this release.** Placeholder for Nemotron's PTY/ConPTY work on `v2-bugs`. Not implemented or claimed as fixed by this preparation PR. Replace this entry only after merge and platform verification.
27+
28+
### Release gates
29+
30+
- This branch prepares assets only. Nothing has been published or submitted.
31+
- Main and the public Snap listing reported 2.0.1 before this preparation. The requested 2.0.0 target needs version-order review against existing Store packages before submission.
32+
- Windows package build/install/launch/uninstall, strict Snap runtime verification and the cross-platform manual checklist remain pending.
33+
- B5 remains tracked separately in `docs/MEDHA-v2-PLAN.md`.

‎README.md‎

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,32 @@
44

55
# MEDHĀ IDE
66

7-
**Native PySide6 offline IDE for C/C++/Python — editor, real compiler runs, terminal, problems panel, LSP (clangd/pylsp), GDB/debugpy debugger, Git, CMake build, local Ollama AI panel, Open VSX extensions (themes/snippets/grammar subset).**
7+
**Offline C, C++, Java and Python IDE with a VS Code-style workbench, visual learning tools and Turbo C compatibility.**
8+
9+
![Medhā 2.0 workbench with editor and minimap](store/screenshots-v2/02-editor-minimap.png)
10+
11+
The 2.0.0 workbench release is being prepared here; Store links install the
12+
currently published package. See [CHANGELOG](CHANGELOG.md) for release status.
13+
14+
[Get MEDHĀ IDE from Microsoft Store](https://apps.microsoft.com/detail/9ndcdm1mmh5t) ·
15+
[Install from Snap Store](https://snapcraft.io/medha-ide) ·
16+
[View all seven new UI screenshots](store/screenshots-v2/README.md)
17+
18+
## New workbench
19+
20+
- Activity bar, collapsible sidebar and bottom panel; Ctrl+B/Ctrl+J and remembered sizes.
21+
- Medhā Dark and Light themes, syntax highlighting, editor minimap and grey tab-close buttons.
22+
- Command centre and palette (Ctrl+Shift+P), Quick Open (Ctrl+P) and workspace search.
23+
- Welcome tab with New/Open, Recent files, Turbo C examples and Learn DSA visually.
24+
- DSA, memory, disassembly, debug, AI and extension tools remain accessible in the new layout.
25+
- Real document, branch and compiler status; optional CPU/RAM display.
26+
- Save/Discard/Cancel protection for unsaved documents.
827

928
---
1029

1130
## What MEDHA Is
1231

13-
MEDHĀ is a **native desktop IDE** written in Python with PySide6 (Qt 6). It is offline-first: everything works without internet except searching/downloading extensions from Open VSX. No Electron, no web views, no bundled browsers. It integrates your system toolchain (gcc, g++, gdb, python3, clangd, pylsp, cmake, git, ollama) into a single window with dockable panels.
32+
MEDHĀ is a **native desktop IDE** written in Python with PySide6 (Qt 6). Editing and local toolchains work offline. Open VSX downloads need internet, and optional AI needs a reachable Ollama service. No Electron, no web views, no bundled browsers. It integrates your system toolchain (gcc, g++, gdb, python3, clangd, pylsp, cmake, git, ollama) into one editor-first workbench.
1433

1534
**Not a web app.** The `legacy/` folder (archived) was a React/Vite/Monaco prototype — it is not MEDHA.
1635

@@ -41,9 +60,30 @@ MEDHĀ is a **native desktop IDE** written in Python with PySide6 (Qt 6). It is
4160

4261
## Install
4362

63+
### Windows
64+
65+
Install [MEDHĀ IDE from Microsoft Store](https://apps.microsoft.com/detail/9ndcdm1mmh5t).
66+
The packaged app includes offline GCC/G++, Java and Python toolchains.
67+
68+
### Linux (Snap)
69+
70+
Use the [Snap Store listing](https://snapcraft.io/medha-ide), or:
71+
72+
```sh
73+
sudo snap install medha-ide
74+
# Optional: allow projects on removable drives
75+
sudo snap connect medha-ide:removable-media
76+
```
77+
78+
The strict Snap includes compilers but does not support GDB/ptrace or direct use
79+
of host-installed tools. Git, CMake, cppcheck and external language servers are
80+
not bundled in this Snap. Source builds can use installed system tools.
81+
82+
### From source
83+
4484
```bash
4585
# 1. Clone and enter
46-
git clone <this-repo> medha-ide
86+
git clone https://github.com/Kanak234/medha-ide.git
4787
cd medha-ide
4888

4989
# 2. Create venv and install deps
@@ -70,8 +110,10 @@ python3 -m venv .venv
70110
## Run Tests & Validators
71111

72112
```bash
73-
# Unit tests
74-
.venv/bin/python -m pytest tests -q
113+
# Offline unit tests (real network tests require MEDHA_NETWORK_TESTS=1)
114+
QT_QPA_PLATFORM=offscreen .venv/bin/python -m pytest -q
115+
.venv/bin/python -m pyflakes medha
116+
QT_QPA_PLATFORM=offscreen .venv/bin/python -m pytest tests/test_ui_smoke.py -q
75117

76118
# Adversarial validator (Phases 1-2): window, runner, terminal, diagnostics
77119
.venv/bin/python verify_medha.py
@@ -92,15 +134,16 @@ python3 -m venv .venv
92134
- **No VS Code JavaScript extensions** — only Open VSX extensions that are pure data (themes, snippets, TextMate grammars). Node.js-based extensions (language servers, debuggers, formatters) cannot run.
93135
- **LSP requires external binaries** — `clangd` for C/C++, `pylsp` for Python. Install them separately; MEDHA will auto-detect if on PATH.
94136
- **Debugpy for Python** — install via `pip install debugpy` (or `--break-system-packages`).
95-
- **No bundled compilers/runtimes** — uses your system `gcc`, `g++`, `python3`, `cmake`, `git`.
96-
- **Linux-first** — Wayland/X11 via Qt. Windows/macOS untested.
137+
- **Tool availability depends on the package** — Store/Snap builds bundle compilers; source builds use configured or system tools. The strict Snap restrictions are listed above.
138+
- **Release preparation** — these new screenshots were captured on Linux; Windows 2.0.0 build/install/launch/uninstall acceptance remains pending.
139+
- **Interactive terminal (B3)** — PTY/ConPTY improvements are coming in this release on `v2-bugs`; they are not yet part of this preparation branch.
97140
- **No web browser, no Monaco, no LibreOffice, no VLC, no game engine** — those were in the archived `legacy/` prototype.
98141

99142
---
100143

101144
## Logo
102145

103-
The logo mark (`medha/assets/logo-mark.svg`) is shown above. If you don't see it, the file may be at `video-editor/logo-mark.svg` in the parent workspace.
146+
The logo mark is in [`docs/assets/logo-mark.svg`](docs/assets/logo-mark.svg).
104147

105148
---
106149

‎build_packages.py‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import shutil
44
import subprocess
55
from pathlib import Path
6+
from medha import __version__ as VERSION
67

78
ROOT = Path(__file__).resolve().parent
89
RELEASE = ROOT / "release"
@@ -42,7 +43,7 @@ def main():
4243

4344
# Step 2: Build Debian Package (.deb)
4445
print("[2/4] Constructing Debian Package (.deb)...")
45-
deb_dir = BUILD_DIR / "deb" / "medha-ide_1.1.0_amd64"
46+
deb_dir = BUILD_DIR / "deb" / f"medha-ide_{VERSION}_amd64"
4647
deb_bin = deb_dir / "usr" / "bin"
4748
deb_lib = deb_dir / "usr" / "lib" / "medha-ide"
4849
deb_apps = deb_dir / "usr" / "share" / "applications"
@@ -103,8 +104,8 @@ def main():
103104
# System tools (gcc, g++, gdb, git, cmake, make) are required at runtime for
104105
# the IDE's core functionality (compilation, debugging, Git, CMake).
105106
control = deb_control / "control"
106-
control.write_text("""Package: medha-ide
107-
Version: 1.1.0
107+
control.write_text(f"""Package: medha-ide
108+
Version: {VERSION}
108109
Architecture: amd64
109110
Maintainer: Kanak Prabhakar <kanakprabhakar72@gmail.com>
110111
Depends: gcc, g++, gdb, git, cmake, make, libc6 (>= 2.34), libstdc++6 (>= 12), libgcc-s1 (>= 12)
@@ -117,7 +118,7 @@ def main():
117118
""")
118119

119120
# Build .deb
120-
deb_path = RELEASE / "medha-ide_1.1.0_amd64.deb"
121+
deb_path = RELEASE / f"medha-ide_{VERSION}_amd64.deb"
121122
r = subprocess.run(["dpkg-deb", "--build", str(deb_dir), str(deb_path)], capture_output=True, text=True)
122123
if r.returncode == 0:
123124
print(f"Debian package created successfully: {deb_path} ({deb_path.stat().st_size} bytes)")
@@ -137,7 +138,7 @@ def main():
137138

138139
shutil.copy(desktop, appdir / "medha-ide.desktop")
139140

140-
appimage_path = RELEASE / "MEDHA_IDE-1.1.0-x86_64.AppImage"
141+
appimage_path = RELEASE / f"MEDHA_IDE-{VERSION}-x86_64.AppImage"
141142
# Create self-extracting / executable AppImage wrapper
142143
tar_cmd = ["tar", "-czf", str(appimage_path), "-C", str(appdir), "."]
143144
subprocess.run(tar_cmd, check=True)

‎docs/V2-RELEASE-PREP.md‎

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# 2.0.0 release preparation — 2026-11-05
2+
3+
Prepared on `v2-release` from main `94824a6` (merged Track A, PR #7).
4+
This is preparation only: no package upload, Store submission, tag, release,
5+
Snap promotion or publishing workflow was performed.
6+
7+
## Prepared assets
8+
9+
- App/About, AppStream, Windows manifest/EXE version metadata and Linux package
10+
builders use 2.0.0 (MSIX: 2.0.0.0). Snap derives the app version via adopt-info.
11+
- [Changelog](../CHANGELOG.md) includes B1/B2/B4/B6/B7/B8/B9 and the requested
12+
B3 “coming in this release” placeholder.
13+
- [Partner Center copy](../store/listing.md) contains 633 characters between
14+
WHATS_NEW markers, including newlines; paste those bullets verbatim.
15+
- [Seven screenshots](../store/screenshots-v2/README.md) are native 1920×1080,
16+
generated with `QT_QPA_PLATFORM=offscreen python tools/capture_v2.py --store`.
17+
Scene evidence accompanies the images. README uses the new UI and official
18+
[Microsoft Store](https://apps.microsoft.com/detail/9ndcdm1mmh5t) and
19+
[Snap](https://snapcraft.io/medha-ide) links.
20+
21+
## Offline validation
22+
23+
Linux source checkout, Python virtual environment, Qt offscreen platform,
24+
isolated XDG settings/data directories and default network opt-out:
25+
26+
| Command | Result |
27+
|---|---|
28+
| `python -m pytest -q` | 110 passed, 1 skipped (explicit network opt-in) |
29+
| `python -m pyflakes medha` | Passed, no diagnostics |
30+
| `QT_QPA_PLATFORM=offscreen python -m pytest tests/test_ui_smoke.py -q` | 20 passed |
31+
| `python -m pyflakes tools/capture_v2.py tools/store_scenes.py build_packages.py tests/test_release_metadata.py` | Passed, no diagnostics |
32+
| `git diff --check` | Passed |
33+
34+
New release tests verify package-version agreement, About version, Store-copy
35+
length and screenshot dimensions. Capture validation exercised real GDB, Python
36+
DSA tracing and a compiled Turbo C graphics example; every screenshot was
37+
visually inspected. These checks do not establish Windows package acceptance.
38+
39+
## Remaining release gates
40+
41+
- Resolve version ordering before submission: the base app and public Snap
42+
listing already reported 2.0.1. This branch follows the requested 2.0.0 target;
43+
compatibility with previously uploaded Windows versions is not established.
44+
- Merge and validate B3 from `v2-bugs`, then replace its changelog placeholder.
45+
B5 remains separately tracked in the plan.
46+
- Build the MSIX on Windows using the existing packaging script, and verify
47+
install, launch, uninstall and the plan's Windows/Ubuntu manual checklist.
48+
Build and validate the strict Snap, including its documented debugger limits.
49+
- Verify screenshots against the Windows package before Store submission.
50+
- Publishing requires a separate instruction. The existing Windows workflow
51+
can create a GitHub Release even when manually dispatched, so it was not run.
52+
53+
`medha/terminal.py`, `tests/conftest.py`, runner/project-manager/toolchain/debugger/
54+
Turbo tests, licenses, privacy policy and signing/certificate files are unchanged.

‎medha/__init__.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@
1515
if not IS_WINDOWS:
1616
extend_path([os.path.expanduser("~/.local/bin")])
1717

18-
__version__ = "2.0.1"
18+
__version__ = "2.0.0"

‎medha/app.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1124,7 +1124,7 @@ def show_about_dialog(self):
11241124
from medha import __version__
11251125
from medha import toolchains
11261126
box = QMessageBox(self)
1127-
box.setWindowTitle("About MEDHĀ IDE")
1127+
box.setWindowTitle(f"About MEDHĀ IDE {__version__}")
11281128
# Kanak's KP orbit logo (docs/assets/logo-mark.svg) is the watermark of every project
11291129
logo = os.path.join(str(platform_info.app_root()), "docs", "assets", "logo-mark.svg")
11301130
if os.path.exists(logo):

‎packaging/io.github.Kanak234.Medha.metainfo.xml‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,18 @@
6262
<content_attribute id="sex-themes">none</content_attribute>
6363
</content_rating>
6464
<releases>
65+
<release version="2.0.0" date="2026-11-05" type="development">
66+
<description>
67+
<p>Release preparation: new VS Code-style workbench and safer editing.</p>
68+
<ul>
69+
<li>Activity bar, collapsible sidebar and panel with more space for code</li>
70+
<li>Medhā Dark and Light themes, editor minimap and Welcome tab</li>
71+
<li>Command centre, searchable commands and Quick Open</li>
72+
<li>Correct ampersand titles and Save/Discard/Cancel protection</li>
73+
<li>Offline test defaults, clean lint and safer process shutdown</li>
74+
</ul>
75+
</description>
76+
</release>
6577
<release version="1.1.0" date="2026-10-21">
6678
<description>
6779
<p>First public release for Snap Store.</p>

‎packaging/windows/AppxManifest.xml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
MEDHĀ IDE — MSIX manifest (Microsoft Store, free Individual developer account).
44
WHAT: describes the packaged Win32 app (MEDHA.exe) to Windows and the Store.
55
Identity values copied from Partner Center → Product identity (23 Oct 2026).
6-
They are public (every installed MSIX shows them), so they live in the repo. build_msix.ps1 replaces __VERSION__.
6+
They are public (every installed MSIX shows them), so they live in the repo. build_msix.ps1 synchronizes Identity.Version from medha/__init__.py.
77
runFullTrust: required for a classic desktop (Win32) app; nothing else is requested.
88
-->
99
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
@@ -12,7 +12,7 @@
1212
IgnorableNamespaces="uap rescap">
1313
<Identity Name="KanakPrabhakar.MEDHIDE"
1414
Publisher="CN=D47E0796-ADF8-4726-BE39-DCBB2D6B664D"
15-
Version="__VERSION__"
15+
Version="2.0.0.0"
1616
ProcessorArchitecture="x64" />
1717
<Properties>
1818
<DisplayName>MEDHĀ IDE</DisplayName>

‎packaging/windows/build_msix.ps1‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ if (-not $gui.WaitForExit(120000)) { $gui.Kill(); throw "GUI startup timed out"
3737
if ($gui.ExitCode -ne 0 -or -not (Test-Path $env:MEDHA_SMOKE_RESULT)) { throw "GUI startup failed (exit $($gui.ExitCode))" }
3838
if ((Get-Content $env:MEDHA_SMOKE_RESULT -Raw | ConvertFrom-Json).status -ne "PASS") { throw "GUI smoke test failed" }
3939
Copy-Item -Recurse dist\MEDHA "$layout\MEDHA"
40-
(Get-Content packaging\windows\AppxManifest.xml -Raw).Replace("__VERSION__", $msixVer) | Set-Content "$layout\AppxManifest.xml" -Encoding utf8
40+
# Keep the checked-in release version readable, while future builds derive it from the app.
41+
[xml]$manifest = Get-Content packaging\windows\AppxManifest.xml -Raw
42+
$manifest.Package.Identity.Version = $msixVer
43+
$manifest.Save("$layout\AppxManifest.xml")
4144
# MSIX rejects some file names (makeappx error 0x8007007b). Drop NSIS/7z leftovers
4245
# whose names start with '$', then report any remaining name outside the safe set.
4346
# '[' and ']' are not allowed in MSIX/OPC part names — 7-Zip leaves "[NSIS].nsi"

‎packaging/windows/medha_windows.spec‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,29 @@
44
# WHY one-folder (not one-file): MSIX installs a folder anyway, and one-file
55
# re-extracts ~1 GB of compilers to %TEMP% on every start.
66
# FLOW: build_msix.ps1 → pyinstaller medha_windows.spec → dist/MEDHA/MEDHA.exe
7+
import ast
78
import os
9+
from PyInstaller.utils.win32.versioninfo import VSVersionInfo, FixedFileInfo, StringFileInfo, StringTable, StringStruct, VarFileInfo, VarStruct
810
ROOT = os.path.abspath(os.path.join(SPECPATH, "..", ".."))
11+
# Read the package version without importing GUI code during the Windows build.
12+
with open(os.path.join(ROOT, "medha", "__init__.py"), encoding="utf-8") as source:
13+
version_tree = ast.parse(source.read())
14+
VERSION = next(ast.literal_eval(node.value) for node in version_tree.body
15+
if isinstance(node, ast.Assign) and any(isinstance(target, ast.Name)
16+
and target.id == "__version__" for target in node.targets))
17+
version_tuple = tuple(int(part) for part in VERSION.split(".")) + (0,)
18+
version_info = VSVersionInfo(
19+
ffi=FixedFileInfo(filevers=version_tuple, prodvers=version_tuple, mask=0x3f,
20+
flags=0, OS=0x40004, fileType=1, subtype=0, date=(0, 0)),
21+
kids=[StringFileInfo([StringTable('040904B0', [
22+
StringStruct('CompanyName', 'Kanak Prabhakar'),
23+
StringStruct('FileDescription', 'MEDHĀ IDE'),
24+
StringStruct('FileVersion', VERSION),
25+
StringStruct('ProductName', 'MEDHĀ IDE'),
26+
StringStruct('ProductVersion', VERSION),
27+
StringStruct('OriginalFilename', 'MEDHA.exe'),
28+
])]), VarFileInfo([VarStruct('Translation', [1033, 1200])])])
29+
# Explorer's Details tab and MSIX now agree with About on the release version.
930
datas = [(os.path.join(ROOT, "medha", "workbench.qss"), "medha"),
1031
(os.path.join(ROOT, "medha", "turbo", "runtime"), "medha/turbo/runtime"),
1132
(os.path.join(ROOT, "medha", "turbo", "modernize_explanations.json"), "medha/turbo"),
@@ -16,6 +37,6 @@ if os.path.isdir(os.path.join(ROOT, "toolchains")):
1637
a = Analysis([os.path.join(ROOT, "packaging", "windows", "medha_entry.py")], pathex=[ROOT], datas=datas,
1738
hiddenimports=["medha.app", "PySide6.QtSvg"], excludes=["tkinter"])
1839
pyz = PYZ(a.pure)
19-
exe = EXE(pyz, a.scripts, [], exclude_binaries=True, name="MEDHA", console=False,
40+
exe = EXE(pyz, a.scripts, [], exclude_binaries=True, name="MEDHA", console=False, version=version_info,
2041
icon=os.path.join(ROOT, "packaging", "windows", "medha.ico") if os.path.exists(os.path.join(ROOT, "packaging", "windows", "medha.ico")) else None)
2142
coll = COLLECT(exe, a.binaries, a.datas, name="MEDHA")

0 commit comments

Comments
 (0)